new RemoteWebDriver(new URL("http://ip:4723/wd/hub"), capabilities);
第一步:
后台启动两个appium:
/Applications/Appium.app/Contents/Resources/app/node_modules/appium/build/lib/main.js --address 0.0.0.0 --port 4723
/Applications/Appium.app/Contents/Resources/app/node_modules/appium/build/lib/main.js --address 0.0.0.0 --port 4722
客户端建立两个session:
appium1.4.X+iOS9.X+xcode7.X:
appium1.4.x+iOS9.x+xcode7.x,这一整套的配置做移动端自动化测试是测试人员常用的测试框架。关于,这一套测试框架的并发问题:基于mac端,启动多台appium服务器会导致appium的运行出错。这是因为多个appium_server的临时文件存放在同一个地址的原因。这个问题的解决思路很简单。只要在每个appiuim_server启动的时候指定一个appium缓存文件存放地址即可。
例如:
第一台appium_server启动命令:appium -a 127.0.0.1 -p 4723 -bp 4724 --tmp /usr/desktop/liujian1
第二台appium_server启动命令:appium -a 127.0.0.1 -p 4725 -bp 4726 --tmp /usr/desktop/liujian2
appium1.6.X+iOS10.X+xcode8.X:
appium1.6.X+iOS10+xcode8.X,对于iOS10.X的版本来说,苹果公司在测试框架上有了很大的改变。苹果公司放弃了原来的uiautomator那一套东西,改用xcuitest来进行自动化测试。这个重大的改变,导致了基于uiautomator体系的appium测试框架做出了调整。为了适应xcuitest测试框架,appium引进了facebook开发WebDriverAgent(简称wda)。wda在进行WebDriver通信的时候分别指定电脑端和手机端的端口,都是8100。导致了,在mac上同时运行多台appium_server服务的时候会出现异常。这个问题的解决思路是在运行脚步里指定不同的wda端口:
例如:
第一个脚本参数setCapability("wdaLocalPort","端口一")
第二个脚本参数setCapability("wdaLocalPort","端口二")
注意:两个端口不能相同。
tips:
如果Android7在做并发的时候如果出现端口异常,指定参数setCapability("systemPort","端口号")
分类: 移动端自动化测试
标签: appium, python, iOS
两部手机的问题:
http://localhost:8100/inspector
https://blog.csdn.net/Maxdong24/article/details/75532791
//注意三点
//1.端口转发 iproxy 8100 8100
//2.Mac 浏览器中IP要替换成 localhost
//3.如果,没有正常看到层级树。那么保持手机和电脑的连接,重启Mac 、重启手机。
https://www.jianshu.com/p/7bd29362b95f
上面都在做什么呢?
转发方法:iproxy <本地端口> <手机端口> [udid];一台机子时可以不写udid;执行转发方法后控制台显示:waiting for connection
iproxy 8101 8100 a9377a00d4cfdcfede2b96f05275feabe684969a
数据线连接,将WDA服务端安装至两个手机上,
WDA客户端1(iphone1)
WDA客户端2(iphone2)
FXSyinergangdeMacBook-Air:/ fxszhaotianliang$ ios-deploy -c --no-wifi
[....] Waiting up to 5 seconds for iOS device to be connected
[....] Found f3b57faeefab54d9c01b20d43d2e7a12d59dea52 (N56AP, iPhone 6 Plus, iphoneos, arm64) a.k.a. 'FXS)楊波 の iPhone' connected through USB.
[....] Found c84bfbfe8a276e620c98d0930ec2d6083b5b55d8 (N61AP, iPhone 6 (GSM), iphoneos, arm64) a.k.a. 'iPhone' connected through USB.
WDA客户端(xcode:8100)
iproxy 8101 8100 f3b57faeefab54d9c01b20d43d2e7a12d59dea52
iproxy 8100 8100 c84bfbfe8a276e620c98d0930ec2d6083b5b55d8
appium服务端1
appium服务端2
/Applications/Appium.app/Contents/Resources/app/node_modules/appium/build/lib/main.js --address 0.0.0.0 --port 4723
/Applications/Appium.app/Contents/Resources/app/node_modules/appium/build/lib/main.js --address 0.0.0.0 --port 4722
appium客户端1
appium客户端2
setCapability("wdaLocalPort","端口一")
setCapability("wdaLocalPort","端口二")
appium客户端发起两个请求分别设置WDA:端口1 端口2
qppium服务端1,appium服务端2分别接受
服务端1 服务端2将指令全部发送至8100端口
进行转发:iproxy 8101 8100 f3b57faeefab54d9c01b20d43d2e7a12d59dea52
wda:启动两个
cd /node_modules/_appium-xcuitest-driver@2.108.0@appium-xcuitest-driver/WebDriverAgent/
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination id=f3b57faeefab54d9c01b20d43d2e7a12d59dea52 test
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination id=c84bfbfe8a276e620c98d0930ec2d6083b5b55d8 test
################################通过数据线连接多台设备并发环境搭建过程##############################
缺点:并发量受到usb孔的限制
1:多台ios连接mac
2:利用ios-deploy查看iphone id列表
idevice_id -l
ios-deploy -c
ios-deploy -c --no-wifi
ios-deploy --id c84bfbfe8a276e620c98d0930ec2d6083b5b55d8 --list_bundle_id
3:启动多个appium服务端,分别设置不同端口:
/Applications/Appium.app/Contents/Resources/app/node_modules/appium/build/lib/main.js --address 0.0.0.0 --port 4723
/Applications/Appium.app/Contents/Resources/app/node_modules/appium/build/lib/main.js --address 0.0.0.0 --port 4722
4:启动wda端,分别设置不同iphone id:
cd /node_modules/_appium-xcuitest-driver@2.108.0@appium-xcuitest-driver/WebDriverAgent/
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination id=f3b57faeefab54d9c01b20d43d2e7a12d59dea52 test
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination id=c84bfbfe8a276e620c98d0930ec2d6083b5b55d8 test
5:将wda端口转发至不同端口:(转发方法:iproxy <本地端口> <手机端口> [udid];一台机子时可以不写udid;执行转发方法后控制台显示:waiting for connection)
iproxy 8101 8100 f3b57faeefab54d9c01b20d43d2e7a12d59dea52
iproxy 8100 8100 c84bfbfe8a276e620c98d0930ec2d6083b5b55d8
6:测试并发环境wda是否启动成功:
http://localhost:8100/status
http://localhost:8101/status
出现如下字符串表示成功:
{
"value" : {
"state" : "success",
"os" : {
"name" : "iOS",
"version" : "12.1.4"
},
"ios" : {
"simulatorVersion" : "12.1.4",
"ip" : "192.168.43.224"
},
"build" : {
"time" : "Mar 1 2019 15:33:41"
}
},
"sessionId" : "F33CDBBC-6853-4740-BEDF-94AD1E979E93",
"status" : 0
}
7:编写测试用例:
线程1:
//启动appium
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("platformName","ios");
capabilities.setCapability("platformVersion","12.1.4");
capabilities.setCapability("udid","f3b57faeefab54d9c01b20d43d2e7a12d59dea52");
capabilities.setCapability("deviceName","iPhone 6");
capabilities.setCapability("bundleId","net.humanbridge.mobile.HBMKarteApp");
capabilities.setCapability("xcodeSigningId","iPhone Developer");
capabilities.setCapability("xcodeOrgId","utawareru_kuon@qq.com");
capabilities.setCapability("wdaLocalPort", "8101");
driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
// 超时设置
driver.manage().timeouts().implicitlyWait(600,TimeUnit.SECONDS);
线程2:
//启动appium
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("platformName","ios");
capabilities.setCapability("platformVersion","12.1.4");
capabilities.setCapability("udid","c84bfbfe8a276e620c98d0930ec2d6083b5b55d8");
capabilities.setCapability("deviceName","iPhone");
capabilities.setCapability("bundleId","net.humanbridge.mobile.HBMKarteApp");
capabilities.setCapability("xcodeSigningId","iPhone Developer");
capabilities.setCapability("xcodeOrgId","utawareru_kuon@qq.com");
capabilities.setCapability("wdaLocalPort", "8100");
driver = new RemoteWebDriver(new URL("http://127.0.0.1:4722/wd/hub"), capabilities);
// 超时设置
driver.manage().timeouts().implicitlyWait(60,TimeUnit.SECONDS);
##################################################################################################
################################通过wifi连接多台设备并发环境搭建过程#####################################
如何使用mac监测到统一局域网下的在xcode中已经注册的手机
0:ios数据线连接mac,打开xcode
1:ios设置开机密码
2:”自己的工程“ -> windows -> Device and Simulators ,打开设备和模拟器界面
3:勾选 Connect via network
4:可以看出左侧出现一个网状的球体,这时已经可以进行真机调试了
5:拔掉数据线 ok
6:存在的问题:
无网络的局域网中,反复认证,安装。。。。[将wda重新编译试试??]
有网络的局域网中,服务起不起来。。。。。[???]