Appium SVN+Jenkins+Maven+Appium+TestNG+ReportNG 实战 Android 自动化测试

summer · 2014年04月04日 · 最后由 飞天萝卜 回复于 2018年04月29日 · 4473 次阅读
本帖已被设为精华帖!

好吧,标题写得好长.
言归正传,本文主要是讲述如何使用这些工具来整合流程,实现 Android 平台的自动化测试.
首先说下背景,因为我测试的东西面向多个国家,对于不同的地域可能有不同的功能,对应不一样的发行渠道,需要测试工具有便捷的 case 管理功能,能方便地面对不同的发行渠道选择不同的 case.而 TestNG 可以很方便地配置这些,所以选择这个框架.
这里直接使用 Appium 源码中自带的 testng 项目示例.位置在源码目录中的

/sample-code/examples/java/testng

1.改造 Report 的呈现方式
示例 Project 用 Maven 来组织项目,所以这里就不改项目架构了,喜欢 ant 的同学自己去实践吧.
因为示例中用的是 TestNG 自己生成的测试报告,比较难看,这里用 ReportNG 来美化一下.
编辑 pom.xml,在依赖中添加 ReportNG 的依赖:

<dependency>
    <groupId>org.uncommons</groupId>
    <artifactId>reportng</artifactId>
    <version>1.1.4</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>com.google.inject</groupId>
    <artifactId>guice</artifactId>
    <version>3.0</version>
    <scope>test</scope>
</dependency>

ReportNG 还得注册一下监听器,这个放在 testng.xml 中去注册,就不写在 POM 里了.maven-surefire-plugin 插件里配置一个参数,用于接收不同的 testng.xml

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.17</version>
        <configuration>
        <suiteXmlFiles>
            <suiteXmlFile>res/${xmlFileName}</suiteXmlFile>
        </suiteXmlFiles>
</configuration>
    </plugin>

pom 里面的值留空:

<properties>
    <xmlFileName></xmlFileName>
</properties>

2.使用不同的 testng.xml 配置文件来配置不同的渠道测试 case
在项目根目录建个 res 文件夹,把 testng.xml 放进去,testng.xml 文件内容如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite
    name="Suite"
    verbose="1" >
    <test name="Project_V3023" >
        <packages>
            <package name="com.saucelabs.appium" />
        </packages>
    </test>
    <listeners>
        <listener class-name="org.uncommons.reportng.HTMLReporter" />
        <listener class-name="org.uncommons.reportng.JUnitXMLReporter" />
    </listeners>
    <usedefaultlisteners name="false" />
</suite>

这个文件用来配置选择不同的渠道需要选择的 case,res 文件夹下可以扔很多 testng.xml 文件用于不同的渠道.比如 A 渠道可以用 testng1.xml,B 渠道可以用 testng2.xml,另外在这里面注册一下 ReportNG 的监听器.
最后修改一下 Project 的项目文件结构,最后变成这个样子 (为了演示方便,只保留了一个测试类):

3.配置 Jenkins
勾选参数化构建,创建 2 个参数
第 1 个参数是创建一个文件夹,并且返回文件夹路径,这个在后面发邮件要用到.

第 2 个参数是返回 testng.xml 的名字,这里因为我只有一个,所以直接返回了,后面这里面可以自己加条件判断是返回哪个 testng.xml 的名字.比如 1\3\5 跑 testng1.xml,2\4\6 跑 testng2.xml

用 SVN 来管理测试代码

构建触发器使用定时触发方式,不截图了.

使用 Maven 构建项目,并且接收一个参数

构建后运行一下 Python 的脚本,用途是拷贝文件,将生成的 ReportNG 报告拷贝到上面由参数 1 创建的目录下.而这个目录同时也是 Apache 的网站目录,这样就可以直接通过 URL 看到测试报告了.

最后用邮件插件发一下邮件,我这里都是引用的系统配置里的内容

收到的邮件是这个样子

点开链接,看到测试报告

最后,总结一下
用 SVN 管理管理代码,Jenkins 做持续集成,项目组织用 Maven,测试框架用 Appium+TestNG,报告呈现用 ReportNG.
好吧,撇去 Appium 不谈,其他都是大家用来用去的东西了.
现在的问题:
1.Jenkins 的触发方式现在是每天晚上定时触发,因为我拿不到源码,开发的编译系统用的也不是 Jenkins,我不知道要如何才能更好地使用持续集成.各位小伙伴的持续集成又是怎么做的呢?
2.选择 testng.xml 不够灵活,不能根据项目特征自动选择对应的 testng.xml,比如我想拿渠道号来区分,可 Jenkins 怎么拿到渠道号?
3.Appium 支持多个设备同时运行吗?之前用 Robotium 时使用 Spoon 就可以同时在多个设备上运行.

扩展一下:
网易上个月出了一个 TestNG 的小插件,实现了失败用例重跑,失败自动截图,展示用例运行次数等等功能,很好很实用,就只有一个缺点,生成的报告是改造了 TestNG 自带的 emailable-report.html,实在是太 - 丑-了~~这个看能不能把功能移植到 ReportNG 上去.有兴趣的小伙伴可以关注.
项目地址:https://github.com/NetEase/arrow

共收到 29 条回复 时间 点赞

1 我们以前是 10 分钟,check 一次 ,看有没有人提交代码,有提交就跑一次。一般来说出 build,简单的 bvt 就可以了。如果做验收,一晚一次不为过,你可以做两个 job。一个一直跑迭代,一个做每天的验收。

2 渠道啥意思? 项目特征自动选择对应的 testng.xml 这个可以做到,可以咨询用过的人

3 https://github.com/appium/appium/issues/462 不是很理想

谢谢 分享

赞,很详细,对 TestNG 插件 Arrow 感兴趣的小伙伴们,欢迎继续扩展

目前也在时间 appium 的持续集成。。。求交流

学习了,考虑使用 testng+maven+appium 的整合工具

@summer 麻烦把 project 发给我,我邮箱是:tspring2014@sina.com。我对

添加到哪里不确定。我是直接运行 testng.xml 但测试报告没有美化。麻烦发给我 project,谢谢。

#5 楼 @532589730 appium+maven+testng 整合工具你那边使用了,怎么用的,我现在卡住,麻烦指导下。

#7 楼 @zhouxiaoyagirl
还没用,主要是卡在 java 在 ios7 拖不动元素。

@summer ,你好我正在用 appium+maven+testng+jenkins 做自动化开发。我现在遇到个问题,我将我的测试放在 groups = iosTest 中,并创建一个 testng.xml, 我在命令行中用调用 mvn test -Dtests=testng.xml, 运行总是失败,iPhonesimulator 都没起来。但是我用 mvn test -Dtest=MyTestClass#myTestMethod 时,测试是成功的。请问你有没有遇到过这个情况,如何解决的。
我的 testng.xml 如下:
<! DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >





<!---->
<!-- -->




<!--
-->


pop.xml 中定义如下:

org.apache.maven.plugins
maven-surefire-plugin


<!--2-->

testng.xml

<!--iosTest-->


usedefaultlisteners
false <!-- disabling default listeners is optional -->


reporter
org.testng.reporters.XMLReporter



#6 楼 @tspring 麻烦告知下,appium+maven+testNg 是怎样用的,我的运行了之后没有反应。是不是 pom 中除了添加 testNG 之外还要添加其他的。

再次来学习下

楼主能否分享下 pom.xml 和 testng.xml?

匿名 #13 · 2014年08月17日

这个很牛 x 的分享,Mark 学习!

悲剧了,第一次使用是把 jenkins.war 放到 TomCat 里面,启动 tomcat 后打开 jenkins,不知点了什么东西,需要登陆,但是我还没注册呢。
把 Jenkins 文件夹删掉,重启 Tomcat,再次打开,还是需要登陆。。。怎么才能回到初始状态呢?

牛叉 赞

#1 楼 @lihuazhang
乱码的问题怎么解决?

干货!

/sample-code/examples/java/testng https://github.com/appium这个网址上面找不到呀?

#14 楼 @jacky 你估计是点了 LDAP 的选项,你把 jenkins.war 和他解压出来的 jenkins 文件都删除掉,再去你的系统用户目录下去搜一个 .jenkins 的文件夹,把这个文件删掉即可。jenkins 安装或者说部署的时候,会默认有一个 workspace,如果你没有设置路径,一般在默认用户目录下。这个 workspace 是存放 jenkins 相关插件、job 和配置的地方。

能不能全部分享下,学习学习,这几个怎么结合的

jenkins 里面定义的参数 如何传到 copy 报告的 python 脚本中的呢?

张可 [该话题已被删除] 中提及了此贴 08月05日 17:22

刚刚接触 我是使用 jenkins+getlab 想请问使用真机或者虚拟机怎么关联起来的?

碰到个问题,我也是采用 git+jenkins+maven+testng 来进行自动化的,中间碰到个问题,在我执行自动化的过程中我手动点击取消构架的按钮,自动化依然还在跑,然后自己搭了 linux 下的 jenkins 环境查看了下服务器进程,有个 maven-surefire-plugin 插件一直在跑,手动关掉才会停止自动化,有碰到过该问题吗,怎么解决呢?

testNG copy 了网上 verify 的方法,运行 testng.xml 后 其中有一个 case 是验证失败的,但生成的报告都是成功的怎么办?

回复

已解决,是 maven-surefire 插件自己的 bug,更新版本后就可以了

回复

求问这个集成是怎么启动 appium,进而在真机或虚拟机上跑 svn 上管理的测试脚本

楼主,我引入了 arrow 插件,报下面的错误,有遇到过么,是什么原因啊?

云飞凌风 回复

hi, 你这个乱码的问题解决了吗?

恒温 回复

你好,我想请教下每提交一次代码就触发一次构建是怎么配置的

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册