Appium pytest+allure 生成测试报告,如果保留同一个测试用例的多次执行的日志信息。

YY · 2020年12月24日 · 最后由 wenziff 回复于 2024年02月06日 · 4968 次阅读

背景:现在有一个用例,需要在不同手机上执行,进行兼容性测试。因为测试用例名一样,最后一次执行的日志信息,会把之前的执行的信息进行覆盖。如果需要保留同一个用例的多次执行结果怎么办?小白一只,求教。
比如:
A、B 手机都执行 test 这个用例,allure 生成的日志里只会显示 B 的日志,A 的日志会被覆盖。但该场景中,期望能够获得 A、B 两个手机的执行日志

共收到 16 条回复 时间 点赞

先在 A 机执行,再在 B 机执行

YY #15 · 2020年12月25日 Author
Thirty-Thirty 回复

嗯,谢谢回答。但是场景就是多台手机并行执行,而且我理解如果执行同一个用例,即使在不同的手机上先后执行,日志也会被覆盖掉吧

可以考虑用 pytest 的 parametise ,把多台手机作为不同的参数传进去,这样就是一条用例会根据手机的数量执行多次,报告里也会正常记录

用 jenkins 试试

Jerry li 回复

我这里是使用同时多个浏览器,parametrize 参数化,能达到这个目标

简单模拟了楼主说的情况的用例

Allue 有个功能是显示历史记录和重试次数
我上面的用例在总览中可以看到最后一次,在重试次数可以看到前 2 次。

如果停止此次测试,不要删除以前的记录,则在重试中会包含第一次执行的 3 次和结果和这次执行的前 2 次结果

这应该符合楼主的预期吧

YY #10 · 2020年12月25日 Author
Miracle 回复

谢谢耐心解答,可能是我没有表达清楚。我其实是想在 overview 展示不同手机执行同一用例的详细日志信息。

YY #8 · 2020年12月25日 Author
Jerry li 回复

嗯嗯,谢谢,这个是可以的。但是我现在想测试手机的兼容性,所以是多手机并发。parametrize 应该是串行吧

YY #9 · 2020年12月25日 Author
MarvinWu 回复

公司内部在做持续集成,暂时没有用 jekins

YY 回复

同一个测试环境的多个执行节点执行同一个用例,测试结果以最后一次执行结果为准,会覆盖掉之前所有别的节点的执行结果,一份测试报告中同一个测试用例的执行结果必须唯一。这是分布式测试的设计机制。
对于题主的问题,只能分别在 A、B 机执行所有的测试用例,也就是将测试环境分开 (时间上可以同时),并得到两份测试报告,一份显示在 A 机的测试结果,另一份显示在 B 机的测试结果,以此达到兼容性测试的目的。

同求解决方案,暂时没有好的想法,不过有大佬建议使用 link 对应多个报告

可以用多进程,parametrize 只传一次参数

pytest.mark.parametrize('device', [now_device])
def test(device):
    assert 8 >= 8
YY #13 · 2020年12月26日 Author
Thirty-Thirty 回复

谢谢。明白了

请问下这个问题最后怎么解决的 @YY

遇到了类似的场景,搜索了一圈没得到答案。

研究了下发现之所以会覆盖是因为【文件名 + 方法名 + 用例传参】以某种算法组合完后生成一个相同的 name,就会被认为是同一条用例前后执行了两次,后一次会被认为是前一次的 retry,也就是所谓的覆盖。

解决方式:想法使两次生成的 name 不同就可以了,比如加一个 fixture 让两次执行传入不同的参数。

用 pytest_runtest_protocol 修改了方法名也不行,allure 报告里还是最后一次执行内容

顶一下

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