在app自动化的过程中,可能会需要通过自动化来做一些手机的兼容性测试,但是需要同时在多个手机启动app
环境搭建
1、模拟器选择的是雷电模拟器多开器。
2、两台设备都安装淘宝
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_list def 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_list def get_commad(self): '''执行appium启动''' self.dos_list = self.get_dos() for i in self.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 driver if __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)
这里虽然用到了多线程,但是还是上一个用例结束,才会去执行下一台机器。
注:这里代码只上传了部分代码,完整代码可以去前面定位封装中进行查看。
这里是安静启动多设备的方法,如果有更好的方法,可以下方留言,共同交流