不是多个设备,是一台服务器连接多个手机
pytest 主进程进行调度,然后子进程在各个手机上执行具体的用例(虽然官方文档说是支持子进程在不同的服务器上)
可以参考下这篇https://www.cnblogs.com/poloyy/p/12694861.html
我上面说了 windows 下进程只有 1,调试的话要么用 linux 要么 mac
pytest_xdist 如果你是只是要在某台服务器上运行的话,那就直接修改源文件
如果要移植,那就仿照源码写个新插件
理论上通过 conftest.py 进行复写应该也是可以的
主要的修改点是分发逻辑,源文件是在 “python 安装路径\Lib\site-packages\xdist\scheduler"目录下,里面有初始的几种分发逻辑
手机 webview 内核版本和 android 版本一样,很割裂,匹配版本一直是一个很蛋疼的问题
appium 早先是根据手机上三个特定包名"com.google.android.webview"、"com.android.webview"、"com.android.chrome"的版本号来获取内核版本。这个办法对于国外的手机基本上没有啥问题,但是国产系统有些设备会变更包名、不返回版本号等等,导致获取不到内核版本。appium 就默认使用本地最新的 chromedriver(假如说已经配置了 chromedriverChromeMappingFile 参数),自然就匹配失败。
后来 appium 引入 CDP( Chrome Devtools Protocol) 进行内核版本获取,无视你包名和其他乱七八糟的问题,只要你还是用 chrome 内核就能拿到版本号,从而解决了匹配的问题
如果是 svg 画布是能定位到元素的,但是 canvas 是一整个渲染出来的,基本上只能用图像相关的方法
driver 初始化的时候加个参数 nativeWebScreenshot 并设置为 true,用来解决截图问题
分辨率的话,这个取决于设备的实际分辨率,设备是多大截图就是多大
我这边的做法是 pytest+pytest-xdist 二次开发实现
大致思路是参考 pytest_xdist 原本的几种用例分发逻辑自己新实现一种,用来支持 appium 的上下文关联用例和公共用例
原本的用例分发逻辑最小单位是每个 test_函数,修改之后的最小分发单位是单个 py 文件或者可以按你自己具体使用场景改成按模块,这样可以一定程度上保证上下文关联。
然后再单独处理公共部分就行了
对了 需要注意的是 pytest_xdist 在 windows 下进程只有 1