Docker+Appium实现同时在多台手机上进行Android单元自动化测试

第一次写技术博客,最近学习了一下基于appium的android单元自动化测试用例编写,并在ubuntu 14.04中用docker搭建了一个可以同时在多台手机上进行测试的框架,框架搭建期间踩了很多坑,感觉有必要记录一下搭建方法。

docker安装

首先说一下很重要的一点,docker一定要装最新版本(目前最新的版本是1.12),不然下载镜像的速度特别慢,网上常见的那种方法实际上并不能安装到最新的版本,最后我是通过下面这个网站介绍的方法安装好的:

http://www.mamicode.com/info-detail-1521690.html

appium框架搭建

接下来正式介绍appium框架的搭建。

原本以为要自己编写dockerfile文件来配置环境,后来发现可以直接在网上下载相应镜像,首先在网站https://hub.docker.com/的search栏查找,输入appium后就会出现很多镜像,而且每个镜像都有简短的用法说明,然后可以在终端中pull相应的镜像,pull之前可以先search一下,代码如下:

sudo docker search appium
sudo docker pull muicoder/appium

pull镜像的时候有可能速度很慢,但只要docker安装到最新版本就好了,如果仍然觉得慢可以使用daocloud官网的加速器,加速器需要docker安装到1.12版本才能使用。

我最后选择了muicoder/appium这个镜像,网上显示的pull次数最多,果然也最好用,之前试了另外几个镜像都有各种各样的问题,要么appium版本太低,要么环境没配好,浪费了很多时间。

这里有一点要注意,muicoder/appium这个镜像里面没有装android sdk,需要在本机上装好,按照muicoder/appium中的说明配置一下ANDROID_HOME这个环境变量即可。(用appium做android自动化测试时一定要有android sdk,因为我之前的测试代码是在windows上写的,在ubuntu中只装了java,没装android sdk,所以之前用本地的appium都运行不了代码。)

到这里环境就配置好了,可以通过如下命令(这是一条命令,比较长,运行之前要先插入手机)构造一个容器来测试一下:

sudo docker run -d --name new_appium1 --privileged -v /dev/bus/usb:dev/bus/usb -v $ANDROID_HOME:/android -p 4723:4723 muicoder/appium

运行完这条命令后,可在浏览器中输入127.0.0.1:4723,如果浏览器显示The URL ‘/’ did not map to a valid resource,就说明appium环境配置好了。

编写测试脚本

下面可以开始运行测试代码,在windows上我是用eclipse编写的测试用例,为了方便在docker中运行,我在ubuntu中写了两个脚本,用来编译和运行,编写方法基本可以参照如下这个网站中介绍的方法:

http://blog.csdn.net/wen294299195/article/details/39964971

当然,如果是单元测试用例代码,可能还要略作一些改变,这里就不仔细说了。

单机测试

如果只对一个手机进行测试,可以直接在本地运行测试代码,要注意的是手机默认应该是连接在本地,首先要通过adb kill-server命令断开手机与本地的连接,手机才会连接到容器中,可用如下命令检测有没有连接成功:

sudo docker exec -it -u 0 new_appium1 adb devices

还要将测试app的apk文件copy到容器中,命令如下(apk_folder为装有apk文件的文件夹):

sudo docker cp apk_folder new_appium1:/apk_folder

然后运行脚本就可进行测试。

多机测试

如果要实现多机同时测试,则需要构建若干个容器,并将测试代码copy到容器中,下面我们以两个手机为例进行说明。

我们再构造一个容器(改变了名字和端口号):

sudo docker run -d --name new_appium2 --privileged -v /dev/bus/usb:dev/bus/usb -v $ANDROID_HOME:/android -p 4724:4724 muicoder/appium

构造好了容器后要确保每个容器连接一个手机,而adb kill-server命令无法指定断开某一个手机,这就要结合手机的usb选项进行完成了,我的做法是,先在本地kill-server使得两个手机连在某一个容器中,然后在其中一个手机断开连接,再连接上,这时候这个手机就连在另一个容器中了,具体方法大家也可自己摸索。

然后分别将测试工程copy进两个容器中,代码如下所示(test为测试工程文件夹):

sudo docker cp test new_appium1:/test
sudo docker cp test new_appium2:/test

这里又有一点要注意,之前我的脚本在本地可以正常运行代码,但是copy到docker中运行就出现了错误,最后我通过把脚本中的所有相对路径改为绝对路径解决了,具体原因暂时也没弄清楚。

最后,就可以通过前面提到的exec命令分别运行两个容器中的脚本了,即可以同时在多台手机上进行自动化测试,大功告成!

猜你喜欢

转载自blog.csdn.net/pjl6523853/article/details/72643267