appium并发测试

appium 介绍

Appium 是一个开源的,跨平台的自动化测试工具。 它支持模拟器(iOS,FirefoxOS,Android)和真机(iOS, Android, FirefoxOS)上的原生应用,混合应用和移动 web 应用。

appium 工作原理

appium

Android

在Android端,appium基于WebDriver协议,利用Bootstrap.jar,最后通过调⽤用UiAutomator的命令,实现App的自动化测试。

UiAutomator测试框架是Android SDK自带的App UI自动化测试Java库。

另外由于UiAutomator对H5的支持有限,appium引入了chromedriver以及safaridriver等来实现基于H5的自动化。

appium 在android端工作流

  1. client端也就是我们 test script是我们的webdriver测试脚本。
  2. 中间是起的Appium的服务,Appium在服务端起了一个Server(4723端口),跟selenium
    Webdriver测试框架类似, Appium⽀持标准的WebDriver JSONWireProtocol。在这里提供它提供了一套REST的接口,Appium Server接收web driver client标准rest请求,解析请求内容,调⽤用对应的框架响应操作。
  3. appium server会把请求转发给中间件Bootstrap.jar ,它是用java写的,安装在手机上.
    Bootstrap监听4724端口并接收appium 的命令,最终通过调⽤用UiAutomator的命令来实现。
  4. 最后Bootstrap将执行的结果返回给appium server。
  5. appium server再将结果返回给 appium client。

    ios

    在IOS端,appium同样使⽤WebDriver的一套协议。

与Android端测试框架不同的是,appium ios封装了apple的 Instruments框架,主要用了Instrument里的UI Automation(Apple的⾃自动化测试框架),然后在设备中注⼊入bootstrap.js进⾏行监听。

appium 在ios端工作流

  1. client端 依然是 test script是我们的webdriver测试脚本。
  2. 中间是起的Appium的服务,Appium在服务端起了一个Server(4723端口),跟selenium
    Webdriver测试框架类似, Appium⽀持标准的WebDriver JSONWireProtocol。在这里提供它提供了一套REST的接口,Appium Server接收web driver client标准rest请求,解析请求内容,调⽤用对应的框架响应操作。
  3. appium server调用instruments.js 启动⼀一个socket server,同时分出一个⼦子进程运⾏instruments.app,将bootstrap.js(一个UIAutomation脚本)注⼊入到device⽤于和外界进行交互
  4. 最后Bootstrap.js将执行的结果返回给appium server
  5. appium server再将结果返回给 appium client。

所以我们可以看到android与ios区别在于appium 将请求转发到bootstrap.js或者bootstrap.jar.然后由bootstrap 驱动UIAutomation和UiAutomator去devices上完成具体的动作。

appium 并发

appium bingfa

关于appium并发,我将之分为2类,第一类单机并发。第二类基于selenium grid 多节点并发测试,也可称之为云测。

appium 单机并发

Android并发测试
Appium提供了在一台设备上启动多个Android会话的方案。

appium -p 4492 -bp 2251 -U 32456

启动多个Android会话的重要指令包括:

指令 功能
-p Appium的主要端口
-U 设备id
-bp Appium bootstrap端口
–chromedriver-port chromedriver端口(当使用了webviews或者chrome)
–selendroid-port selendroid端口(当使用了selendroid)

iOS并发测试

不幸的是,IOS不能进行本地并发测试。跟Android不一样,IOS在同一时间只能启动一个版本的模拟器来运行多个测试。

总结:
单机并发目前只能在android实现,且必须启动n个appium server 对应不同devices,这里devices可以是真机或模拟器。但是必须保证端口后没有重复使用。
接下来工作就是利用测试框架(testng,jasmine,rspec,cucumber等)将测试分发到不同appium server上。

代码示例

github

代码解析:

  1. 首先让我们来看下代码中的AppiumParallelTest这个类,他们先判断操作系统,并获取操作系统上连接的devices。
    利用AndroidDeviceConfiguration.java 与 IOSDeviceConfiguration.java 中的getIOSUDID,getDevices方法分别获取真机与模拟器的id.
  2. 然后利用startAppiumServer方法启动appium server, 利用appiumServerForAndroid()或者appiumServerForIOS().
  3. aa

appium grid 分布式并发

  1. start selenium grid sever

    1
    java -jar selenium-server-standalone-2.47.1.jar -port 4444 -role hub   -hub http://192.168.199.140:4444/grid/registe
  2. Registered appium server as the grid node
    1
    appium --nodeconfig appium_node_S3.json  -p 4823  -bp 3356 -U "192.168.99.104:5555" --chromedriver-port 4738
  3. Configure the test script,run the tests
    123456789
    @BeforeTest    @Parameters({"deviceName"})    public void setUp(String deviceName) throws Exception {        capabilities.setCapability("deviceName",deviceName);        capabilities.setCapability("platformVersion", "5.0");        capabilities.setCapability("app", getApp("ContactManager.apk"));
    
    setUpAndroidDriver();    }

GRID NODE CONFIGURATION EXAMPLE JSON FILE

12345678910111213141516171819202122232425
{  "capabilities":      [        { "deviceName": "192.168.56.101:5555",          "browserName": "<e.g._iPhone5_or_iPad4>",          "version":"<version_of_iOS_e.g._7.1>",          "maxInstances": 1,          "platform":"<platform_e.g._MAC_or_ANDROID>"        }      ],  "configuration":  {    "cleanUpCycle":2000,    "timeout":30000,    "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",    "url":"http://<host_name_appium_server_or_ip-address_appium_server>:<appium_port>/wd/hub",    "host": <host_name_appium_server_or_ip-address_appium_server>,    "port": <appium_port>,    "maxSession": 1,    "register": true,    "registerCycle": 5000,    "hubPort": <grid_port>,    "hubHost": "<Grid_host_name_or_grid_ip-address>"  }}

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-09-16 05:59:21

appium并发测试的相关文章

apache性能-Apache ab并发测试结果分析,牛人帮忙看看有啥问题,目前多人操作的时候非常慢

问题描述 Apache ab并发测试结果分析,牛人帮忙看看有啥问题,目前多人操作的时候非常慢 以下是一台阿里云机器,跑的测试结果,有知道这样的结果能反映什么问题吗? 目前小弟遇到一个性能问题,单人操作的时候速度还行,但是20 人左右同时操作的时候,就感觉很慢了. [root@AY1311281530504461fdZ bin]# ./ab -n 1000 -c 700 localhost/test.jsp This is ApacheBench, Version 2.3 <$Revision:

hibernate-用ssh写的java后台,在本机上做了下并发测试,才100用户并发mysql就开始报异常了,怎么解决

问题描述 用ssh写的java后台,在本机上做了下并发测试,才100用户并发mysql就开始报异常了,怎么解决 org.hibernate.exception.JDBCConnectionException: Cannot open connection at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:97) at org.hibernate.exception.JDBCExceptionHe

loadrunner做多用户并发测试的问题

问题描述 loadrunner做多用户并发测试的问题 loadrunner做多用户并发测试时,这么多的用户从哪来,真的要在参数那里加几百几千个用户吗? 解决方案 http://www.testwo.com/blog/5055

想请问 WebRequest 如何做并发测试?我开了100个线程,却只有两个能连接到网站上,谢谢各位

问题描述 想请问WebRequest如何做并发测试?我开了100个线程,却只有两个能连接到网站上,我看有人说用System.Net.ServicePointManager.DefaultConnectionLimit=1000;来提升,却发现没有效果,想请各位帮忙,谢谢 解决方案 解决方案二:没错,是这样解决方案三:把网址发出来

junit-怎么在eclipse中调用appium进行测试?

问题描述 怎么在eclipse中调用appium进行测试? 以前没用过appium,查了一下,看到有通过run as -> junit test 调用appium的. 但是我现在需要编写一个java application,在一个界面选择app和测试文件的路径,然后点击开始进行测试,请问这个要怎么实现?谢谢

PHP接口并发测试的方法(推荐)_php实例

如下所示: header('Content-type:text/html; Charset=utf-8'); $uri = "输入你的url"; $data = array( 'test'=>1 ); $ch = curl_init(); // print_r($ch); curl_setopt($ch, CURLOPT_URL, $uri); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_HEADER,

PHP接口并发测试的方法(推荐)

如下所示: header('Content-type:text/html; Charset=utf-8'); $uri = "输入你的url"; $data = array( 'test'=>1 ); $ch = curl_init(); // print_r($ch); curl_setopt($ch, CURLOPT_URL, $uri); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_HEADER,

用Apache自带的工具做并发测试,结果分析

问题描述 以下是一台阿里云机器,跑的测试结果,有知道这样的结果能反映什么问题吗?目前小弟遇到一个性能问题,单人操作的时候速度还行,但是20 人左右同时操作的时候,就感觉很慢了.[root@AY1311281530504461fdZ bin]# ./ab -n 1000 -c 700 localhost/test.jspThis is ApacheBench, Version 2.3 <$Revision: 655654 $>Copyright 1996 Adam Twiss, Zeus Tec

Java的UUID生成工具并发测试

一.认识UUID UUID 维基百科,自由的百科全书 通用唯一识别码 (Universally Unique Identifier, UUID) 是一个软件建构的标准,亦为自由软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部份. UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定.如此一来,每个人