lsekfe 发表于 2023-5-26 13:11:32

Appium如何连接多台设备分享

我们在做app自动化的时候,若要考虑兼容性问题,需要跑几台设备,要是一台一台的跑比较耗时,因此需要考虑使用多线程来同时操作多台设备。
  1.我们拿两台设备来模拟操作下,使用:adb devices查看连接状况,获取到设备名称。
http://www.51testing.com/attachments/2023/02/15326880_202302011328591tQwk.png
   2.获取需要操作app的包名和页面名称。(前提该设备已经打开了app)
http://www.51testing.com/attachments/2023/02/15326880_202302011329021l5jL.png
  3.设置初始配置信息。
  from appium import webdriver
  import threading
  # 设备一
  def run_01():
      desired = {
        "platformName": "Android",# 手机系统
        "platformVersion": "7.1.2",# 手机系统版本
        "deviceName": '127.0.0.1:62001',# 连接的设备(adb devices)
        "automationName": "UiAutomator2",
        "appPackage": "",# app包名
        "appActivity": "",# app的启动页面
        "autoGrantPermissions": "true",# 默认允许app获取相关权限
        "noReset": True# 保留登录模式
      }
      driver_01 = webdriver.Remote(command_executor="http://127.0.0.1:4723/wd/hub", desired_capabilities=desired)
      # driver(driver_01)
  # 设备二
  def run_02():
      desired = {
        "platformName": "Android",# 手机系统
        "platformVersion": "11",# 手机系统版本
        "deviceName": '90bf8faf',# 连接的设备(adb devices)
        "automationName": "UiAutomator2",# 自动化测试框架 (1.4以上的appium不用写)
        "appPackage": "",# app包名
        "appActivity": "",# app的启动页面
        "autoGrantPermissions": "true",# 默认允许app获取相关权限
        "noReset": True# 保留登录模式
      }
      driver_02 = webdriver.Remote(command_executor="http://127.0.0.1:4720/wd/hub", desired_capabilities=desired)
      # driver(driver_02)


  不同的设备启动配置端口号是不一样的,我这里一个是4723,一个是4720。
  4.打开页面后操作元素,这里只简单的关闭页面。
  def driver(drivers):# 元素操作方法
      time.sleep(5)
      drivers.quit()


  5.使用多线程运行多台设备
  if __name__ == '__main__':
      threading.Thread(target=run_01).start()
      threading.Thread(target=run_02).start()


  6.启动appium服务
  启动指令:appium --allow-cors -p 端口号 -U 设备名称。
http://www.51testing.com/attachments/2023/02/15326880_202302011329051pIgU.png
   我这边是两台设备,因此需要启动两个服务,启动完之后就可以运行main函数了。
  7.以上实例是将配置信息写在了代码中,若是有十几二十几台设备的话,这种写法有点麻烦,我们可以将配置信息的产生封装在json文件中使用时用load()方法去取参数即可。
  1)创建一个json文件存放配置信息。
  [{
        "url": "http://127.0.0.1:4723/wd/hub",
        "desired": {
                  "platformName": "Android",
                  "platformVersion": "7.1.2",
                  "deviceName": "127.0.0.1:62001",
                  "automationName": "UiAutomator2",
                  "appPackage": "",
                  "appActivity": "",
                  "autoGrantPermissions": "true",
                  "noReset": true}
      }, {
        "url": "http://127.0.0.1:4720/wd/hub",
        "desired":{
                  "platformName": "Android",
                  "platformVersion": "11",
                  "deviceName": "90bf8faf",
                  "automationName": "UiAutomator2",
                  "appPackage": "",
                  "appActivity": "",
                  "autoGrantPermissions": "true",
                  "noReset": true}
      }]


  2)读取配置信息,这里直接贴完整代码了。
  def test_run(url, desired):
      driver_02 = webdriver.Remote(command_executor=url, desired_capabilities=desired)
      driver(driver_02)
  def driver(drivers):# 元素操作方法
      time.sleep(5)
      drivers.quit()
  if __name__ == '__main__':
      with open("./appium.json", mode="r", encoding="utf-8") as f:
        data = list(json.load(f))
      for i in range(0, len(data)):
        a = threading.Thread(target=test_run, args=(data["url"], data["desired"]))
        a.start()



xiaolu520 发表于 2023-5-26 14:41:14

谢谢老师
页: [1]
查看完整版本: Appium如何连接多台设备分享