目前 Appium 的并发执行相同的测试用例可以了,但是为了缩短自动化测试的时间我们需要,不同的手机去执行不同模块的用例,这样子比如 1W 条用例分 10 台手机去跑,每台手机就只需要执行 1000 条用例。
有什么思路提供的嘛,目前的并发基于多进程 +Appium+unittest,可转 pytest。主要看哪种实现方便~
感谢!
最粗暴的方法,分成 10 组,每组对应一个设备 id。每次跑的时候,指定。
搞个队列读取所有的用例信息, 然后读取所有设备 id 多进程根据 id 起子进程,然后读队列里面的用例,组合成 pytest 命令,去执行 pytest。
平均分配相等数量用例到多台执行机会引起负载不均衡问题,也就是说,同时开始跑,这台机器累死累活跑完了,发现别的机器早已经跑完在那休息好几个小时了。因为用例数量相等不代表负载相同 (1000 个步骤少的简单用例对比 1000 个步骤多的复杂用例),另外每台执行机的执行速度也可能不同。
解决办法就是,安装插件 pytest-xdist 使 pytest 具备分布式执行能力。分布式执行能够自动做到负载均衡,具体可参考https://www.cnblogs.com/guo2733/p/10955539.html
jenkins 的 pipeline 可以控制多节点(前提是你有多节点)跑任务,但没法细到用例级别吧。
建议用 pytest ,匹配度最高,也简单(用多线程,比多节点成本低)。
UI 自动化的用例之间是需要有连续性的,你能保证分配后还具有连续性吗?
大佬,我现在想平台化,想做成用例任务在列表那种,可以多选,选择一批用例 点击 run,选多少运行多少,也是随机分配,用多进程可以实现吗,
目前接口自动化还好说,UI 自动化实现这种想法有点麻烦没思路
我这边的做法是 pytest+pytest-xdist 二次开发实现
大致思路是参考 pytest_xdist 原本的几种用例分发逻辑自己新实现一种,用来支持 appium 的上下文关联用例和公共用例
原本的用例分发逻辑最小单位是每个 test_函数,修改之后的最小分发单位是单个 py 文件或者可以按你自己具体使用场景改成按模块,这样可以一定程度上保证上下文关联。
然后再单独处理公共部分就行了
对了 需要注意的是 pytest_xdist 在 windows 下进程只有 1
Celery 这个可以不?
我在尝试用这个方法去写了,目前是在 windows 下调试的,会出现一台手机挤另一台手机的情况,是要放在 liunx 上去运行才行嘛,还有就是 pytest_xdist 的源码要去哪边改
我上面说了 windows 下进程只有 1,调试的话要么用 linux 要么 mac
pytest_xdist 如果你是只是要在某台服务器上运行的话,那就直接修改源文件
如果要移植,那就仿照源码写个新插件
理论上通过 conftest.py 进行复写应该也是可以的
主要的修改点是分发逻辑,源文件是在 “python 安装路径\Lib\site-packages\xdist\scheduler"目录下,里面有初始的几种分发逻辑
不是多个设备,是一台服务器连接多个手机
pytest 主进程进行调度,然后子进程在各个手机上执行具体的用例(虽然官方文档说是支持子进程在不同的服务器上)
可以参考下这篇https://www.cnblogs.com/poloyy/p/12694861.html
你可以看下这个博主写的,
https://www.cnblogs.com/grandlulu/p/10282201.html 基于 unittest
https://www.cnblogs.com/grandlulu/p/10331612.html 基于 pytest
我都试过了,这个博主的多进程可行
路小坏读配置那边还有起 appium 的进程我没用,可以参考这篇的来启动关闭 appium 的服务还有读取设备信息。
https://www.cnblogs.com/zhenyu1/p/12731836.html
大佬你好,请问这个问题有解决吗,还有多进程并发执行的话会不会占用太多的内存
想请问下并发是怎么实现的.我这边会报 prot 8100 端口占用问题,依次执行没问题, 设备是 iOS