• Appium 并行測試多個設備的方法

    發表于:2024-2-06 09:45

    字體: | 上一篇 | 下一篇 | 我要投稿

     作者:kinder-balabala    來源:CSDN

      一、前置說明
      在自動化測試中,經常需要驗證多臺設備的兼容性,Appium可以用同一套測試運例并行測試多個設備,以達到驗證兼容性的目的。
      解決思路:
      1. 查找已連接的所有設備;
      2. 為每臺設備啟動相應的Appium Server;
      3. 使用多線程執行 pytest 命令;
      二、核心代碼
      # test_multi_devices.py
      import pytest
      from driver.appium.manager import port_manager
      @pytest.fixture(scope="session")
      def devicename(request):
          return request.config.getoption("--devicename")
      @pytest.fixture
      def driver(devicename):
          from driver.appium.driver import WebDriver
          
          server_port = port_manager.get_server_port(devicename)
          trans_port = port_manager.get_trans_port(devicename)
          # appium 多設備并行注意事項:
          # 1. server_port: 必須傳值,它是 appium server 的監聽端口號,在啟動多個 appium server的情況下,用于指定當前driver與哪個 server 進行通信;
          # 2. uuid: 必須傳值,它是每個設備的唯一標識,用于appium server區分與哪臺設備在通信,確保測試執行不會混淆;
          # 3. systemPort: 必須傳值,是UiAutomator2 Server的6790端口綁定至本地的端口號,該端口用于在本地監聽并接收從 UiAutomator2 Server 發出的請求;
          appium_server_url = f'http://localhost:{server_port}'
          capabilities = {
              "platformName": "Android",
              "automationName": "uiautomator2",
              "deviceName": devicename,
              "udid": devicename,
              "app": "D:\\resources\\ApiDemos-debug.apk",
              "systemPort": trans_port
          }
          driver = WebDriver(command_executor=appium_server_url, capabilities=capabilities)
          yield driver
          driver.quit()
      def test_runner(driver):
          driver.smart_find_element(by='text', value='App').click()
          driver.smart_find_element(by='text', value='Notification').click()
          driver.smart_find_element(by='text', value='NotifyWithText').click()
          driver.smart_find_element(by='text', value='SHOW SHORT NOTIFICATION').click()
          element = driver.get_toast('Short notification')
          assert element.text == 'Short notification'
      # main.py
      import threading
      import pytest
      from driver.appium.manager import MobileDevicesManager, AppiumServersManager, device_manager
      from driver.appium.manager import port_manager
      PY_RUNNER = 'tests/test_multi_devices.py'
      def start_server_and_run_pytest(devicename):
          """
          啟動Appium Server,并且執行pytest
          """
          port = port_manager.get_server_port(devicename)
          # 為每臺設備啟動一個appium server
          server_manager = AppiumServersManager(port)
          server_manager.start_server()
          # 執行pytest
          pytest.main([PY_RUNNER, '-s', '-v', '--devicename', devicename])
      def run_multi_devices():
          """
          多設備并行測試
          """
          devices = device_manager.get_connected_devices()
          threads = []
          for devicename in devices:
              thread = threading.Thread(target=start_server_and_run_pytest, args=(devicename,))
              threads.append(thread)
              # 啟動線程
              thread.start()
          # 等待所有線程完成
          for thread in threads:
              thread.join()
      if __name__ == '__main__':
          import logging.config
          logging.config.fileConfig('conf/logging.conf')
          # 執行并發測試
          run_multi_devices()
      三、Demo驗證
      當前有3臺設備連接,執行代碼,會啟動3個appium server:
      3臺設備會同時執行測試(有1臺為手機,不方便截圖):
      四、appium 多設備并行注意事項
          # 1. server_port: 必須傳值,它是 appium server 的監聽端口號,在啟動多個 appium server的情況下,用于指定當前driver與哪個 server 進行通信;
          # 2. uuid: 必須傳值,它是每個設備的唯一標識,用于appium server區分與哪臺設備在通信,確保測試執行不會混淆;
          # 3. systemPort: 必須傳值,是UiAutomator2 Server的6790端口綁定至本地的端口號,該端口用于在本地監聽并接收從 UiAutomator2 Server 發出的請求;
      appium_server_url = f'http://localhost:{server_port}'
          capabilities = {
              "platformName": "Android",
              "automationName": "uiautomator2",
              "deviceName": devicename,
              "udid": devicename,
              "app": "D:\\resources\\ApiDemos-debug.apk",
              "systemPort": trans_port
          }
          driver = WebDriver(command_executor=appium_server_url, capabilities=capabilities)
      本文內容不用于商業目的,如涉及知識產權問題,請權利人聯系51Testing小編(021-64471599-8017),我們將立即處理
    《2023軟件測試行業現狀調查報告》獨家發布~

    關注51Testing

    聯系我們

    快捷面板 站點地圖 聯系我們 廣告服務 關于我們 站長統計 發展歷程

    法律顧問:上海蘭迪律師事務所 項棋律師
    版權所有 上海博為峰軟件技術股份有限公司 Copyright©51testing.com 2003-2024
    投訴及意見反饋:webmaster@51testing.com; 業務聯系:service@51testing.com 021-64471599-8017

    滬ICP備05003035號

    滬公網安備 31010102002173號

    久久97久久97精品免视_欧洲国产伦久久久久久_91麻豆精品国产自产在线观_伊人久久大香线蕉综合av