Linux下构建robotium+jenkins+TMTS可持续集成自动化测试


前言
为什么要在Linux上构建自动化环境呢?
因为在Linux上执行速度要比在Windows快很多,以打包apk为例,至少快一倍。。。
如果公司每个版本要打几百个apk渠道包,这效率将大幅提升。

软件安装
1.安装jdk
2.安装tomcat
http://tomcat.apache.org/download-70.cgi
3.安装ant
http://ant.apache.org/bindownload.cgi
4.安装jenkins
http://jenkins-ci.org/
下载war包,放于tomcat的webapps目录下,启动tomcat将自动部署
5.安装Android SDK
http://developer.android.com/sdk/index.html
在linux中搭建android开发环境,包括eclipse,ADT等
6.下载TMTS架构中的athena-1.1.jar、ddmlib.jar包
http://code.taobao.org/p/TMTS/src/branches/V1.1/trunk/android/AthrunTest/
当然最好把整个TMTS下载下来

所需软件是与Windows中一样的,只不过相应软件需要用Linux版,且需要注意32位与64位

环境变量、Jenkins配置与Windows上差不多,略

构建任务

与Windows上的区别在于这里要执行的是shell命令
Build项Add build step中选择“Execute Shell”

(
cd TmtsApp/tool
ant
adb -s $ANDROID_AVD_DEVICE uninstall com.taobao.tmts.framework.app
adb -s $ANDROID_AVD_DEVICE install apk/TmtsApp.apk
)
根据实际需要cd到相应目录,卸载apk包、安装apk包
注意:在对ANDROID_AVD_DEVICE这个参数进行参数构建时,Windows中是用两个%%即%ANDROID_AVD_DEVICE%
而Linux中变量则用$表示,即$ANDROID_AVD_DEVICE


再下拉添加一个
“Execute Shell”
(
cd TmtsTest\tool
test-packet.bat
adb -s $ANDROID_AVD_DEVICE uninstall com.taobao.tmts.framework.test
adb -s $ANDROID_AVD_DEVICE install apk/TmtsTest.apk
)
根据实际需要cd到相应目录,卸载测试工程的apk包、安装测试工程的apk包
再下拉添加一个
“Execute Shell”

echo $ANDROID_AVD_DEVICE
cd TmtsTest

rm -rf TEST-*.xml
(
./athena . "TEST-GridViewActivityTest.xml" $ANDROID_AVD_DEVICE com.taobao.tmts.framework.test.GridViewActivityTest
./athena . "TEST-ListViewActivityTest.xml" $ANDROID_AVD_DEVICE com.taobao.tmts.framework.test.ListViewActivityTest
./athena . "TEST-MainActivityTest.xml" $ANDROID_AVD_DEVICE com.taobao.tmts.framework.test.MainActivityTest
)

这里需要将Windows中的athena.bat修改成Linux中的athena脚本文件并进行执行
athena.bat文件内容:java -cp athena-1.1.jar;ddmlib.jar com.synaptik.athena.Athena %1 %2 %3 %4 E:\\android\\upload
修改为athena文件:java -cp athena-1.1.jar:ddmlib.jar com.synaptik.athena.Athena $1 $2 $3 $4 /usr/upload
robotium中单个用例执行是类似这样的:
adb shell am instrument -w -e class com.megafon.test.MegafonTest#testDeleteContact com.megafon.test/android.test.InstrumentationTestRunner
运行./athena时调用了athena-1.1.jar和ddmlib.jar,将实现截图与日志报告功能
这里如果用的是原来淘宝athena-1.1.jar的话会报错:
Test class com/taobao/tmts/framework/test/GridViewActivityTest un-match com.cplatform.surfdesktop.test.GridViewActivityTest , continue next...
路径问题,见本文后面注意。

构建后操作
Post-build Actions勾选“Publish JUnit test result report”,填入TmtsTest/TEST-*.xml
当然jenkins也可以选择构建后发送邮件,构建后再执行其它任务等

注意:
在Linux中构建ant自动打包用的build.xml文件时,有两处需要注意
1.运行android相关tool工具的区别,Windows上有exe、bat后缀,而Linux上没有这些后缀,如果直接使用Windows上原来的build.xml文件
将报找不到aapt.exe命令的错误,当然还有可能是aapt不能在64位机器的Linux上运行的原因(本文中的环境就是Ubuntu 64机器),如果你装的是64位机的话,此时需要安装32位支持库。
<condition property="exe" value=".exe" else=""><os family="windows" /></condition>
<condition property="bat" value=".bat" else=""><os family="windows" /></condition>

< property name="aapt" value="${android_platform-tools}/aapt${exe}" />
< property name="aidl" value="${android_platform-tools}/aidl${exe}" />
< property name="dx" value="${android_platform-tools}/dx${bat}" />
< property name="apk-builder" value="${android-tools}/apkbuilder${bat}" />
< property name="proguard-home" value="${android-tools}/proguard/lib"/>

2.Windows上与Linux上路径的区别
在Windows上路径分隔符为\,而在Linux上路径分隔符为/,因此在build.xml文件中涉及路径的用/吧,因为这样对Windows上没影响,但Linux上可能就用不了

在athena-1.1.jar包上程序上获取测试类时是通过路径的,如com\cplatformsurfdesktop\test\GridViewActivityTest在athena中会将其中的
\全部转化为. 即得到com.cplatform.surfdesktop.test.GridViewActivityTest
因此才能得到Test class com.taobao.tmts.framework.test.GridViewActivityTest match com.cplatform.surfdesktop.test.GridViewActivityTest,然后执行用例
因此如果直接用原来的athena-1.1.jar包的话就会出错了

修改源码中Athena.java文件
将原来:className = className.replaceAll("\\\\", "\\."); //用于将所有\转化为.

修改为:className = className.replaceAll("/", "\\."); //用于将所有/转化为.

修改后重新导出为jar包即可使用

相关阅读:Windows下构建robotium+jenkins+TMTS可持续集成自动化测试 http://www.idcfree.com/article-275-1.html

相关内容