背景

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:\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节点已经成功注册上

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

注册另外的节点

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

总结

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

Appium Grid并发测试的更多相关文章

  1. Appium+python自动化(三十六)- 士兵突击许三多 - 多个appium服务启动,多个设备启动,多进程并发启动设备-并发测试 - 上(超详解)

    简介 前面课程只是启动了单个appium服务,只能控制单台设备.如果需要针对多台设备测试那么该如何处理?而且发现群里的小伙伴们也在时不时地在讨论这个问题,想知道怎么实现的,于是宏哥就决定写一片这样的文 ...

  2. Appium+python自动化(三十七)- 士兵突击许三多 - 多个appium服务启动,多个设备启动,多进程并发启动设备-并发测试 - 下(超详解)

    简介 接着上一篇继续看一下如何并发测试以及并发测试的过程中,可能遇到的问题,在这里宏哥把宏哥遇到的和小伙伴或者童鞋们,一起分享一下. Appium端口检测 问题思考 经过前面学习,我们已经能够使用py ...

  3. appium 并发测试

    Android并发测试 Appium提供了在一台设备上启动多个Android会话的方案,而这个方案需要你输入不同的指令来启动多个Appium服务来实现. 启动多个Android会话的重要指令包括: - ...

  4. Selenium & Webdriver 远程测试和多线程并发测试

    Selenium & Webdriver 远程测试和多线程并发测试 Selenium Webdriver自动化测试,初学者可以使用selenium ide录制脚本,然后生成java程序导入ec ...

  5. selenium从入门到应用 - 8,selenium+testNG实现多线程的并发测试

    本系列所有代码 https://github.com/zhangting85/simpleWebtest本文将介绍一个Java+TestNG+Maven+Selenium的web自动化测试脚本环境下s ...

  6. Atitit.并发测试解决方案(2) -----获取随机数据库记录 随机抽取数据 随机排序 原理and实现

    Atitit.并发测试解决方案(2) -----获取随机数据库记录 随机抽取数据 随机排序 1. 应用场景 1 2. 随机抽取数据原理 1 3. 常用的实现方法:::数据库随机函数 1 4. Mssq ...

  7. appium 真机测试问题 出现 instruments crashed on startup

    1.appium 真机测试的时候 instruments crashed on startup,必须在真机上打开UI Automation 在设置里: Developer->Enable UI ...

  8. selenium之多线程启动grid分布式测试框架封装(四)

    九.工具类,启动所有远程服务的浏览器 在utils包中创建java类:LaunchAllRemoteBrowsers package com.lingfeng.utils; import java.n ...

  9. Selenium Grid分布式测试入门详解

    本文对Selenium Grid进行了完整的介绍,从环境准备到使用Selenium Grid进行一次完整的多节点分布式测试. 运行环境为Windows 10,Selenium版本为 3.5.0,Chr ...

随机推荐

  1. python2.7写的图形密码生成器

    #coding:utf8import random,wxdef password(event): a = [chr(i) for i in range(97,123)] b = [chr(i) for ...

  2. JS面向对象设计-创建对象

    Object构造函数和对象字面量都可以用来创建单个对象,但是在创建多个对象时,会产生大量重复代码. 1.工厂模式 工厂模式抽象了创建具体对象的过程.由于ECMAScript无法创建类,我们用函数来封装 ...

  3. 如何设计提高服务API的安全性(一)基础介绍

    场景 现今越来越多公司提供了Sass平台服务,大部分也直接提供API.如快递鸟.微信Api.云服务.如何保证这些服务的安全性是一门重要的课题.如快递跟踪.机票查询等很便捷地影响着我们d的生活,对这些技 ...

  4. Linux安装node环境

    一.进行连接远程: 1.命令窗口 —> 输入 ssh 用户名@主机IP —> 回车 2.输入密码 (输入后回车) 3.进入根目录 (命令:cd / ) 二.Linux环境安装node: T ...

  5. TP5.1 调用common里面自定义的常量

    公共文件:\application\common.php define('cms_password', cms); 控制器引用: 调用: $aa = cms_password; dump(cms_pa ...

  6. Linux使用pt-archiver工具自动备份MySQL

    操作系统: CentOS 6.9 脚本语言: shell https://github.com/iscongyang/Practical/blob/master/shell-scripts/pt-ar ...

  7. 大数据技术原理与应用:【第二讲】大数据处理架构Hadoop

    2.1 Hadoop概论 创始人:Doug Cutting 1.简介: 开源免费; 操作简单,极大降低使用的复杂性; Hadoop是Java开发的; 在Hadoop上开发应用支持多种编程语言.不限于J ...

  8. VUE的路由器的总结

    vue的路由器,我们在使用vue进行开发的时候,是必须用到的一个vue自带的组件,下面进行vue经常的操作的一些说明 1.vue-router的安装 在命令行里面使用 cnpm install vue ...

  9. centos7编译安装pgbouncer

    1.下载pgbouncer程序包和libevent依赖包 wget https://github.com/libevent/libevent/releases/download/release-2.1 ...

  10. 01-linux-基本语法-sh文件

    在一些开源库中,往往有一个 xxx.sh 的安装文件.命令“./ xxx.sh” 就可运行之. 其实内部是一些 linux 的语句.整合起来,方便使用而已. 介绍一下常用的一些Linux语句 cd b ...