appium---多线程启动app(多台设备启动app)

一卷旌收千骑虏,万全身出百重围。这篇文章主要讲述appium---多线程启动app(多台设备启动app)相关的知识,希望能为你提供帮助。
在app自动化的过程中,可能会需要通过自动化来做一些手机的兼容性测试,但是需要同时在多个手机启动app
环境搭建1、模拟器选择的是雷电模拟器多开器。

appium---多线程启动app(多台设备启动app)

文章图片

appium---多线程启动app(多台设备启动app)

文章图片

2、两台设备都安装淘宝
【appium---多线程启动app(多台设备启动app)】3、安装appium命令行
配置手机信息需要把手机信息,就是通常我们启动手机的desired_caps配置信息。这里安静通过yaml的方式进行配置
- devices: emulator-5554 port: 4730 desired_caps: platformName: android deviceName: emulator-5554 appPackage: com.taobao.taobao noReset:!!bool True appActivity: com.ali.user.mobile.login.ui.UserLoginActivity- devices: emulator-5556 port: 4740 desired_caps: platformName: Android deviceName: emulator-5556 appPackage: com.taobao.taobao noReset:!!bool True appActivity: com.ali.user.mobile.login.ui.UserLoginActivity automationName: uiautomator2

多线程启动appium这里和前面写的多线程进行启动,其实类型的,只是单独的把启动appium封装起来,其中也包括了一些读取设备信息,以及获取设备的端口号和设备信息
# coding:utf-8 # coding:utf-8 import time from common.dos_cmd import Dos_adb from common.read_yaml import GetYaml import os from appium import webdriver import threading path=os.path.dirname(os.getcwd()) app = os.path.join(os.path.join(path,\'config\'),\'app.yaml\') class Server(): def __init__(self): self.adb = Dos_adb() self.yaml = GetYaml(app) def get_driver(self): \'\'\'获取设备列表\'\'\' devices_list = self.adb.get_device() return devices_listdef get_dos(self): \'\'\'命令行启动appium\'\'\' result = self.yaml.get_data() dos_list = [] android_list = [] for j in result: port = j[\'port\'] devices = j[\'desired_caps\'][\'deviceName\'] android_list.append(j[\'desired_caps\']) for i in range(1): a = \'appium -p %s -U %s\' %(port,devices) dos_list.append(a) return dos_listdef get_commad(self): \'\'\'执行appium启动\'\'\' self.dos_list = self.get_dos() for iinself.dos_list: self.adb.get_adb(i)def get_android(self,devicesName): \'\'\'获取port和设备信息\'\'\' desired_caps = self.yaml.get_data() for i in desired_caps: if devicesName in i[\'devices\']: port = i[\'port\'] desired_cap = i[\'desired_caps\'] return (port,desired_cap)def main(self): \'\'\'多线程启动\'\'\' thread_list = [] for i in range(2): appium_server = threading.Thread(target=self.get_commad) thread_list.append(appium_server) for j in thread_list: j.start() time.sleep(5)def android_start(self,deviceName): \'\'\'启动webdriver\'\'\' android = self.get_android(deviceName) driver = webdriver.Remote(\'http://127.0.0.1:%s/wd/hub\' % android[0], android[1]) return driverif __name__ == \'__main__\': xx = Server() devices = xx.get_driver() print(devices) for i in devices: xx.main() time.sleep(5) xx.android_start(i)

编写测试用例用例还是用的以前的那个用例,然后直接进行通过设备的方式进行启动appium
# coding:utf-8 from pages.login_page import LoginPage import time import os from common.aa import Server path=os.path.dirname(os.getcwd()) # 获取到yaml文件路径 yaml_path = os.path.join(os.path.join(path,\'config\'),\'element.yaml\') class BaseDriver: def login(self,driver): page =LoginPage(driver) time.sleep(8) # 获取用户名元素以及输入内容 use = page.get_username_element(yaml_path) use.send_keys(\'1111\') # 获取密码元素以及输入内容 pas = page.get_password_element(yaml_path) pas.send_keys(\'22222\') # 进行点击登录 button = page.get_login_button_element(yaml_path) button.click()if __name__ == \'__main__\': x = BaseDriver() server = Server() server.main() drivers = server.get_driver() for i in drivers: driver = server.android_start(i) x.login(driver)

这里虽然用到了多线程,但是还是上一个用例结束,才会去执行下一台机器。
appium---多线程启动app(多台设备启动app)

文章图片

 
注:这里代码只上传了部分代码,完整代码可以去前面定位封装中进行查看。
 
这里是安静启动多设备的方法,如果有更好的方法,可以下方留言,共同交流

    推荐阅读