• appium如何连接多台设备?教程详解


    我们在做app自动化的时候,若要考虑兼容性问题,需要跑几台设备,要是一台一台的跑比较耗时,因此需要考虑使用多线程来同时操作多台设备。

    在这我为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接点击文末小卡片免费领取资料文档

    软件测试视频教程观看处:

    京东内部员工自动化测试培训课程!盲目自学真的会毁终生,27天学完,能救一个是一个...

    1.我们拿两台设备来模拟操作下,使用:adb devices查看连接状况,获取到设备名称。

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

     3.设置初始配置信息

    1. from appium import webdriver
    2. import threading
    3. # 设备一
    4. def run_01():
    5. desired = {
    6. "platformName": "Android", # 手机系统
    7. "platformVersion": "7.1.2", # 手机系统版本
    8. "deviceName": '127.0.0.1:62001', # 连接的设备(adb devices)
    9. "automationName": "UiAutomator2",
    10. "appPackage": "", # app包名
    11. "appActivity": "", # app的启动页面
    12. "autoGrantPermissions": "true", # 默认允许app获取相关权限
    13. "noReset": True # 保留登录模式
    14. }
    15. driver_01 = webdriver.Remote(command_executor="http://127.0.0.1:4723/wd/hub", desired_capabilities=desired)
    16. # driver(driver_01)
    17. # 设备二
    18. def run_02():
    19. desired = {
    20. "platformName": "Android", # 手机系统
    21. "platformVersion": "11", # 手机系统版本
    22. "deviceName": '90bf8faf', # 连接的设备(adb devices)
    23. "automationName": "UiAutomator2", # 自动化测试框架 (1.4以上的appium不用写)
    24. "appPackage": "", # app包名
    25. "appActivity": "", # app的启动页面
    26. "autoGrantPermissions": "true", # 默认允许app获取相关权限
    27. "noReset": True # 保留登录模式
    28. }
    29. driver_02 = webdriver.Remote(command_executor="http://127.0.0.1:4720/wd/hub", desired_capabilities=desired)
    30. # driver(driver_02)

    不同的设备启动配置端口号是不一样的,我这里一个是4723,一个是4720.

    4.打开页面后操作元素,这里只简单的关闭页面(具体方法可参考:https://www.cnblogs.com/lihongtaoya/p/16988855.html)

    1. def driver(drivers): # 元素操作方法
    2. time.sleep(5)
    3. drivers.quit()

    5.使用多线程运行多台设备

    1. if __name__ == '__main__':
    2. threading.Thread(target=run_01).start()
    3. threading.Thread(target=run_02).start()

    6.启动appium服务

    启动指令:appium --allow-cors -p 端口号 -U 设备名称

     我这边是两台设备,因此需要启动两个服务,启动完之后就可以运行main函数了。

    7.以上实例是将配置信息写在了代码中,若是有十几二十几台设备的话,这种写法有点麻烦,我们可以将配置信息的产生封装在json文件中使用时用load()方法去取参数即可。

    1)创建一个json文件存放配置信息

    1. [{
    2. "url": "http://127.0.0.1:4723/wd/hub",
    3. "desired": {
    4. "platformName": "Android",
    5. "platformVersion": "7.1.2",
    6. "deviceName": "127.0.0.1:62001",
    7. "automationName": "UiAutomator2",
    8. "appPackage": "",
    9. "appActivity": "",
    10. "autoGrantPermissions": "true",
    11. "noReset": true}
    12. }, {
    13. "url": "http://127.0.0.1:4720/wd/hub",
    14. "desired":{
    15. "platformName": "Android",
    16. "platformVersion": "11",
    17. "deviceName": "90bf8faf",
    18. "automationName": "UiAutomator2",
    19. "appPackage": "",
    20. "appActivity": "",
    21. "autoGrantPermissions": "true",
    22. "noReset": true}
    23. }]

    2)读取配置信息,这里直接贴完整代码了。

    1. def test_run(url, desired):
    2. driver_02 = webdriver.Remote(command_executor=url, desired_capabilities=desired)
    3. driver(driver_02)
    4. def driver(drivers): # 元素操作方法
    5. time.sleep(5)
    6. drivers.quit()
    7. if __name__ == '__main__':
    8. with open("./appium.json", mode="r", encoding="utf-8") as f:
    9. data = list(json.load(f))
    10. for i in range(0, len(data)):
    11. a = threading.Thread(target=test_run, args=(data[i]["url"], data[i]["desired"]))
    12. a.start()

    写在最后

    PS:这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近500个G。【点击文末小卡片免费领取】

    这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

     

  • 相关阅读:
    Spring Boot整合Spring Data Jpa + QueryDSL
    去掉WordPress网页图片默认链接功能
    Maven安装与配置完整教程
    数据增广:Mixup, Cutout 和 CutMix
    什么是springMVC 视图和视图解析器
    LCA 板子(最近公共祖先)
    vtk 动画入门 1 代码
    栈和队列(2)
    winform Application.Exit()不起作用的解决方法。
    TELEC认证标准是什么?
  • 原文地址:https://blog.csdn.net/HUA1211/article/details/134540695