背景:现在有一个用例,需要在不同手机上执行,进行兼容性测试。因为测试用例名一样,最后一次执行的日志信息,会把之前的执行的信息进行覆盖。如果需要保留同一个用例的多次执行结果怎么办?小白一只,求教。
比如:
A、B 手机都执行 test 这个用例,allure 生成的日志里只会显示 B 的日志,A 的日志会被覆盖。但该场景中,期望能够获得 A、B 两个手机的执行日志
先在 A 机执行,再在 B 机执行
嗯,谢谢回答。但是场景就是多台手机并行执行,而且我理解如果执行同一个用例,即使在不同的手机上先后执行,日志也会被覆盖掉吧
可以考虑用 pytest 的 parametise ,把多台手机作为不同的参数传进去,这样就是一条用例会根据手机的数量执行多次,报告里也会正常记录
用 jenkins 试试
简单模拟了楼主说的情况的用例
Allue 有个功能是显示历史记录和重试次数
我上面的用例在总览中可以看到最后一次,在重试次数可以看到前 2 次。
如果停止此次测试,不要删除以前的记录,则在重试中会包含第一次执行的 3 次和结果和这次执行的前 2 次结果
这应该符合楼主的预期吧
同一个测试环境的多个执行节点执行同一个用例,测试结果以最后一次执行结果为准,会覆盖掉之前所有别的节点的执行结果,一份测试报告中同一个测试用例的执行结果必须唯一。这是分布式测试的设计机制。
对于题主的问题,只能分别在 A、B 机执行所有的测试用例,也就是将测试环境分开 (时间上可以同时),并得到两份测试报告,一份显示在 A 机的测试结果,另一份显示在 B 机的测试结果,以此达到兼容性测试的目的。
同求解决方案,暂时没有好的想法,不过有大佬建议使用 link 对应多个报告
可以用多进程,parametrize 只传一次参数
pytest.mark.parametrize('device', [now_device])
def test(device):
assert 8 >= 8
请问下这个问题最后怎么解决的 @YY
遇到了类似的场景,搜索了一圈没得到答案。
研究了下发现之所以会覆盖是因为【文件名 + 方法名 + 用例传参】以某种算法组合完后生成一个相同的 name,就会被认为是同一条用例前后执行了两次,后一次会被认为是前一次的 retry,也就是所谓的覆盖。
解决方式:想法使两次生成的 name 不同就可以了,比如加一个 fixture 让两次执行传入不同的参数。
用 pytest_runtest_protocol 修改了方法名也不行,allure 报告里还是最后一次执行内容
顶一下