zoukankan      html  css  js  c++  java
  • Appium Grid并发测试

    背景

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

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

    Selenium只是针对于web平台的自动化,然而移动端平台的兼容性测试所涉及到机型众多,多设备并发测试需求更加迫切。而Appium Grid恰好就是基于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安装包

    实践步骤

    开启hub

    selenium-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:UsersAdministratorAppDataLocalProgramsAppium esourcesapp ode_modulesappiumuildlibmain.js
    通过执行如下Appium启动指令

    node main.js -a 127.0.0.1 -p 4723 -bp 4725 -U 127.0.0.1:62001 --nodeconfig D:svn_lemon	est1.json
    
    • -a参数表示Appium Server的工作IP地址
    • -p参数表示Appium Server的端口号
    • -bp参数表示bootstrap的监听端口号
    • -U参数表示Appium链接到哪台设备上
    • --nodeconfig后面接node节点配置文件

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

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

    注册另外的节点

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

    总结

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

  • 相关阅读:
    hdu 3791 二叉搜索树
    hdu 4041 Eliminate Witches! 栈和队列
    后缀数组讲解
    Theme Section HDU
    Wow! Such Doge! HDU
    Girls' research HDU
    吉哥系列故事――完美队形II HDU
    Best Reward HDU
    String Problem HDU
    最大最小表示法
  • 原文地址:https://www.cnblogs.com/yyoba/p/11304034.html
Copyright © 2011-2022 走看看