Appium 基于 Appium+Python 实现多设备并行执行 case 的原理及方法。

chunyong · 2018年03月15日 · 最后由 郑成清 回复于 2022年04月07日 · 3654 次阅读

前言:

由于近期项目的需求,需要实现同时几十台设备的 UI 自动化测试且有客户端的交互行为,为此小编也是踩过了很多坑,故在这里分享一下经验,避免小伙伴们再次踩坑。

小编环境:

  • python3.6
  • appium:1.7.1

实现原理:多设备时的 Appium Server 控制,因为 Appium Server 与设备要一一对应,所以需要启动多个 server,然后启动多个 driver 与其交互即可。

实现步骤:

  1. 开启多个 Appium Server(本文在命令行下启动,界面 UI 版也可以,多设备并行建议命令行下启动):

这里注意不同的设备需要启动不同的 port 以及 bootstrap-port,并加上设备序列号参数。

  1. 启动 driver 程序

注意以上 desired_caps 参数为必加参数,其他参数参照官方文档。这里重点说下 systemPort 参数,由于在 android7.0 及以上设备中有些控件 appium 不能识别,故加上此参数,此时 appium 会自动安装两个 apk(基于 uiautomator2.0)。

  1. 多线程启动 server 以及 driver

总结:总体来说,appium 框架相对稳定,但由于多设备并行需要启动多个 adb 端口及进程,难免会有不稳定的情况,项目中建议避免同时连接大量设备,小编此次同时连接了 15 台设备,appium 表现还是很稳定的。

附:Appium 框架原理
Appium 的加载过程
1)调用 Android adb 完成基本的系统操作
2)向 Android 上部署 bootstrap.jar
3)Bootstrap.jar Forward Android 的端口到 PC 机器上
4)Pc 上监听端口接收请求,使用 webdriver 协议
5)分析命令并通过 forward 的端口发给 bootstrap.jar
6)Bootstrap.jar 接收请求并把命令发给 uiautomator
7)Uiautomator 执行命令,android7.0 及以上基于 uiautomator2.0

最佳回复

启动多个 adb 接口,怎么启动的?systemPort 也不是 adb 接口啊

共收到 10 条回复 时间 点赞
恒温 屏蔽了此话题:疑似广告贴 03月16日 10:28

启动多个 adb 接口,怎么启动的?systemPort 也不是 adb 接口啊

cheung 回复

systemPort 是为了支持 7.0 以上的批量链接

@Lihuazhang 请开贴 谢谢

chunyong 关闭了讨论 11月22日 17:05
chunyong 重新开启了讨论 11月22日 17:05

setup 使用 unittest 时怎么传入参数??


请作者与知道的大家指导

回复

这个是个函数,线程启动后执行这个函数

github 上有代码分享吗?

我的 appium 多台设备可以启动成功,但是用例只在其中一台设备上运行,奔溃了要

Dora-zhou 回复

一个设备对应一个 appoim 服务, 一个 appium 服务要有独立的-p 、-bp 端口

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册