appium并发测试
appium 介绍
Appium 是一个开源的,跨平台的自动化测试工具。 它支持模拟器(iOS,FirefoxOS,Android)和真机(iOS, Android, FirefoxOS)上的原生应用,混合应用和移动 web 应用。
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,同时分出一个⼦子进程运⾏instruments.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并发,我将之分为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 分布式并发
-
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
-
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
-
Configure the test script,run the tests
1
2
3
4
5
6
7
8
9@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
1 | { |
最新内容请见作者的GitHub页:http://qaseven.github.io/
更多相关文章
- AndroidPN真机环境测试
- Android自动化测试解决方案
- 2.android中使用锁来兼容netty客户端的写法
- 介始一下Android(安卓)单元测试框架类----ActivityInstrumentati
- [Android开发常见问题-17] Android(安卓)JUnit Test (两种方法)
- Android学习笔记:获取相册和摄像机图片在APP显示Demo
- android之测试
- 软件工程(第六组)第四次作业
- iTestin云测试工具之我见