在app自動化的過程當中,可能會須要經過自動化來作一些手機的兼容性測試,可是須要同時在多個手機啓動appandroid
一、模擬器選擇的是雷電模擬器多開器。web
二、兩臺設備都安裝淘寶多線程
三、安裝appium命令行app
須要把手機信息,就是一般咱們啓動手機的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封裝起來,其中也包括了一些讀取設備信息,以及獲取設備的端口號和設備信息ui
# 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)
用例仍是用的之前的那個用例,而後直接進行經過設備的方式進行啓動appiumspa
# 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)
這裏雖然用到了多線程,可是仍是上一個用例結束,纔會去執行下一臺機器。命令行
注:這裏代碼只上傳了部分代碼,完整代碼能夠去前面定位封裝中進行查看。線程
這裏是安靜啓動多設備的方法,若是有更好的方法,能夠下方留言,共同交流code