51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2081|回复: 1
打印 上一主题 下一主题

appium并发测试

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-2-26 16:26:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Appium 是一个开源的,跨平台的自动化测试工具。 它支持模拟器(iOS,FirefoxOS,Android)和
真机(iOS, Android, FirefoxOS)上的原生应用,混合应用和移动 web 应用。

appium 工作原理

appium
appium

Android

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

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

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

appium 在android端工作流

client端也就是我们 test script是我们的webdriver测试脚本。

中间是起的Appium的服务,Appium在服务端起了一个Server(4723端口),跟selenium
Webdriver测试框架类似, Appium⽀持标准的WebDriver JSONWireProtocol。在这里提供它提供
了一套REST的接口,Appium Server接收web driver client标准rest请求,解析请求内容,调⽤用对
应的框架响应操作。

appium server会把请求转发给中间件Bootstrap.jar ,它是用java写的,安装在手机上.
Bootstrap监听4724端口并接收appium 的命令,最终通过调⽤用UiAutomator的命令来实现。

最后Bootstrap将执行的结果返回给appium server。

appium server再将结果返回给 appium client。

ios

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

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

appium 在ios端工作流

client端 依然是 test script是我们的webdriver测试脚本。

中间是起的Appium的服务,Appium在服务端起了一个Server(4723端口),跟selenium
Webdriver测试框架类似, Appium⽀持标准的WebDriver JSONWireProtocol。在这里提供它提供
了一套REST的接口,Appium Server接收web driver client标准rest请求,解析请求内容,调⽤用对
应的框架响应操作。

appium server调用instruments.js 启动⼀一个socket server,同时分出一个⼦子进程运⾏instrumen
ts.app,将bootstrap.js(一个UIAutomation脚本)注⼊入到device⽤于和外界进行交互

最后Bootstrap.js将执行的结果返回给appium server

appium server再将结果返回给 appium client。

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

appium 并发

appium bingfa
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

代码解析:

首先让我们来看下代码中的AppiumParallelTest这个类,他们先判断操作系统,并获取操作系统
上连接的devices。
利用AndroidDeviceConfiguration.java 与 IOSDeviceConfiguration.java 中的getIOSUDID,getDevices
方法分别获取真机与模拟器的id.

然后利用startAppiumServer方法启动appium server, 利用appiumServerForAndroid()或者
appiumServerForIOS().

aa

appium grid 分布式并发
  1. start selenium grid sever

  2. 1
  3. java -jar selenium-server-standalone-2.47.1.jar -port 4444 -role hub   -hub http://192.168.199.140:4444/grid/registe
  4. Registered appium server as the grid node

  5. 1
  6. appium --nodeconfig appium_node_S3.json  -p 4823  -bp 3356 -U "192.168.99.104:5555" --chromedriver-port 4738
  7. Configure the test script,run the tests


  8. @BeforeTest
  9.     @Parameters({"deviceName"})
  10.     public void setUp(String deviceName) throws Exception {
  11.         capabilities.setCapability("deviceName",deviceName);
  12.         capabilities.setCapability("platformVersion", "5.0");
  13.         capabilities.setCapability("app", getApp("ContactManager.apk"));

  14.         setUpAndroidDriver();
  15.     }
  16. GRID NODE CONFIGURATION EXAMPLE JSON FILE


  17. {
  18.   "capabilities":
  19.       [
  20.         { "deviceName": "192.168.56.101:5555",
  21.           "browserName": "<e.g._iPhone5_or_iPad4>",
  22.           "version":"<version_of_iOS_e.g._7.1>",
  23.           "maxInstances": 1,
  24.           "platform":"<platform_e.g._MAC_or_ANDROID>"
  25.         }
  26.       ],
  27.   "configuration":
  28.   {
  29.     "cleanUpCycle":2000,
  30.     "timeout":30000,
  31.     "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
  32.     "url":"http://<host_name_appium_server_or_ip-address_appium_server>:<appium_port>/wd/hub",
  33.     "host": <host_name_appium_server_or_ip-address_appium_server>,
  34.     "port": <appium_port>,
  35.     "maxSession": 1,
  36.     "register": true,
  37.     "registerCycle": 5000,
  38.     "hubPort": <grid_port>,
  39.     "hubHost": "<Grid_host_name_or_grid_ip-address>"
  40.   }
  41. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-9-21 01:33 , Processed in 0.066932 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表