Appium 并发和主从远程控制

来源:互联网 发布:农产品网络市场 编辑:程序博客网 时间:2024/06/05 00:18

最近有人在群里问并发的问题,我就把我的经验写下来供大家参考,我的这些方法其实都是从社区里的帖子找到的,没有什么新鲜的,但是有群友说还是分享一下更好;
主要参考如下帖子和回复
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') #iphone的udid,通过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.uiappActivity = .login.LoginActivityautomationName = Selendroid#capabilities[ios_config]#Android app中各种查找元素用id[android_id]phone_number_edt = phone_number_edtpassword_edt = password_edtlogin_btn = login_btn#IOS app中各种查找元素用id[ios_id]phone_number_edt = phone_number_edtpassword_edt = password_edtlogin_btn = login_btn#手机的配置[iphone6]appium_server_ip = 192.168.11.11appium_server_port = 4723OS_type = IOSOS_version = 8.3deviceName =udid = d66916b4ae8728a55f2e09e65bff579d43892080app = [HUAWEI_MATE7]appium_server_ip = 192.168.11.11appium_server_port = 4723OS_type = AndroidOS_version = 4.4.2deviceName = Y9K0214A14004193udid = Y9K0214A14004193app = D:\example\test\Credit_enter00003.apk[MEIZU_MX4]appium_server_ip = 192.168.11.11appium_server_port = 4723OS_type = AndroidOS_version = 4.4.2deviceName = 750ABLDYL593udid = 750ABLDYL593app = 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)

0 0
原创粉丝点击