appium+python自動化60-windows上同時啟動多個appium服務,讓多個android機器並行運行

來源:互聯網
上載者:User

標籤:netstat   version   參數配置   並且   code   檔案配置   key   包名   print   

前言

做android自動化的時候,啟動一個appium服務,只能匹配一個手機去自動化執行。有時候想同一套代碼,可以在不同的手機上執行,測下app在不同手機上相容性。
這就需要啟動多個appium服務了,並且android裝置和appium要一一對應才行。

啟動多個手機

1.這裡以夜神模擬器和雷電模擬器為例,先啟動這2個裝置

2.adb devices查看裝置名稱,多個裝置會顯示多行資料

啟動多個appium服務

1.啟動appium服務,可以用命令列模式,在cmd裡面啟動,可以參考上一篇 appium命令列參數

比如第一個appium服務,可以指定一個連接埠4730,然後指定一個裝置名稱【雷電模擬器】,也就是-U參數(adb devices可以查看)

appium -a 127.0.0.1 -p 4730 -U emulator-5554 --no-reset

2.第二個appium 服務指定裝置名稱【夜神模擬器】

appium -a 127.0.0.1 -p 4740 -U 127.0.0.1:62001 --no-reset

yaml管理配置

1.運行不同手機時候,desired_caps的參數配置肯定也是需要多個的,如何高效的管理多個desired_caps配置呢?
這裡我用yaml檔案去管理,更方便查看

desired_caps = {                'platformName': 'Android',   # 手機是Android還是ios                'deviceName': 'emulator-5554',                'platformVersion': '5.1.1',  # android版本號碼                'noReset': True,                # apk包名  # aapt工具查看                'appPackage': 'com.taobao.taobao',                # apk的launcherActivity                'appActivity': 'com.taobao.tao.welcome.Welcome'                }

2.yaml檔案配置如下:

- desc: 裝置名稱_雷電,appium啟動服務連接埠號碼_4723  port: 4730  desired_caps:    platformName: Android    deviceName: emulator-5554    appPackage: com.taobao.taobao    noReset:  !!bool True    udid: emulator-5554    appActivity: com.taobao.tao.welcome.Welcome- desc: 裝置名稱_夜神,appium啟動服務連接埠號碼_4724  port: 4740  desired_caps:    platformName: Android    deviceName: 127.0.0.1:62001    appPackage: com.taobao.taobao    noReset:  !!bool True    udid: 127.0.0.1:62001    appActivity: com.taobao.tao.welcome.Welcome
讀yaml配置

1.讀出來多個配置是list類型,desc是裝置的描述,可以通過描述來找到對應的裝置名稱,如:雷電
2.返回desired_caps配置資訊和port連接埠號碼,後面代碼會用到

# coding=utf-8from appium import webdriverimport timeimport yamlimport osdef get_desired_caps(devicesName='雷電'):    '''    從yaml讀取desired_caps配置資訊    參數name:裝置名稱,如:夜神/雷電    :return: desired_caps字典格式 和port    '''    curpath = os.path.dirname(os.path.realpath(__file__))    yamlpath = os.path.join(curpath, "taobao.yaml")    print("配置地址:%s" % yamlpath)    f = open(yamlpath, "r", encoding="utf-8")    a = f.read()    f.close()    # 把yaml檔案轉字典    d = yaml.load(a)    for i in d:        if devicesName in i["desc"]:            print(i)            # 啟動服務            start_appium(port=i['port'])            return (i['desired_caps'], i['port'])

運行app代碼
def run_app(devicesName):    # 配置參數    desired_caps = get_desired_caps(devicesName)    print(desired_caps)    # 執行代碼    driver = webdriver.Remote('http://127.0.0.1:%s/wd/hub' % desired_caps[1], desired_caps[0])    time.sleep(10)    # 點註冊登陸    driver.find_element_by_xpath("//*[@text='註冊/登入']").click()    time.sleep(6)    # content-desc    driver.find_element_by_xpath("//*[@text='請輸入手機號碼']").send_keys("15001234000")    driver.find_element_by_xpath("//*[@text='請輸入驗證碼']").send_keys("1111")
python啟動appium服務

1.如果嫌手工連接埠cmd視窗啟動服務麻煩,可以用python去啟動appium服務,釋放你的雙手
先判斷服務啟了沒,沒啟動的話就執行cmd指令啟動

# coding=utf-8from appium import webdriverimport timeimport yamlimport osfrom tomorrow import threads# 上海-悠悠 QQ交流群:330467341def start_appium(port=4723, udid=""):    a = os.popen('netstat -ano | findstr "%s" '% port)    time.sleep(2)    t1 = a.read()    if "LISTENING" in t1:        print("appium服務已經啟動:%s" % t1)        # s = t1.split(" ")        # s1 = [i for i in s if i != '']        # pip = s1[-1].replace("\n", "")    else:        # 啟動appium服務        # appium -a 127.0.0.1 -p 4740 -U emulator-5554 127.0.0.1:62001 --no-reset        os.system("appium -a 127.0.0.1 -p %s -U %s --no-reset" % (port, udid))
多線程運行

1.多線程用一個很簡單的tomorrow架構就行

# coding=utf-8from appium import webdriverimport timeimport yamlimport osfrom tomorrow import threads# 上海-悠悠 QQ交流群:330467341def start_appium(port=4723, udid=""):    a = os.popen('netstat -ano | findstr "%s" '% port)    time.sleep(2)    t1 = a.read()    if "LISTENING" in t1:        print("appium服務已經啟動:%s" % t1)        # s = t1.split(" ")        # s1 = [i for i in s if i != '']        # pip = s1[-1].replace("\n", "")    else:        # 啟動appium服務        # appium -a 127.0.0.1 -p 4740 -U emulator-5554 127.0.0.1:62001 --no-reset        os.system("appium -a 127.0.0.1 -p %s -U %s --no-reset" % (port, udid))def get_desired_caps(devicesName='雷電'):    '''    從yaml讀取desired_caps配置資訊    參數name:裝置名稱,如:夜神/雷電    :return: desired_caps字典格式    '''    curpath = os.path.dirname(os.path.realpath(__file__))    yamlpath = os.path.join(curpath, "taobao.yaml")    print("配置地址:%s" % yamlpath)    f = open(yamlpath, "r", encoding="utf-8")    a = f.read()    f.close()    # 把yaml檔案轉字典    d = yaml.load(a)    for i in d:        if devicesName in i["desc"]:            print(i)            # 啟動服務            devicesName = i['desired_caps']['udid']            print(devicesName)            start_appium(port=i['port'], udid=devicesName)            return (i['desired_caps'], i['port'])@threads(2)def run_app(devicesName):    # 配置參數    desired_caps = get_desired_caps(devicesName)    print(desired_caps)    # 執行代碼    driver = webdriver.Remote('http://127.0.0.1:%s/wd/hub' % desired_caps[1], desired_caps[0])    time.sleep(10)    # 點註冊登陸    driver.find_element_by_xpath("//*[@text='註冊/登入']").click()    time.sleep(6)    # content-desc    driver.find_element_by_xpath("//*[@text='請輸入手機號碼']").send_keys("15001234000")    driver.find_element_by_xpath("//*[@text='請輸入驗證碼']").send_keys("1111")    # driver.find_element_by_accessibility_id("協助").click()if __name__ == "__main__":    # 上海-悠悠 QQ交流群:330467341    devices = ["夜神", "雷電"]    for i in devices:        run_app(devicesName=i)

appium+python自動化60-windows上同時啟動多個appium服務,讓多個android機器並行運行

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.