如何在Python中轻松操作Sikuli:入门与实践指南
Sikuli是目前用来做自动化测试的一个很好的工具,笔者这段时间由于工作需要,研究了一下这方面的东西,写出来和大家分享。
Sikuli可以结合Python的unittest框架来进行测试,具体地,就是在sikuli工程中直接嵌入Pythonunittest的代码即可。因为本质上Sikuli工程中可以插入任何可以在Jython上运行的Python代码。
但是需要注意两个地方:
1.运行unittest脚本的时候,不能使用默认的方式,应该使用下面的代码来运行:
unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromTestCase(YOUR_TEST_CLASS))
否则,unittest框架默认会在执行完所有case后退出程序,会导致sikuli报错。
2.考虑关闭Sikuli的输出。否则当输出太多时,会把一些unittest的测试结果给刷掉,另外Sikuli的输入太多,大部分是没用的信息。笔者暂时没有找到关闭输出的方法,不过有另外一个方式,Sikuli在执行时提供一个命令,可以配置Sikuli的log输出文件。这样可以让Sikuli把自己的log输出到单独的文件中,这样在命令行中运行Sikuli脚本的时候,只会看到unittest的输出,不会看到Sikuli的输出了。
下面是一个Sikulidemo,不能直接运行,只是一个示例。sikuli_browser是笔者自己写的一个用来测试浏览器Python类,该类继承了unittest.TestCase,具体代码就不给出来了。
importrandom
importunittest
importos
importsikuli_browser
classTestSequenceFunctions(sikuli_browser.BrowserTest):
def__init__(self,*args,**kwargs):
super(TestSequenceFunctions,self).__init__(*args,**kwargs)
self.obj_close_window="common/obj_close_window.png"
self.obj_start="common/obj_start.png"
self.obj_start_browser="common/obj_start_browser.png"
self.obj_task_browser="common/obj_task_browser.png"
self.obj_task_close_window="common/obj_task_close_window.png"
self.obj_task_close_all_windows="common/obj_task_close_all_windows.png"
self.obj_new_tab="common/obj_new_tab.png"
self.obj_addr="common/obj_addr.png"
self.obj_menu="common/obj_menu.png"
self.obj_home="common/obj_home.png"
self.obj_min="common/obj_min.png"
self.obj_restore="common/obj_restore.png"
self.obj_favorite="common/obj_favorite.png"
self.obj_refresh="common/obj_refresh.png"
defsetUp(self):
self.close_browser()
hover(Location(,))
self.open_browser()
ifself.exists(".png",2):
self.click(".png")
sleep(1)
deftearDown(self):
hover(Location(,))
def(self):
pass
def(self):
pass
def(self):
pass
click(".png")
unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromTestCase(TestSequenceFunctions))