Appium Appium 并发和主从远程控制

xdlhy · June 25, 2015 · Last by 王尼玛 replied at June 25, 2015 · 2170 hits
本帖已被设为精华帖!

最近有人在群里问并发的问题,我就把我的经验写下来供大家参考,我的这些方法其实都是从社区里的帖子找到的,没有什么新鲜的,但是有群友说还是分享一下更好;
主要参考如下帖子和回复
Appium 主从远程控制执行

连接 2 个设备测试的时候每次都只运行一个设备?

Appium Android ——利用 TestNG 并行执行用例

并发时要启动多个服务,所以端口号要不同,可以通过GUI和命令行两种方式启动多个服务并修改端口号
GUI只要点击多次就可以启动多个服务,
如下第一、第二步选取一种就可以了

1.GUI更改各种端口号

(1)更改服务端的ip和端口号,把ip改为服务端的ip,不要用127.0.0.1,要不然远程的时候,客户端连不上

(2)更改其他端口号,需要哪个就要更改哪个

2.命令行更改端口号

我的Appium是装的GUI的,但是也可以通过命令行调。
需要把Appium的相关路径加到环境变量里,路径如下
C:\Appium\node_modules.bin

命令类似如下:
appium -p 4492 -bp 2251 --selendroid-port 65222

具体见如下网址:
https://github.com/appium/appium/blob/master/docs/cn/appium-setup/parallel_tests.cn.md

3.代码的修改

(1)Android的配置里记得加上desired_caps['udid'] 这项,内容与deviceNme一致,通过adb devices查询到的,这样能保证找到手机

(2)http://192.168.11.11:4723/wd/hub

这项配置要改成你要连接的服务端的IP和端口号

我的各种配置都是通过读配置文件来完成配置的,大家可以参考

def setUp(self):
desired_caps = {}
desired_caps['platformName'] = global_list.ini_file.get(global_list.mobile_phone,'OS_type') #测试手机的系统类型
desired_caps['platformVersion'] = global_list.ini_file.get(global_list.mobile_phone,'OS_version') #该手机系统的版本号
desired_caps['deviceName'] = global_list.ini_file.get(global_list.mobile_phone,'deviceName') #该手机的deviceName,Android请用adb devices查询
desired_caps['app'] = global_list.ini_file.get(global_list.mobile_phone,'app') #本地apk或者ipa的绝对路径,如果iPhone上安装了app,则为bundle ID
desired_caps['udid'] = global_list.ini_file.get(global_list.mobile_phone,'udid') #iphoneudid,通过iTunes查找
appium_server_ip = global_list.ini_file.get(global_list.mobile_phone,'appium_server_ip')
appium_server_port = global_list.ini_file.get(global_list.mobile_phone,'appium_server_port')
if global_list.os_type == 'Android':
desired_caps['automationName'] = global_list.ini_file.get('android_config','automationName') #选择测试引擎
desired_caps['appPackage'] = global_list.ini_file.get('android_config','appPackage') #app的包名,可以咨询开发
desired_caps['appActivity'] = global_list.ini_file.get('android_config','appActivity') #咨询开发
self.driver = webdriver.Remote('http://%s:%s/wd/hub' % (appium_server_ip,appium_server_port), desired_caps)
elif global_list.os_type == 'IOS':
self.driver = webdriver.Remote(
command_executor='http://%s:%s/wd/hub' % (appium_server_ip,appium_server_port),
desired_capabilities = desired_caps
)

配置文件如下,用的ini文件

[all_need]

[email]
mail_from =
mail_to=
smtpserver =
username =
password =

#capabilities
[android_config]
appPackage = com.ifengxy.ifengxycredit.ui
appActivity = .login.LoginActivity
automationName = Selendroid

#capabilities
[ios_config]

#Android app中各种查找元素用id
[android_id]
phone_number_edt = phone_number_edt
password_edt = password_edt
login_btn = login_btn

#IOS app中各种查找元素用id
[ios_id]
phone_number_edt = phone_number_edt
password_edt = password_edt
login_btn = login_btn

#手机的配置
[iphone6]
appium_server_ip = 192.168.11.11
appium_server_port = 4723
OS_type = IOS
OS_version = 8.3
deviceName =
udid = d66916b4ae8728a55f2e09e65bff579d43892080
app =

[HUAWEI_MATE7]
appium_server_ip = 192.168.11.11
appium_server_port = 4723
OS_type = Android
OS_version = 4.4.2
deviceName = Y9K0214A14004193
udid = Y9K0214A14004193
app = D:\example\test\Credit_enter00003.apk

[MEIZU_MX4]
appium_server_ip = 192.168.11.11
appium_server_port = 4723
OS_type = Android
OS_version = 4.4.2
deviceName = 750ABLDYL593
udid = 750ABLDYL593
app = D:\example\test\Credit_enter00003.apk

通过以上配置,在不同的用例里连接不同的端口号就可以启动并发了
------------------------------------------------------------------分割线--------------------------------------------------------分割线-----------------------------------------

4.主从远程控制

(1)在第一步已经把服务端上配置的ip由127.0.0.1改成真正的ip了,如果不改在客户端是连接不上的
在客户端的机器上如果能打开这个连接就表示可以了http://192.168.11.11:4723/wd/hub (记得把IP和端口号改掉)
显示如下文字就是正确的

(2)在客户端的那台机器上安装相应语言的Appium客户端
(3)手机要连接到服务端这台机器上
(4)在客户端上启动测试用例,连接想要的ip和端口
Android:self.driver = webdriver.Remote('http://%s:%s/wd/hub' % (appium_server_ip,appium_server_port), desired_caps)

共收到 7 条回复 时间 点赞

好,markdown再修正修正,比如url这种

学习了~感谢分享。

desired_caps['platformName'] = global_list.ini_file.get(global_list.mobile_phone,'OS_type')

怎么拿到的OS_type?你才能在后面去判断是否是android或者ISO。udid??

#3楼 @wangnima 我把手机作为一个参数传进来,如 ‘HUAWEI_MATE7’,然后到配置文件中读取

#4楼 @xdlhy 非常感谢分享这篇文章,看完后我能够实现指定设备同时执行用例,参数和配置文件还需要再研究下。这样配置应该也可以实现多个设备同时执行一个用例吧

这一路摸爬滚打过来的 深感不容易 能分享算是不错了 天下不会掉馅饼 实打实的还是靠自己!@xdlhy 加我

xdlhy #7 · June 26, 2015 作者

#6楼 @doria 加你什么?

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up