基于UIAutomator+Jenkins Android自动化测试 实现

原创 2014年05月09日 16:39:10

基于UIAutomator+Jenkins自动化测试框架实现


一.            UIAutomator之原始Report:

如您所见,当你执行完毕UIAutomator测试脚本后,会有形如如下的反馈:

 

众所周知,图中的信息是在UIAutomator工具已定义规范:



二.            如何将UIA Report(Txt)转换为Junit Report(Xml)

首先我们看看Junit Report的样子(ant+junit):

       <properties>涉及你的环境变量,项目配置,执行环境,编译环境等等信息。我们真正需要关心的是<testsuite>和<testcase>。然后对比UIA Report,你应该会发觉UIA Report和Junit Report的<testcase>信息是多么的相似,是的,它们应该相似。好吧,然后我们要做的就是将这相似的信息进行转换。如下你将明白其实这是多么多么简单的事情,仅仅是将txt(键值对)转换为xml而已。

         Java里面已经有很多Shared的Resources,你可以参考如何实现txt-xml的转换。很明显我们需要

         String[]lines = txt.getContent(“UIA Report.txt”).split("\n")

这样我们就获取到UIA Report(txt)每一行信息。接着我需要过滤甄别我们(Junit Report)需要的信息并且填入到xml中,最后我发现我“重复造轮子”了,因为我在android中发现了这个“InstrumentationResultParser.java”,不要忘记UIAutomator也是基于Instrumentation的,所以,你现在可以直接拿来主义。然后Junit Report就产生了。看看又发现了什么:https://github.com/dpreussler/automator-log-converter(ReadsAndroid UI automator file outout and write a JUNIT Xml file.)。如果满足你的需求,欢迎直接使用!纪念前面的种种“徒劳”!有些浪费是很有意义也是值得的。因为,我们常常需要去修改某些code以适配我们的需求,甚至忘记或抛弃那些用到过的jar包并重新实现。

         OK!我们的测试报告已经转换成了Junit Report了,而我们一无所为就完成了这些。只需要这样:“java –jar automator-log-converter.jar UIAReport.txt”然后你就会看见同级目录下UIAReport.xml出现了。

至此,我们期望的Junit风格的Report出来了。

三.            太极生两仪

凡事阴阳相随,利弊同行。UIA会有什么利弊?

首先我们对测试用例(TestCase),测试套(TestSuite),测试工程(TestProject)有个大体认识。UIA执行的对象是TC和TC的testMethon,多个TC就组成了一个TS(我们也可以粗浅地把TS当作测试任务去执行)。UIA官网指导我们可以像这样执行测试任务:

adb shelluiautomator runtest UITest.jar -c com.xxx.uitest.videoplayer.ForwardTest -c com.xxx.uitest.videoplayer.SkipQtrTest#testSkip

如上我们已经执行了一次测试活动,然后我们需要提交一份测试报告。

测试报告是测试阶段最后的文档产出物,一份详细的测试报告包含足够的信息,包括产品质量和测试过程的评价,测试报告基于测试中的数据采集以及对最终的测试结果分析。你可能觉得UIA产生的report还不能称为测试报告,准确地说应该是“测试中的数据(信息)采集”和信息加工后产生的一份执行记录。因此,要出一份真正意义的测试报告,我们还需要(UIA)做些什么呢?

1. 执行报告,已经有了UIAReport

DONE:已经有了UIAReport。

2. Bug出现了,我们该怎么办?是的我们需要收集测试对象的errInfo(debug/log)以支撑bug定位分析。

TODO:这是我们还需要完成的工作—收集errinfo日志

3. 我们习惯是执行一次测试任务(你可以认为是一个TestSuite),我们的errinfo之和上下文相关,通常我们只关心failed标记的testcase的errinfo。

TODO:这是我们还需要完成的工作—区别TC的执行结果(fail/pass/skip)

……

暂时先解决这几个问题。怎么办?

1.      测试对象android(app)的log,我们通常是这样收集

adblogcat -v timeTag>logfile.log

这样我们就得到了某个时间段的某种(tag)日志文件logfile.log

简单地做,我们需要一种”胶水”将log收集和脚本执行粘合起来并建立某种关联。

2.      标识TC的执行结果我们可以拆解TS(测试任务),分TC执行,这样既易于区分TC结果,也易于区分收集errInfo。

这样我们就需要规定执行流程(或机制)。

上面简单做了简单分析,接着我们看看我们可能需要准备(规范)些什么。

1.      测试任务:即测试用例集,我把它装在一个文件里面(testtask.txt或者xxx.task或者xxx.suite):

2.      获取上面的文件内容并装入UIA执行之

我选择用python来完成这些工作,当然有很多编程语言供你选择。

我们需要一个方法来读取并遍历testsuite:

def run_testsuit(testTask,reportPath,logPath,logTag)

再来一个方法执行testcase

def run_testcase(testCase,reportPath)

再来一个方法收集log

def generate_log(tag,logFilePath)

流程定义完毕,数据收集齐全。然后对输出件二次加工即转换JunitReport

def cvt_report(jarToolPath,uiaReportPath)

 

大体形式如下:

run_testsuit(testTask,reportPath,logPath,logTag)

for testcase in testTask:

        generate_log(tag,logFilePath)

        tcReport= run_testcase(testcase,reportPath)

        iftcReport.state == pass:

           #todo

elif tcReport.state== fail:

           #todo

elif tcReport.state== skip:

           #todo

               else:

           #todo

        TSReportOutput.write(tcReport.content)

cvt_report(jarToolPath,TSReportOutputFile)

在执行的时候,我们可以看见这样的一个输出显示:

 

四.            看一下Jenkins上的效果

控制台输出界面:

Report界面:

 

好了,就这样了!

最后,感谢您的阅读!

欢迎并感谢您提出见解!同时也欢迎您对该文斧正!


版权声明:本文为博主原创文章,未经博主允许不得转载。

将uiautomator的case日志输出成xml格式的方式

文章:基于UIAutomator+Jenkins Android自动化测试 实现
  • qhshiniba
  • qhshiniba
  • 2014年06月09日 10:34
  • 6831

android UiAutomator让运行失败的用例重新运行

本人在使用android UiAutomator做测试的时候,发现经常会因为页面加载太慢或者网络延迟比较大又或者出现意外情况导致用例失败,但是在检查的时候又能运行成功,提出了一个让失败的用例重新运行的...
  • Fhaohaizi
  • Fhaohaizi
  • 2017年06月23日 13:52
  • 336

浅析Jenkins2.0

Jenkins2.0是2016年4月20日发布的针对jenkins1.x的升级版,也是jenkins问市以来的首次实质的版本升级。按照官方的描述,jenkins2.0的主要特征分别是Pipeline ...
  • iamhuanggua
  • iamhuanggua
  • 2016年11月29日 19:24
  • 36693

android开发之Jenkins并行完成UI的自动化测试

Jenkins并行完成UI的自动化测试
  • zz1175854992
  • zz1175854992
  • 2015年05月11日 15:34
  • 1865

如何利用jenkins来做android自动化

概述 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从...
  • zm_21
  • zm_21
  • 2014年06月24日 11:22
  • 10209

AndroidUiAutomator使用Jenkins搭建持续集成测试系统Ⅱ

本文目标实现:Eclipse一但提交项目代码,则自动触发一次编译以及执行一次AndroidUiAutomator测试用例,编译后以及执行用例的结果可以通过邮件自动发送,实现自动化测试系统。 方式...
  • Anniejunyan
  • Anniejunyan
  • 2016年08月23日 14:43
  • 1187

如何利用jenkins来做android自动化

http://www.robotium.cn/archives/438 概述 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着...
  • forlong401
  • forlong401
  • 2014年10月10日 20:40
  • 1043

Android-解放双手告别测试-使用Jenkins自动化打包

知行办公,专业移动办公平台 https://zx.naton.cn/ 原创团队: 【总监】十二春秋之,3483099@qq.com; 【Master】zelo,616701261@qq.com;【运营...
  • u011215632
  • u011215632
  • 2017年09月19日 16:42
  • 408

appium+python+夜神模拟器+jenkins进行android端自动化测试

1.        环境搭建 序号 依赖环境 安装 备注 1 Jdk 安装包安装 安装完成后配置环境变量 新增JAVA_HOME为jdk安装路径 C:\Prog...
  • testing_su001
  • testing_su001
  • 2017年06月16日 15:59
  • 4048

robotium jenkins持续集成自动化测试

  • 2016年01月14日 10:39
  • 589KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于UIAutomator+Jenkins Android自动化测试 实现
举报原因:
原因补充:

(最多只允许输入30个字)