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

本文介绍如何使用Appium和TestNG进行Android平台的自动化测试。通过整合这两种工具,可以实现不同发行渠道的测试案例管理,提高测试效率。文章还详细介绍了如何配置Jenkins进行持续集成,并使用ReportNG生成美观的测试报告。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:https://testerhome.com/topics/658


好吧,标题写得好长.
言归正传,本文主要是讲述如何使用这些工具来整合流程,实现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

 本帖已被设为精华帖!
共收到  19 条回复
110
lihuazhang ·  #1 · 1 年前  

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

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

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

666
young ·  #2 · 1 年前  

谢谢 分享

96
kevinkong ·  #3 · 1 年前  

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

96
hwwh1410 ·  #4 · 1 年前  

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

155
532589730 ·  #5 · 1 年前  

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

692
tspring ·  #6 · 1 年前  

@summer 麻烦把project发给我,我邮箱是:tspring2014@sina.com。我对 <properties>
<xmlFileName></xmlFileName>
</properties>添加到哪里不确定。我是直接运行testng.xml 但测试报告没有美化。麻烦发给我project,谢谢。

634
zhouxiaoyagirl ·  #7 · 1 年前  

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

155
532589730 ·  #8 · 1 年前  

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

96
rosepotato ·  #9 · 1 年前  

@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" >

<suite name="Suite1" verbose="1">
<test name="Regression1">
<groups>
<run>
<!--<include name="sampleTest1" />-->
<!-- <include name="sampleTest2" />-->
<include name="iosTest" />
</run>
</groups>

<classes>
<class name="com.saucelabs.appium.IosLoginTest"/>
<!--<class name="com.saucelabs.appium.Sample1Test"/>
<class name="com.saucelabs.appium.Sample2Test"/>-->
</classes>
</test>

</suite>
pop.xml 中定义如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>

<configuration>
<!--<forkCount>2</forkCount>-->
<suiteXmlFiles>
<suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>
<!--<groups>iosTest</groups>-->
<properties>
<property>
<name>usedefaultlisteners</name>
<value>false</value> <!-- disabling default listeners is optional -->
</property>
<property>
<name>reporter</name>
<value>org.testng.reporters.XMLReporter</value>
</property>
</properties>
</configuration>
</plugin>

634
zhouxiaoyagirl ·  #10 · 1 年前  

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

666
young ·  #11 · 1 年前  

再次来学习下

155
532589730 ·  #12 · 1 年前  

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

1427
link1220 ·  #13 · 1 年前  

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

212
jacky ·  #14 · 1 年前  

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

96
loyo4test ·  #15 · 1 年前  

牛叉 赞

1372
wangcityboy ·  #16 · 1 年前  

#1楼 @lihuazhang


乱码的问题怎么解决?

1505
jennyhui ·  #17 · 1 年前  

干货!

1697
2014maggie ·  #18 · 1 年前  

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

3720
maohao ·  #19 · 6 月前  

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值