利用jenkins在多部手机上并发跑android测试
2016-07-12 本文已影响1866人
muco
一、 梗概介绍
1.1 效果图
并行测试效果1.2 机器情况
jenkins nodes其中master为主节点,node1和node2为两个slave节点。node1 和 node2分别和一台实际手机连接。
1.3 任务情况(Job)
任务名称:AppiumPipeline
构建工具:Gradle
执行的测试脚本为:
./gradlew test --rerun-tasks
代码地址:
https://github.com/MuchContact/appium_java_android.git
1.4 并行任务
并行任务是并行地在多个slave上跑AppiumPipeline任务,借助于jenkins中的Multijob插件。
任务名称:multijob
任务配置
二、 使用docker搭建完整slave节点
2.1 使用docker构建slave节点
在1.2节中看到的两个slave节点是运行起来的两个docker container,每个container 内部通过adb connect ip:port的方式和一部真实的android手机连接。对应的docker镜像中包含以下内容:
- android sdk
- nodejs
- npm
- appium
docker container通过web start的方式和主节点建立连接,成为主节点的slave节点。
wget http://{master-ip:master-jenkins-port}/jnlpJars/slave.jar
java -jar slave.jar -jnlpUrl http://{master-ip:master-jenkins-port}/computer/{node-name}/slave-agent.jnlp
2.2 准备手机测试设备
由于docker container 本身没有UI桌面支持,所以并没有内部create android emulator。不过即使有UI支持,能够创建android虚拟机,也不会去用:1)慢;2)不适合跑集成测试。所以,最终的思路是连接外部手机设备。
手机无论是真机还是虚拟机,只要有独立的ip地址,和slave节点处在同一个网络内能够被访问就可以被用作测试机。我在测试时是在主机上开启了多个genymotion虚拟机,然后通过脚本给每个slave分配一个虚拟手机。
关于如何访问真机可以参照http://adbshell.com/commands/adb-connect .