Mac下的UI自动化测试 (四)
在实际写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自动化测试 (四)的更多相关文章
- Mac下的UI自动化测试 (一)
在我看来,实现UI自动化测试的过程一向都是令人快乐的事情,而维护它们就是跟噩梦一样了,尤其是对每次CI产生的build进行BVT测试,由于开发不会告诉你任何UI的变化,那么你拿到的测试结果就势必会一片 ...
- Mac下的UI自动化测试 (三)
使用sikuli进行UI自动化测试固然是方便很多,不用一切都使用AppleScript那烦人的语法,只要界面的UI没有变化,结构的变化不会影响到基于sikuli的自动化,但是基于AppleScript ...
- Mac下的UI自动化测试 (二)
下面讲一下Sikuli的重要概念,就是region,所谓region就是Sikuli在进行图像识别的时候的一个区域,默认是整个屏幕. 当然,如果region选得太大的话,并且UI上存在相似的控件,那么 ...
- 使用phantomjs进行无界面UI自动化测试
PhantomJS(http://phantomjs.org/) 是一个基于WebKit的服务器端JavaScript API.它全面支持web而不需浏览器支持,其快速.原生支持各种Web标准:DOM ...
- Jenkins下构建UI自动化之初体验
一.缘 起 笔者之前一直在Windows环境下编写UI自动化测试脚本,近日在看<京东系统质量保障技术实战>一书中,萌生出在jenkins下构建UI自动化测试的想法 二.思 路 首先,在Li ...
- [原创]浅谈Web UI自动化测试
[原创]浅谈Web UI自动化测试 Web UI自动化测试相信大家都不陌生,今天来谈谈这个,我最早接触自动化测试时大约是在2004年,2006年当时在腾讯财付通算是开始正式接触自动化测试,之所以是正式 ...
- RF+Appium框架自动化测试系列一之(Mac下Appium环境搭建)万事开头难
消失了3个月,有一段时间没来园子更新博客了,各位看官见谅哈哈,消失是因为刚换了工作环境没外网,好多笔记没能及时的记录分享,以后有时间慢慢补上吧,这段时间主要接触了移动端app的自动化测试,公司为了快速 ...
- MAC下搭建appium UI自动化环境
参考资料: http://qa.blog.163.com/blog/static/190147002201510161119832/ http://blog.csdn.net/liuchunming0 ...
- appium+python 【Mac】UI自动化测试封装框架流程简介 <一>
为了多人之间更方便的协作,那么框架本身的结构和编写方式将变得很重要,因此每个团队都有适合自己的框架.如下本人对APP的UI自动化测试的框架进行进行了简单的汇总.主要目的是为了让团队中的其余人员接手写脚 ...
随机推荐
- 什么是 PCB 的压适孔
引用 AMOBBS 1 再举一个高成本控制的例子:有类PCB产品对孔径要求极度严格,这类孔叫压适孔,这类孔的作用类似于显卡内存条的插座,能刚刚好被元件插上,而且元件不会掉,PTH的压适孔公差要求为-0 ...
- HDU1387:Team Queue
浅谈队列:https://www.cnblogs.com/AKMer/p/10314965.html 题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1 ...
- MSSQL Join的使用
假设我们有下面两张表.表A在左边,表B在右边.我们给它们各四条记录. id name id name -- ---- -- ---- 1 Pirate 1 Rutabaga 2 Monkey 2 Pi ...
- java继承如何理解呢??
总结:我把他弄的无语了.他是诺基亚公司的软件开发师,大学毕业就可以进那么好的公司.实力 package com.bc; //普通类 class yt { public void price() { S ...
- Redis value的5种类型及常见操作
Redis本身存储就是一个hash表,实际实࣫比hash表更复一些,后续讲存储结构时会细讲Key只有String类型Value包括String ,Set,List,Hash,Zset五中类型 STRI ...
- 2016.8.17服务器端数据库用户导入导出方法 expdp和impdp
EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用. IMP只适用于EXP导出的 ...
- 第四章 Java并发编程基础
线程简介 什么是线程? 现代操作系统在一个运行程序时,会为其创建一个进程.例如,启动一个Java程序,操作系统就会创建一个Java进程.现代操作系统调度的最小单元是线程,也叫轻量进程(Light We ...
- Delphi 转圈 原型进度条 AniIndicator 及线程配合使用
Delphi FMX 转圈 原型进度条 progress AniIndicator TAniIndicator TFloatAnimation VCL下也有转圈菊花进度条 TActivityIndic ...
- 记一次完整的android源码截屏事件的捕获<标记砖>
http://blog.csdn.net/buptgshengod/article/details/19911909?utm_source=tuicool&utm_medium=referra ...
- DAY9-python并发之多进程
一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程.P ...