出门莫恨无人随,书中车马多如簇。这篇文章主要讲述Appium Grid并发测试相关的知识,希望能为你提供帮助。
背景
Selenium玩的比较6的同学比较清楚:在Selenium中三大组件中有包含了Selenium Grid,而其作用就是分布式执行测试用例。主要的应用场景在于:
- 缩短测试执行时间,提高自动化测试效率
- 多浏览器的兼容性测试。
Google爬到一张原理图,大家可以来看下:
文章图片
Grid模式下有两个非常重要的组件:
- hub 跟交换机的角色类似,通过网线连通到各种设备。官方的解释是:hub用来管理各个节点的注册和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令再转发给节点来执行。
- node 节点,执行脚本代码,通过上图可以看到,hub将请求发给node去执行,这里的node就是Appium Server端 。
- selenium-server-standalone-3.12.0.jar
- 夜神模拟器多开
- Appium Desktop V1.8.2
- nodejs安装包
开启hubselenium-server-standalone-3.12.0.jar这支文件可以从 http://selenium-release.storage.googleapis.com/index.html 进行下载
下载完成之后直接再dos环境下去执行:
文章图片
-role参数表示指定当前角色是为hub
当然除了-role参数还有很多其他的参数可以提供
文章图片
此时可以在浏览器中输入 http://127.0.0.1:4444/grid/console 进行访问,默认hub起来的端口为4444
此页面为hub的控制管理页面,当前没有node节点链接上
文章图片
node注册首先开启模拟器(这里以夜神模拟器举例,其他的模拟器/真机类似),保证adb devices是可以检测到设备
文章图片
当前deviceName为127.0.0.1:62001
新建test1.json文件,在json中的配置即为node注册到hub所需要的信息(注意在#后面的内容需要删除掉,我这边是为了方便进行释义)
{
"capabilities":
[
{
"deviceName": "127.0.0.1:62001",#此为adb devices检测到的设备名
"version":"4.4.2", #模拟器/真机的系统版本
"maxInstances": 1, #最多的实例个数
"platform":"android", #测试平台:Android
"browserName": ""#测试普通App可置为空,如果是测试浏览器如chrome就可以写上
}
],
"configuration":
{
"cleanUpCycle":2000,
"timeout":30000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"hub":"127.0.0.1:4444/grid/register",#hub的注册接口地址
"url":"http://127.0.0.1:4723/wd/hub", #Appium Server的默认访问路径
"host": "127.0.0.1", #Appium Server的IP地址
"port": 4723, #Appium Server端口号
"maxSession": 1,
"register": true,
"registerCycle": 5000,
"hubPort": 4444, #hub端口号
"hubHost": "127.0.0.1", #hub IP地址,这里是在本机上启动的,如果是在另外的机器上需要用其外部的IP地址,比如:192.168.1.111这种
"hubProtocol": "http" #协议,默认为http
}
}
安装nodejs(Appium desktop版本默认没有提供命令行启动的方式,需要安装nodejs支持)
进入到Appium的js启动脚本路径,我的路径为
C:\\Users\\Administrator\\AppData\\Local\\Programs\\Appium\\resources\\app\\node_modules\\appium\\build\\lib\\main.js
通过执行如下Appium启动指令
node main.js -a 127.0.0.1 -p 4723 -bp 4725 -U 127.0.0.1:62001 --nodeconfig D:\\svn_lemon\\test1.json
- -a参数表示Appium Server的工作IP地址
- -p参数表示Appium Server的端口号
- -bp参数表示bootstrap的监听端口号
- -U参数表示Appium链接到哪台设备上
- --nodeconfig后面接node节点配置文件
文章图片
刷新浏览器即可得到节点相关信息
文章图片
注册另外的节点以此类推,使用夜神模拟器多开功能开启第二台夜神模拟器,第二个node节点的json配置:
{
"capabilities":
[
{
"deviceName": "127.0.0.1:62025",
"version":"5.1.1",
"maxInstances": 1,
"platform":"ANDROID",
"browserName": ""
}
],
"configuration":
{
"cleanUpCycle":2000,
"timeout":30000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"hub":"127.0.0.1:4444/grid/register",
"url":"http://127.0.0.1:4724/wd/hub",
"host": "127.0.0.1",
"port": 4724,
"maxSession": 1,
"register": true,
"registerCycle": 5000,
"hubPort": 4444,
"hubHost": "127.0.0.1",
"hubProtocol": "http"
}
}
执行命令:
node main.js -a 127.0.0.1 -p 4724-bp 4726 -U 127.0.0.1:62025 --nodeconfig D:\\svn_lemon\\test2.json
文章图片
总结
【Appium Grid并发测试】目前我们的hub能够管理多个节点,但是需要注意的是我们只是用Grid搭建好了分布式测试环境,不能直接一个脚本扔给hub就可以开始在node上并发测试。怎么对接到我们的脚本,能够让我们的脚本分发到不同node去执行,多个node节点并发执行测试用例这些问题我们还没有解决,后续的文章我们为大家补充,大家可以持续关注。
推荐阅读
- 7.1 基础知识Android消息处理机制
- 20172328《程序设计与数据结构》实验四Android程序设计报告
- 6.5 Android硬件访问服务使用反射
- XML fragments parsed from previous mappers already
- Activiti6 应用安装 activiti-admin,activiti-app,activiti-rest
- 1-开发共享版APP(搭建指南)-快速搭建到自己的服务器
- Android关于listview中显示网络图片的问题
- iMPACT错误提醒 “A Xilinx Application has encountered an unexpected error.It is recommended that you save
- The Applications of RT-Thread RTOS