手机自动化测试平台搭建----第七节 Appium 分布式appium grid

背景

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

  • 缩短测试执行时间,提高自动化测试效率
  • 多浏览器的兼容性测试。

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

手机自动化测试平台搭建----第七节 Appium 分布式appium grid_第1张图片

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

  • hub 跟交换机的角色类似,通过网线连通到各种设备。官方的解释是:hub用来管理各个节点的注册和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令再转发给节点来执行。
  • node 节点,执行脚本代码,通过上图可以看到,hub将请求发给node去执行,这里的node就是Appium Server端 。

环境/工具准备

  • selenium-server-standalone-3.12.0.jar
  • 夜神模拟器多开
  • Appium Desktop V1.8.2
  • nodejs安装包

实践步骤

开启hub

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

手机自动化测试平台搭建----第七节 Appium 分布式appium grid_第2张图片

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

java -jar selenium-server-standalone-3.12.0.jar -role hub

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

手机自动化测试平台搭建----第七节 Appium 分布式appium grid_第3张图片

node注册

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

手机自动化测试平台搭建----第七节 Appium 分布式appium grid_第4张图片

当前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节点配置文件

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

手机自动化测试平台搭建----第七节 Appium 分布式appium grid_第5张图片

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

手机自动化测试平台搭建----第七节 Appium 分布式appium grid_第6张图片

注册另外的节点

以此类推,使用夜神模拟器多开功能开启第二台夜神模拟器,第二个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 分布式appium grid_第7张图片

第二种方式+实现代码如下:

第一步、新建两个json文件,分别填写两个设备的信息test.json与test2.json

第二步、开启远程grid服务(需要在这个jar包目录下面执行该命令)

java -jar selenium-server-standalone-2.45.0.jar-role hub

三步、打开两个控制台,分别启动appium服务,需要设置不同的端口

appium -h可以查看帮助命令

把配置文件放到d:/software下面

appium -p 4723 -bp 4724   -U 127.0.0.1:62001 --nodeconfig   d:/software/test.json  --no-reset

appium -p 4725 -bp 4726  -U 127.0.0.1:7555  --nodeconfig   d:/software/test2.json  --no-reset

第四步:udid获取方式 必须为:adb devices配置文件里面必须要有udid devicename写什么都可以,没什么用

第五步:在testNG xml类中,主要parallel="tests"是否多线程并发运行测试;可选值(false | methods | tests | classes | instances),默认“false",多线程写成tests

利用传参的方式,把port跟uuid传入到每个测试类中。

手机自动化测试平台搭建----第七节 Appium 分布式appium grid_第8张图片

 

然后每个类中通过@Parameters({"port","udid"})传入参数,代码如下:

手机自动化测试平台搭建----第七节 Appium 分布式appium grid_第9张图片

 

usb接口毕竟有限,pc直接通过手机上的无线,直接运行手机程序

1、首先在.bash_profile种配置adb环境变量

exportPATH="/usr/local/bin:/usr/local/sbin:~/bin:$PATH"

export PATH=${PATH}:/Users/chenxiaoqin/android-sdks/tools:/Users/chenxiaoqin/android-sdks/platform-tools

2、控制台中直接输入adb看是否成功

3、在安卓手机上,下载一个无线调试器 但是需要root权限

4、连接多个无线设备

adb connect 172.19.8.139:5555

adb connect 172.19.8.30:5556

adb devices查看连接的设备

可以心中json文件分别设置不同手机的设备信息,比如:nodeconfig.json

 

手机自动化测试平台搭建----第七节 Appium 分布式appium grid_第10张图片

上述是node与hub在同一台机器上,

node与hub不在同一台机器上

下面讲解有2个node,其中一个node与hub的IP一致,一个node与hub不在同一台机器上

1.第一步仍然是启动主hub

cmd 

cd D:\software(jar包在整个路径下)
java -jar selenium-server-standalone-3.4.0.jar -role hub

第二步:启动其中一个与node与Hub   IP一致的(172.16.0.164)

appium -p 4723 -bp 4724   -U 127.0.0.1:7555 --nodeconfig  d:/software/test.json

test.json内容如下

{
    "capabilities": [{
        "deviceName": "127.0.0.1:7555",
        "version": "6.0.1",
        "maxInstances": 1,
        "platform": "ANDROID",        
        "browserName": "Chrome"
    }],
    "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:4723/wd/hub",
        "host": "127.0.0.1",
        "port": 4723,
        "maxSession": 1,
        "register": true,
        "registerCycle": 5000,
        "hubPort": 4444,
        "hubHost": "172.16.0.164",
        "hubProtocol": "http"
    }
}

手机自动化测试平台搭建----第七节 Appium 分布式appium grid_第11张图片

第三步连接这个node下的网易虚拟机 

adb connect  127.0.0.1:7555

第四部 启动另外一个与node与Hub   IP不一致的(172.16.0.25)

在另外一台的机器是执行以下命令,test2.json放置在d盘根目录(路径你随意放,注意跟下面的命令行的路径保持一致)

提前的把Appium环境安装起来,可以参考:https://blog.csdn.net/jiulanhao/article/details/89875880

appium -p 4725 -bp 4726 -U 172.16.0.38:7401 --nodeconfig d:/test2.json

test2.json文件内容如下

{
"capabilities":
[
{
"deviceName": "172.16.0.38:7401",
"version":"5.1",
"maxInstances": 1,
"platform":"ANDROID",
"browserName": "Chrome"
}
],
"configuration":
{
"cleanUpCycle":2000,
"timeout":30000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"hub":"172.16.0.164:4444/grid/register",
"url":"http://172.16.0.25:4725/wd/hub",
"host": "172.16.0.25",
"port": 4725,
"maxSession": 1,
"register": true,
"registerCycle": 5000,
"hubPort": 4444,
"hubHost": "172.16.0.164",
"hubProtocol": "http"
}
}

连接上这个node下需要执行的mobile ,方法同上adb connect XXXdeviceName

第五步:配置testng.xml来选择执行跑Case的node

2台设备都跑通一个case,当然也可以在同一个机器上配置多个node,配置文件的ip写成那台机器的ip即可

手机自动化测试平台搭建----第七节 Appium 分布式appium grid_第12张图片

手机自动化测试平台搭建----第七节 Appium 分布式appium grid_第13张图片

手机自动化测试平台搭建----第七节 Appium 分布式appium grid_第14张图片

运行testng.xml就可以跑起来了,喜欢的点赞加收藏哦!!!

 

转载:
https://www.cnblogs.com/yyoba
https://www.cnblogs.com/zgq123456/articles/10749580.html

你可能感兴趣的:(appium,grid,appium,分布式)