在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)
這里雖然用到了多線程,但是還是上一個用例結束,才會去執行下一台機器。
注:這里代碼只上傳了部分代碼,完整代碼可以去前面定位封裝中進行查看。
這里是安靜啟動多設備的方法,如果有更好的方法,可以下方留言,共同交流