前面課程只是啓動了單個appium服務,只能控制單臺設備。若是須要針對多臺設備測試那麼該如何處理?並且發現羣裏的小夥伴們也在時不時地在討論這個問題,想知道怎麼實現的,因而宏哥就決定寫一片這樣的文章來給小夥伴們,答答疑,解解惑。但願對各位小夥伴或者童鞋們有所幫助,能夠是大家豁然開朗。html
首先看下面兩個啓動appium服務案例。node
上面案例咱們啓動了2個不一樣的appium服務器,他們經過不一樣的端口來區分不一樣的服務;如同百米賽跑要給不一樣的運動員安排不一樣的賽道,每一個運動員也只能在本身指定的賽道進行比賽。python
1.啓動appium服務,能夠用命令行模式android
好比web
第一個appium服務,能夠指定一個端口 -p 4723,而後指定一個設備名稱 -u 【AVD模擬器】,也就是-U參數(adb devices能夠查看),-bp是指定bootstrap-port npm
(多個appium啓動連接多個android設備時須要設置不一樣的 bootstrap-port )bootstrap
appium -a 127.0.0.1 -p 4723 -bp 4726 -U ML5RRPCUWO
第二個appium 服務指定設備名稱【夜神模擬器】服務器
appium -a 127.0.0.1 -p 4724 -bp 4725 -U 127.0.0.1:62001
參數微信 |
默認值session |
含義 |
-U, --udid |
null |
鏈接物理設備的惟一設備標識符 |
-a, --address |
0.0.0.0 |
監聽的 ip 地址 |
-p, --port |
4723 |
監聽的端口 |
-bp, --bootstrap-port |
4724 |
鏈接Android設備的端口號(Android-only) |
-g, --log |
null |
將日誌輸出到指定文件 |
--no-reset |
false |
session 之間不重置應用狀態 |
--session-override |
false |
容許 session 被覆蓋 (衝突的話) |
--app-activity |
null |
打開Android應用時,啓動的 Activity(Android-only) 的名字 |
--app |
null |
本地絕對路徑_或_遠程 http URL 所指向的一個安裝包 |
更多參數請輸入命令: appium -h
首先經過以下命令找到appium的安裝路徑
where appium
1.打開 C:\Users\Shuqing\AppData\Roaming\npm\node_modules\appium\node_modules\appium-android-driver\lib 中的android-helpers.js
#註釋475行以下代碼 //await helpers.pushSettingsApp(adb); #註釋486行以下代碼 //await helpers.pushUnlock(adb);
2.打開C:\Users\Shuqing\AppData\Roaming\npm\node_modules\appium\node_modules\appium-android-driver\build\lib中的android-helpers.js
#註釋1128行下面這行代碼 //return _regeneratorRuntime.awrap(helpers.pushSettingsApp(adb)); #修改成以下: return context$1$0.abrupt('return', defaultIME); #註釋1163行下面這行代碼 //return _regeneratorRuntime.awrap(helpers.pushUnlock(adb)); #修改以下: return context$1$0.abrupt('return', defaultIME);
修改完成後重啓Appium服務便可,若是新設備沒有這個兩個守護App能夠手動安裝這兩個App到設備。
Appium Setting路徑 :
{appium安裝路徑}\node_modules\_io.appium.settings@2.4.0@io.appium.settings\app\build\outputs\apk\settings_apk-debug.apk eg: C:\Users\Shuqing\AppData\Roaming\npm\node_modules\appium\node_modules\_io.appium.settings@2.4.0@io.appium.settings\app\build\outputs\apk\settings_apk-debug.apk
Unlock app路徑:
appium安裝路徑\node_modules\_appium-unlock@2.0.0@appium-unlock\bin \unlock_apk-debug.apk eg: C:\Users\Shuqing\AppData\Roaming\npm\node_modules\appium\node_modules\_io.appium.settings@2.4.0@io.appium.settings\app\build\outputs\apk\unlock_apk-debug.apk 多設備啓動
前面咱們已經啓動了多個appium服務,那麼接下來咱們能夠基於這些服務來啓動不一樣的設備。
鏈接如下2臺設備,而後分別啓動考研幫App
設備1:127.0.0.1:62001(夜神模擬器)
設備2:emulator-5554(AVD模擬器)
1 platformName: Android 2 platformVersion: 5.1.1 3 deviceName: 127.0.0.1:62001 4 app: C:\Users\DELL\Downloads\kaoyanbang.apk 5 appPackage: com.tal.kaoyan 6 appActivity: com.tal.kaoyan.ui.activity.SplashActivity 7 noReset: False 8 unicodeKeyboard: True 9 resetKeyboard: True 10 ip: 127.0.0.1
1 # coding=utf-8 2 # 1.先設置編碼,utf-8可支持中英文,如上,通常放在第一行 3 4 # 2.註釋:包括記錄建立時間,建立人,項目名稱。 5 ''' 6 Created on 2019-9-14 7 @author: 北京-宏哥 QQ交流羣:707699217 8 Project:學習和使用appium自動化測試-併發測試 9 ''' 10 # 3.導入模塊 11 from appium import webdriver 12 13 import yaml 14 15 from time import ctime 16 17 with open('desired_caps.yaml', 'r')as file: 18 data = yaml.load(file) 19 20 devices_list = ['127.0.0.1:62001', 'emulator-5554'] 21 22 23 def appium_desire(udid, port): 24 desired_caps = {} 25 26 desired_caps['platformName'] = data['platformName'] 27 28 desired_caps['platformVersion'] = data['platformVersion'] 29 30 desired_caps['deviceName'] = data['deviceName'] 31 32 desired_caps['udid'] = udid 33 34 desired_caps['app'] = data['app'] 35 36 desired_caps['appPackage'] = data['appPackage'] 37 38 desired_caps['appActivity'] = data['appActivity'] 39 40 desired_caps['noReset'] = data['noReset'] 41 42 print('appium port: %s start run %s at %s' % (port, udid, ctime())) 43 44 driver = webdriver.Remote('http://' + str(data['ip']) + ':' + str(port) + '/wd/hub', desired_caps) 45 46 return driver 47 48 49 if __name__ == '__main__': 50 appium_desire(devices_list[0], 4723) 51 52 appium_desire(devices_list[1], 4725)
夜神模擬器
AVD模擬器
上面的案例設備啓動並非併發進行的,而是前後執行。那個設備在前邊就先執行那個,那麼如何實現2臺設備同時啓動,並啓動App呢?
同時啓動2臺設備:'emulator-5554'和'127.0.0.1:62001'並打開考研幫app
可使用Python多線程或者多進程實現。這裏咱們推薦使用多進程( multiprocessing) 緣由以下:
有興趣的小夥伴或者童鞋們能夠看一下如下的知識點:
1 # coding=utf-8 2 # 1.先設置編碼,utf-8可支持中英文,如上,通常放在第一行 3 4 # 2.註釋:包括記錄建立時間,建立人,項目名稱。 5 ''' 6 Created on 2019-9-14 7 @author: 北京-宏哥 QQ交流羣:707699217 8 Project:學習和使用appium自動化測試-併發測試 9 ''' 10 # 3.導入模塊 11 from appium import webdriver 12 13 import yaml 14 15 from time import ctime 16 17 import multiprocessing 18 19 with open('desired_caps.yaml', 'r') as file: 20 data = yaml.load(file) 21 22 devices_list = ['127.0.0.1:62001', '127.0.0.1:62025'] 23 24 25 def appium_desired(udid, port): 26 desired_caps = {} 27 28 desired_caps['platformName'] = data['platformName'] 29 30 desired_caps['platformVersion'] = data['platformVersion'] 31 32 desired_caps['deviceName'] = data['deviceName'] 33 34 desired_caps['udid'] = udid 35 36 desired_caps['app'] = data['app'] 37 38 desired_caps['appPackage'] = data['appPackage'] 39 40 desired_caps['appActivity'] = data['appActivity'] 41 42 desired_caps['noReset'] = data['noReset'] 43 44 print('appium port:%s start run %s at %s' % (port, udid, ctime())) 45 46 driver = webdriver.Remote('http://' + str(data['ip']) + ':' + str(port) + '/wd/hub', desired_caps) 47 48 driver.implicitly_wait(5) 49 50 return driver 51 52 53 # 構建desired進程租 54 55 desired_process = [] 56 57 # 加載desied進程 58 59 for i in range(len(devices_list)): 60 port = 4723 + 2 * i 61 62 desired = multiprocessing.Process(target=appium_desired, args=(devices_list[i], port)) 63 64 desired_process.append(desired) 65 66 if __name__ == '__main__': 67 68 # 啓動多設備執行測試 69 70 for desired in desired_process: 71 desired.start() 72 73 for desired in desired_process: 74 desired.join()
這個錯誤困擾了宏哥好久,不是找不到解決辦法,而是宏哥在猶豫要不要試一下下邊的所說的解決辦法呢???由於前邊的appium的環境都搭建好了,若是卸載了,安裝了低版本的node,會不會引起一系列的其餘環境不兼容的讓人頭疼的問題,等等的考慮吧!最後恰好碰到中秋節,時間充裕,宏哥痛定思痛的仍是下定決心卸載試一下,畢竟活着就是不斷地折騰的唄!最後宏哥試了一下是否能夠安裝一個高版本和低版本的node在一個系統中,你若是須要高版本的切換高版本的node,若是須要低版本的切換低版本的node,這樣這個問題就會完美解決了,有興趣的能夠看一下宏哥的這篇文章:手把手告訴你如何安裝多個版本的node(很是詳細,很是實用)。
解決方法:
是由於版本不匹配. 我裝的appium版本是1.4.16,而node版本是v10.16.0,把node卸載了,裝v6.9.4,完美解決~
node版本是v10.16.0
appium版本是1.4.16
v6.9.4下載: v6.9.4地址
您的確定就是我進步的動力。若是你感受還不錯,就請鼓勵一下吧!記得點波 推薦 哦!!!(點擊右邊的小球便可!(^__^) 嘻嘻……)
我的公衆號 微信羣 (微信羣已滿100,能夠加宏哥的微信拉你進羣,請備註:進羣)