一、前言


二、搭建过程

第一步:启动模拟器,查看当前设备

还是通过输入adb devices 查看一下当前设备的 devicename,其实就是可以将 devicename 作为 udid 的值,之后在脚本的 desired_caps 当中填入 udid=xxxx 就好了

第二步:设备 appium
首先是设置不同端口的 appium server

然后是 Bootstrap Port 也设置一下,注意不要用已经占用的端口号,devicename 也可以设置一下

设置完成之后启动 appium(这里是 2 个)就好了

第三步:批处理脚本编写
这里主要用到 windows 的批处理脚本作为执行 Robot 的 pybot 命令的基础,简单做起的话,有多少台模拟器就建多少个,当前可以参数化配置,这次就先以比较简单明了的方法先做了吧。

还有用到 python 的多线程来作为并发的主要执行脚本,实现也非常简单

具体的实现代码:

robot_mutil.py
#coding=utf-8
import threading
from time import ctime,sleep
import os


def run(arg):
   os.system(arg)

threads = []
cmd1="Start /wait robot_appium_1.bat"   #线程1执行的命令1
cmd2="Start /wait robot_appium_2.bat"   #线程2执行的命令1
cmd3="rebot --logtitle Lunkr4Android_TestLog --reporttitle Lunkr4Android_TestReport output1.xml output2.xml"  #测试报告合并的命令3
t1 = threading.Thread(target=run,args=(cmd1,))
threads.append(t1)
t2 = threading.Thread(target=run,args=(cmd2,))
threads.append(t2)

if __name__ == '__main__':
    for t in threads:
        t.setDaemon(True)
        t.start()
    t.join()                #父进程等待子进程结束后再执行下去
    os.system(cmd3)    #执行命令3用rebot合并output1.xml和output2.xml,输出合并后的测试报告和日志
    print "test finished"

首先说明一下命令中的start /wait,start /wait它的含义是:启动应用程序并等待它终止,用于调用多个应用程序时,指定:待该程序执行完后再执行下一个(排队执行)举个例子,一个文件夹中有很定系统补丁(按时间排序的)想依次安装完所有补丁,用 start /WAIT 就是最合适了,同样的我们分析一下脚本,首先是批处理文件的命令

robot_appium_1.bat
pybot -o output1.xml -l log1.html -r report1.html ${TEST_FILE_PATH}&exit
robot_appium_2.bat
pybot -o output2.xml -l log2.html -r report2.html ${TEST_FILE_PATH}&exit

脚本 1 和脚本 2 分别对应执行不同文件夹下的测试套件的命令,后面加个&exit,就是为了让脚本启动的测试用例执行完成后把子线程关掉,要所有的子进程都关掉之后,才会去执行合并测试报告的操作,如果不用 start /wait,python 脚本生成的子进程调用批处理脚本之后未等用例执行完成就会结束掉,这样就拿不到 output 生成报告了,同样的,如果一直在 wait,执行完测试用例之后没有 exit 的话,子进程一直未结束,合并测试报告的命令也不会执行,所以通过上面脚本之间的命令组合来使用有点巧妙的利用多线程的原理来实现并发自动化测试的操作,所以执行完成以后对看到生成对应的这些文件


三、执行过程演示

具体的执行过程就是执行 python 脚本就好了,所以可以看看执行的效果

就这样,并发的自动化测试就实现了,当然一般还是 jenkins 来做自动构建,所以这里有一个注意的地方,在执行后操作生成测试报告的时候,是需要获取全部的 output.xml,所以在高级那里,用个模糊匹配配一下就好了

之后执行完成以后就能看到测试报告了


大致的过程就是这样子啦


四、最后说几句


↙↙↙阅读原文可查看相关链接,并与作者交流