在实际写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. 【转】JVM可视化工具插件---Visual GC

    Visual GC是一个Java 内存使用分析与GC收集的可视化工具插件 <插件下载> 一:整个区域分为三部分:spaces.graphs.histogram 1 spaces区域:代表虚 ...

  2. java中初始化方法

    本文主要是讲从<java编程思想>中看到的东西,是第七章复用类的开头内容,主要是类初始化的几种方法的位置,主要包括 1.在定义对象的地方.这意味着他们总是在构造器被调用前被初始化. 2.在 ...

  3. 蓝桥杯 算法训练 ALGO-141 P1102

    算法训练 P1102   时间限制:1.0s   内存限制:256.0MB 定义一个学生结构体类型student,包括4个字段,姓名.性别.年龄和成绩.然后在主函数中定义一个结构体数组(长度不超过10 ...

  4. uptime命令查看系统启动时间和运行时间、查看linux系统负载

    1.uptime命令输出:16:11:40 up 59 days, 4:21, 2 users, load average: 0.00, 0.01, 0.00 2.查看/proc/uptime文件计算 ...

  5. JS:Window

    ylbtech-JS:Window 1.返回顶部 1.happy.js ; (function () { var happyUi = { initHappy: function (type) { ut ...

  6. 升级 AngularJS 至 Angular

    Victor Savkin 大神撰写了一系列文章详细介绍如何升级 AngularJS 应用: NgUpgrade in Depth Upgrade Shell Two Approaches to Up ...

  7. 第六章 Java并发容器和框架

    ConcurrentHashMap的实现原理与使用 ConcurrentHashMap是线程安全且高效的hashmap.本节让我们一起研究一下该容器是如何在保证线程安全的同时又能保证高效的操作. 为什 ...

  8. 问题:oracle 排序 null值放在最后;结果: ORACLE中null的排序问题

    ORACLE中null的排序问题 关键字: oracle nulls 问题描述:    在平时的业务处理中,经常遇到要对业务数据进行排序,并且要对null值也做相应的排序.在Oracle中,进行Ord ...

  9. 如何利用MATLAB并行计算缩短程序运行时间

    本来CPU就是双核,不过以前一直注重算法,没注意并行计算的问题.今天为了在8核的dell服务器上跑程序才专门看了一下.本身写的程序就很容易实现并行化,因为beamline之间并没有考虑相互作用.等于可 ...

  10. 部署和调优 1.1 nfs部署和优化-2

    更改共享目录文件默认的所有者和所属组 已知道客户端有个user11用户 cat /etc/passwd user11:x:501:501::/home/user11:/bin/bash 服务端打开 v ...