在实际写testcase的时候会使用unittest框架,但是在sikuli中需要使用它提供的command来运行,位于/Applications/SikuliX.app/run,使用-r参数指定要运行的sikuli文件,然后再使用 --args参数将想传给这个sikuli文件的参数附在后面:

sudo /Applications/SikuliX.app/run -r testcases/runner_html.sikuli --args report:[test report file, a html file] cases:[case id list] build:[build_id]

而且为了能直接输出html的测试报告,使用了HTMLTestRunner来运行一个testsuite,具体代码如下:

 import sys
import os
import re
import unittest lib = os.path.join(os.path.expanduser("~"), "mac_auto")
if lib not in sys.path:
sys.path.append(lib) from global_config import * if path_of_site_packages not in sys.path:
sys.path.append(path_of_site_packages) from htmloutput.html_test_runner import HTMLTestRunner report_file = None
test_case_ids = None
build = None
for arg in sys.argv[1:]:
if arg.startswith("report:"):
report_file = arg.split(":")[1]
print "test result file is " + report_file
if arg.startswith("cases:"):
test_case_ids = arg.split(":")[1].split(",")
if arg.startswith("build:"):
build = arg.split(":")[1] # It'll load all test caes in current folder if no test case indicated
if test_case_ids is None or len(test_case_ids) == 0:
print "Loading all test cases in current folder"
test_case_module_names = [re.sub("\.sikuli$", "", i) for i in os.listdir(
os.path.join(test_home_path, "testcases")) if i.startswith("test_case")]
else:
test_case_module_names = ["test_case_{0}".format(i) for i in test_case_ids] test_case_modules = []
for i in test_case_module_names:
print "Importing module " + i
test_case_modules.append(__import__(i, globals(), locals(), [], -1)) suite = None
if len(test_case_modules) >= 1:
suite = unittest.TestLoader().loadTestsFromModule(test_case_modules[0])
for m in test_case_modules[1:]:
suite.addTests(unittest.TestLoader().loadTestsFromModule(m)) outfile = open(report_file, "w")
runner = HTMLTestRunner(stream=outfile, verbosity=2, title='OSX Test Report', build=build) print "Start running test"
runner.run(suite)

上面的代码将搜索testcases目录下以test_case开头的sikuli文件,将其动态导入到testloader中运行。

另外也对HTMLTestRunner做了一下改变,让其能输出指定的build信息。

在命令行中输入如下命令,将运行所有testcases目录下得测试用例,并输出结果到test_result.html:

sudo /Applications/SikuliX.app/run -r testcases/runner_html.sikuli --args report:test_result.html build:your_build_id

输出的html显示如下信息:

python有个优秀的测试工具叫nose,它扩展了unittest的功能,使得其更加易用,我们也可以在sikuli写成的testcase上使用nose的标签标记我们的testmethod,然后使用nose.core.run来在sikuli文件运行测试,代码如下:

 import sys
import os lib = os.path.join(os.path.expanduser("~"), "mac_auto")
if lib not in sys.path:
sys.path.append(lib)
import global_config if global_config.path_of_site_packages not in sys.path:
sys.path.append(global_config.path_of_site_packages)
import nose
from htmloutput.html_for_nose import HtmlOutput build = None
for arg in sys.argv[1:]:
if arg.startswith("--build="):
build = arg.split("=")[1]
sys.argv.remove(arg) args = sys.argv[1:]
print args nose.core.run(argv=args, addplugins=[HtmlOutput(title='OSX Test Report', build=build)])

默认nose输出的是一个xunit的testresult,可以方便的在jenkins上解析出来。这里我加了一个nose的plugin,使其可以输出html的测试结果,使用的是一个对HTMLTestRunner.py的修改版本,位于github的这里:

https://github.com/openstack-infra/nose-html-output/blob/master/htmloutput/htmloutput.py

将上面的代码存为一个sikuli文件,命名为runner_nose.sikuli,然后使用下面的命令运行标记为BVT的所有测试:

sudo /Applications/SikuliX.app/run -r testcases/runner_nose.sikuli --args -v --with-xunit --xunit-file=result.xml --attr=BVT --build=your_build_id

上输出的是一个xunit的测试结果,也可以使用下面的命令输出一个html的结果:

sudo /Applications/SikuliX.app/run -r testcases/runner_nose.sikuli --args -v --with-html-output --html-out-file=result.html --attr=BVT --build=your_build_id

Mac下的UI自动化测试 (四)的更多相关文章

  1. Mac下的UI自动化测试 (一)

    在我看来,实现UI自动化测试的过程一向都是令人快乐的事情,而维护它们就是跟噩梦一样了,尤其是对每次CI产生的build进行BVT测试,由于开发不会告诉你任何UI的变化,那么你拿到的测试结果就势必会一片 ...

  2. Mac下的UI自动化测试 (三)

    使用sikuli进行UI自动化测试固然是方便很多,不用一切都使用AppleScript那烦人的语法,只要界面的UI没有变化,结构的变化不会影响到基于sikuli的自动化,但是基于AppleScript ...

  3. Mac下的UI自动化测试 (二)

    下面讲一下Sikuli的重要概念,就是region,所谓region就是Sikuli在进行图像识别的时候的一个区域,默认是整个屏幕. 当然,如果region选得太大的话,并且UI上存在相似的控件,那么 ...

  4. 使用phantomjs进行无界面UI自动化测试

    PhantomJS(http://phantomjs.org/) 是一个基于WebKit的服务器端JavaScript API.它全面支持web而不需浏览器支持,其快速.原生支持各种Web标准:DOM ...

  5. Jenkins下构建UI自动化之初体验

    一.缘 起 笔者之前一直在Windows环境下编写UI自动化测试脚本,近日在看<京东系统质量保障技术实战>一书中,萌生出在jenkins下构建UI自动化测试的想法 二.思 路 首先,在Li ...

  6. [原创]浅谈Web UI自动化测试

    [原创]浅谈Web UI自动化测试 Web UI自动化测试相信大家都不陌生,今天来谈谈这个,我最早接触自动化测试时大约是在2004年,2006年当时在腾讯财付通算是开始正式接触自动化测试,之所以是正式 ...

  7. RF+Appium框架自动化测试系列一之(Mac下Appium环境搭建)万事开头难

    消失了3个月,有一段时间没来园子更新博客了,各位看官见谅哈哈,消失是因为刚换了工作环境没外网,好多笔记没能及时的记录分享,以后有时间慢慢补上吧,这段时间主要接触了移动端app的自动化测试,公司为了快速 ...

  8. MAC下搭建appium UI自动化环境

    参考资料: http://qa.blog.163.com/blog/static/190147002201510161119832/ http://blog.csdn.net/liuchunming0 ...

  9. appium+python 【Mac】UI自动化测试封装框架流程简介 <一>

    为了多人之间更方便的协作,那么框架本身的结构和编写方式将变得很重要,因此每个团队都有适合自己的框架.如下本人对APP的UI自动化测试的框架进行进行了简单的汇总.主要目的是为了让团队中的其余人员接手写脚 ...

随机推荐

  1. Mxgraph使用总结一

    一.Mxgraph介绍: mxGraph 是一个 JS 绘图组件适用于需要在网页中设计/编辑 Workflow/BPM流程图.图表.网络图和普通图形的 Web 应用程序.mxgraph 下载包中包括j ...

  2. 一个Bug 差点让服务器的文件系统崩溃

    昨天,公司的美国客户发邮件给我,说我的软件出问题了,我查来查去,发现居然是服务器上一个目录无法删除,一删除就报 cannot read from the source file or disk. 如果 ...

  3. SpringCloud微服务实战——第二章Springboot

    Spring Boot项目工程 src/main/java:主程序入口HelloApplication,可以通过直接运行该类来启动Spring Boot应用. src/main/resources:配 ...

  4. codeforce -39E-What Has Dirichlet Got to Do with That?(博弈+dfs)

    You all know the Dirichlet principle, the point of which is that if n boxes have no less than n + 1  ...

  5. Oracle 高可用作业测试

    1.RAC 是一种: A 分布式数据库B 内存共享多节点数据库C 能够保护数据安全的架构 2.RAC 和CRS 的区别是: A 前者表示一种架构,后者是一套软件B 前者表示一套软件,后者是一种架构 C ...

  6. handlebars自定义helper方法

    handlebars相对来讲算一个轻量级.高性能的模板引擎,因其简单.直观.不污染HTML的特性,我个人特别喜欢.另一方面,handlebars作为一个logicless的模板,不支持特别复杂的表达式 ...

  7. Python数据库(一)-Mysql数据库的连接

    首先需要安装pymysql模块 然后用pymysql连接mysql并执行命令来查看数据 连接mysql数据库后需要创建游标来执行SQL语句 # -*- coding:utf-8 -*- __autho ...

  8. java selenium webdriver第二讲 页面元素定位

    自动化测试实施过程中,测试程序中常用的页面操作有三个步骤 1.定位网页上的页面元素,并存储到一个变量中 2.对变量中存储的页面元素进行操作,单击,下拉或者输入文字等 3.设定页面元素的操作值,比如,选 ...

  9. spring与struts有什么区别?

    Struts只是一个MVC框架(Framework),用于快速开发Java Web应用.Struts实现的重点在C(Controller),包括ActionServlet/RequestProcess ...

  10. 类型:.net;问题:ASP.NET路由;结果:ASP.NET 路由 .NET Framework 4

    ASP.NET 路由 .NET Framework 4   更新:2007 年 11 月 ASP.NET 路由使您可以使用不必映射到网站中特定文件的 URL.由于 URL 不必映射到文件,所以可以在 ...