appium---多線程啟動app(多台設備啟動app)


  在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)

這里雖然用到了多線程,但是還是上一個用例結束,才會去執行下一台機器。

 

注:這里代碼只上傳了部分代碼,完整代碼可以去前面定位封裝中進行查看。

 

這里是安靜啟動多設備的方法,如果有更好的方法,可以下方留言,共同交流


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM