51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 301|回复: 1

Appium如何连接多台设备分享

[复制链接]
  • TA的每日心情
    擦汗
    7 小时前
  • 签到天数: 950 天

    连续签到: 1 天

    [LV.10]测试总司令

    发表于 2023-5-26 13:11:32 | 显示全部楼层 |阅读模式
    我们在做app自动化的时候,若要考虑兼容性问题,需要跑几台设备,要是一台一台的跑比较耗时,因此需要考虑使用多线程来同时操作多台设备。
      1.我们拿两台设备来模拟操作下,使用:adb devices查看连接状况,获取到设备名称。

       2.获取需要操作app的包名和页面名称。(前提该设备已经打开了app)

      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 设备名称。

       我这边是两台设备,因此需要启动两个服务,启动完之后就可以运行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()



    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-20 16:27 , Processed in 0.068069 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表