猪小花1号

个人签名

282篇博客

AndroidUI自动化测试框架Orange

猪小花1号2018-08-27 10:22

随着移动互联网的浪潮,公司移动产品日益增多,为了更好的保障产品质量,我们在手工测试的基础上对于稳定的主干功能会引入UI自动化测试,这篇文章将介绍我们基于开源框架Robotium开发的Android UI自动化测试框架Orange


一、    Orange介绍

Orange是基于开源框架Robotium进行的二次开发,主要解决Robotium运行用例过程中偶尔某个用例crash、超时等导致收集不到所有用例测试结果的问题,以及提升用例运行的稳定性。与此同时新增了PC端的支持,包括对模拟器的操作以及测试结果的收集以及展示,编写用例后通过简单配置即可以实现整个运行流程的自动化。

当前主要功能如下:

1   支持自动创建、启动、关闭、删除模拟器以及自动重签名指定apk功能

2   支持一份用例自动在不同SDK版本下运行

3   支持用例运行crash、超时、失败后自动重跑以及失败用例自动截图功能

4   支持WebView控件

5   支持可视化测试结果展示

6   支持和持续集成Jenkins平台结合

7   支持WindowsLinuxMac平台

8   支持Android模拟器、真机运行测试用例

orange架构图如下:

哪些项目或者团队适合使用Orange

1OrangeUI自动化测试框架,所以主干UI稳定的项目适合使用Orange编写回归自动测试用例,UI不稳定会导致后续的维护工作量比较大。

2、测试用例的编写维护需要投入一定的时间,所以团队中每个测试版本平均能够投入1-2人天左右的时间来编写维护自动测试用例的团队适合使用Orange


二、    Orange具体使用步骤

1  编写测试用例

2  添加配置文件

在项目根目录中新增config.properties文件添加以下配置选项。

# 填写需要测试的android sdk版本,多个的话中间用逗号


target= android-7,android-8,android-10,android-15,android-16

 

# 指定被测试应用存放的位置,不允许为空

 

apkpath=apk\\pris_generic_1.5.0_online.apk

 

# 指定测试程序存放的位置,不允许为空(编写测试用例后由orange自行打包生成测试apk文件)

 

testapkpath=bin\\PrisAndroidUITest-release.apk

 

# 指定程序进行重签名的key文件,必须放在工程根目录下

 

keystore=debug.keystore

 

# 收件人的smtp服务器地址,运行结果的收件人列表,多个用户用逗号分割,允许为空

 

smtp=corp.netease.com

 

maillists=***@corp.netease.com,***@corp.netease.com,***@corp.netease.com

 

# 测试用例的配置文件路径,不允许为空

 

testCaseFile=test-xml\\AllTestCases.xml

 

# 用于发送结果邮件时显示的邮件发件人

 

sender=orange@google.com

 

#配置按照指定的字符过滤logcat,过滤后的logcat日志会附在邮件中发送,不配置则不发送

 

logTag=Pris-

 

#如果需要修改模拟器的hosts文件,需配置此项

 

hostsFilePath=

 

#如果运行真机,在这里配置真机的设备id(通过adb devices可以查看设备id)


devicename=HT843KV06088, HTC89213333

同时使用类似TestNg的方式配置需要运行的测试用例,当用例个数增长时通过配置不同文件可以方便的进行用例分组,每次指定运行不同的测试用例。

<!-- timeout为单个用例执行的超时时间,不配置默认240s,maxCount为用例运行有异常重跑的最大运行次数,不配置默认为3 -->

<classes timeout="240" maxCount="2">

<!-- name:指定需要运行的测试类(包名+类名)-->

<class name="com.netease.mobile.autotest.testing.BookAttributeTest" >

        <methods>

        <!-- 此处可配置一个或多个include节点

             name:需要运行的具体测试方法,必填项,

             timeout:针对单个用例的超时时间,如果此处配置则根节点的timeout无效,不是必填项 -->

            <include name="testInputBookShelf"  timeout="360"/>

            <include name="testBookReviewAndShare" />

            <include name="testBookRemoveAndCommentButton" />

        </methods>

    </class>

</classes>

3  命令行运行测试用例

在完成如上的配置同时准备好脚本后,启动命令行运行起来吧。进入项目根目录输入下面命令,启动自动测试,开始运行后你就可以先喝杯咖啡休息一下了。

java -jar ./libs/Orange.jar config.properties

4  测试结果展示

总体运行情况汇总:邮件中除了会展示当前测试用例的信息外,同时包含当前的操作系统,计算机名/IP以及机器内存的信息,方便收件人对本次用例的运行环境有一定了解。

 

失败用例信息:配置注解@Description时,会将注解中的信息写在description列中,邮件中同时包含失败时的错误log,以及相应截图,方便定位原因。

成功用例信息:包含用例的描述(@Description中书写),重跑的次数(重跑次数较多的用例可能会是可优化的用例)以及运行耗时。

5  持续集成平台Jenkins的结合

Job中添加shell或者batch命令,目前通过wgetftp或者http中获取每日构建的apk和资源文件(R.java),并放到相应Job的特定目录下。

Execute Shell

 

wget -r -L -np --cut-dirs 4 -nH ftp://192.168.**.**/**/PRIS/pris.apk -P apk

wget -r -L -np --cut-dirs 4 -nH ftp://192.168.**.**/**/PRIS/R.java -P src/com/netease/pris

添加Ant执行用例,通过build文件支持在Job中动态修改config文件中配置的数据。

Ant配置

ant

-buildfile

 pris_linux.xml

-Dusername=***

-Dpassword=**

-Dlogin_mode=Phone

-Dtarget=android-15,android-16

-DtestCaseFile=PhoneTestCases.xml

-Dapkpath=apk/pris.apk

-Dmaillists="***@corp.netease.com"

展示用例运行结果趋势图:Jenkins自带的插件可以展示TestNG结果报表。


三、Orange使用经验分享

如何使用Orange更好地编写维护运行自动测试用例?

1、自动测试用例也是代码,所以开始编写自动测试用例之前需要有统一的编码规范,编写后需要定期Review代码,出现问题需要考虑测试代码的重构。

2、编写测试用例需要开发的协助,首先需要用到的控件可以让开发协助添加唯一的id,推荐让开发协助提供R.java资源文件来编写测试用例,降低维护成本。

3、编写维护测试用例推荐使用PageObject模式,用例可读性、可维护性会有比较大的提升。

4、编写测试用例推荐在测试方法中加入@Description标签,填写用例描述,维护作者,此信息也会在结果邮件中展示,出现失败用例后能够在邮件中查看用例维护者,方便项目负责人跟进用例修改。

5、推荐和产品每日构建结合,应用构建完后自动运行测试用例,通过反馈结果能够在版本提测前及时掌握用例的运行情况,以及UI的变化情况,该阶段推荐只维护导致大量用例运行失败的问题,如果每个失败用例都及时维护可能会导致投入大量时间,而且产品开发阶段UI存在变动的风险相对来说会更大。

6、推荐产品提测前几天开始正式维护自动测试用例,可以根据该版本UI的变化情况以及每日构建执行情况决定具体提前多少天开始维护(按照之前的经验大版本需要提前2人天左右),保证在提测后用例运行全部通过。

7、如果在模拟器中运行自动测试用例,推荐在Linux或者Mac系统,windows中的模拟器非常慢以及不稳定。

使用Orange对于测试人员的技术要求如何?

使用Orange编写自动测试用例是新建Android测试工程,使用Java语言和Orange提供的API来编写,所以对于测试人员需要掌握Java知识,对于Android开发了解即可。

 


网易云新用户大礼包:https://www.163yun.com/gift

本文来自网易实践者社区,经作者孔庆云授权发布。