上一篇簡單的介紹了如何通過多線程進行啟動app,但是后面發現了一個問題,就是app操作必須要等到一台結束后,下一台才能進行任務,那么有沒有辦法讓他們同時運行呢?這個時候我們可以了解下多進程。跳轉門:appium---多線程啟動app(多台設備啟動app)
進程和線程的區別
線程:計算機的執行單位以線程為單位。計算機的最小可執行是線程。。線程是可執行的基本單位,是可被調度的基本單位。線程不可以自己獨立擁有資源。線程的執行,必須依賴於所屬進程中的資源。。
進程:進程是資源分配的基本單位,進程中必須至少應該有一個線程
多進程啟動app
繼續上一篇文章的內容,多進程啟動app,在以前的代碼基礎上進行修改線程部分
通過把啟動appium的方法通過多進程的方法進行啟動。
def main(self): '''多進程啟動''' multi_list = [] for i in range(2): appium_server = multiprocessing.Process(target=self.get_commad) multi_list.append(appium_server) for j in multi_list: j.start() for j in multi_list: j.join()
測試用例
上面通過多進程的方法進行了實現了同事啟動appium,但是如果想要繼續啟動webdriver服務,這里安靜選擇了多線程啟動。
# coding:utf-8 from pages.login_page import LoginPage import time import os import threading import multiprocessing 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() dev = Server().get_driver() t1 = threading.Thread(target=server.main) t1.start() time.sleep(10) aa = [] for i in dev: devices = server.android_start(i) t2 = threading.Thread(target=x.login,args=(devices,)) aa.append(t2) for j in aa: j.start()
這里有安靜執行的結果,動圖有點長。
安靜可能對線程和進程不是很懂的理解,然后寫出來這么low的代碼,希望有哪位大神看到了,多多指點,共同學習~