Appium Grid 并发测试

背景

Selenium 玩的比较 6 的同学比较清楚:在 Selenium 中三大组件中有包含了 Selenium Grid,而其作用就是分布式执行测试用例。主要的应用场景在于:

Selenium 只是针对于 Web 平台的自动化,然而移动端平台的兼容性测试所涉及到机型众多,多设备并发测试需求更加迫切。而 Appium Grid 恰好就是基于 Selenium Grid 这一模式发展而来,可以很好的满足我们的需求。
Google 爬到一张原理图,大家可以来看下:
image.png

Grid 模式下有两个非常重要的组件:

环境/工具准备

实践步骤

开启 hub

selenium-server-standalone-3.12.0.jar 这支文件可以从 http://selenium-release.storage.googleapis.com/index.html 进行下载
下载完成之后直接再 dos 环境下去执行:
image.png

-role 参数表示指定当前角色是为 hub
当然除了-role 参数还有很多其他的参数可以提供

image.png

此时可以在浏览器中输入 http://127.0.0.1:4444/grid/console 进行访问,默认 hub 起来的端口为 4444
此页面为 hub 的控制管理页面,当前没有 node 节点链接上
image.png

node 注册

首先开启模拟器(这里以夜神模拟器举例,其他的模拟器/真机类似),保证 adb devices 是可以检测到设备
image.png

当前 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

可以看到第一个 Appium Server 节点已经成功注册上
image.png

刷新浏览器即可得到节点相关信息
image.png

注册另外的节点

以此类推,使用夜神模拟器多开功能开启第二台夜神模拟器,第二个 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

image.png

总结

目前我们的 hub 能够管理多个节点,但是需要注意的是我们只是用 Grid 搭建好了分布式测试环境,不能直接一个脚本扔给 hub 就可以开始在 node 上并发测试。怎么对接到我们的脚本,能够让我们的脚本分发到不同 node 去执行,多个 node 节点并发执行测试用例这些问题我们还没有解决,后续的文章我们为大家补充,大家可以持续关注。

1 操作
shakebabe 在 2020-08-06 17:40:10 更新了该帖
1 回帖
请输入回帖内容 ...