appium-多執行緒啟動app(多臺裝置啟動app)
阿新 • • 發佈:2021-06-10
在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)
這裡雖然用到了多執行緒,但是還是上一個用例結束,才會去執行下一臺機器。
注:這裡程式碼只上傳了部分程式碼,完整程式碼可以去前面定位封裝中進行檢視。