自动化工具 allure 报告整合方案请教

清水 · January 13, 2024 · Last by 刘定 replied at October 14, 2024 · 12899 hits

请教各位路过的大佬,pytest 多机并行(多进程模式运行)结束后,如何生成一份完整的 allure 报告,把多设备的数据在一份 allure 报告内区分开来(不是以历史记录或重试次数的形式).allure 产生的 allure-results 放到不同的目录, 再使用 allure commandline 去指定从多个目录生成 report。比如:allure generate ./myAllureReport2 ./myAllureReport1 -o ./report12。但是结果中依然只有一个,另外一个 slave 的 case 显示在了 history 中,被认为是同一条 case 重复跑了。即使我在 code 中加了@allure.suite(config.node_name) 和 allure.dynamic.title(f"{config.node_name}-{test_id}"):



该怎么设置,让两次的结果都出现,分别出现在不同的 suite 下

共收到 13 条回复 时间 点赞

在代码里面去控制例如@epic之类的注解,然后加上特定设备信息,应该可以区分出来

你的多机运行有问题吧,使用 pytest 多进程执行 只是执行 case 的机器可能是其他的机器,但是最后的日志还是生成在你执行 pytest 的那台机器上的,只会有一份日志

allure 有一些特性的标签
@allure.epic() # 项目描述,敏捷里面的概念,定义史诗,往下是 feature
@allure.feature() # 模块名称,功能点的描述,往下是 story
@allure.tag() # 用例标记,自定义内容
@allure.story() # 用户故事,用户故事(需求点),往下是 title
allure 缺陷也有无法动态的插入参数。比如@allure.epic() 或者@allure.tag() 里面是设备名称,需要提前预设好。

对 微凉 回复

我们用的是 jenkins 跑在不同的 salve 上同时运行的。

对 陈子昂 回复

我用了@allure.suite() 这个属性,但是好像没生效

对 微凉 回复

然后最后结果都回传到 master 然后再生成 report

是可以区分,但是我是想不同的 salve 即使跑相同的 case 最后回传结果生成 report 的时候也能在一个 report 上显示出来

对 清水 回复

这样的话 你需要自己在写一个脚本来整合这些日志,allure generate 这个命令的本质就是根据固定格式的 json 文件或者 xml 文件来生成 html ,如果你对顺序什么的没有要求,把你所有机器执行的结果传回 master 后放到一个文件夹下面(是把文件放在一个文件夹下面,不是文件夹),然后生成 html 就是全部的了,但是 case 的顺序可能会是随机的,如果有别的要求 就自己写脚本改造一下 pytest 生成的日志就可以了


加这段代码就行了

也可以把设备信息挂钩到用例标题上

清水 #10 · January 19, 2024 Author
对 赵测试 回复

我在测试方法上加了这个装饰器:@allure.suite(config.node_name),同时在测试方法里加了 allure.dynamic.title(f"{config.node_name}-{test_id}"),然后再不同的 slave 上运行同样的 case,结果在 jenkins 的报告中只看到了一个 slave 的结果

11Floor has deleted
清水 #12 · January 19, 2024 Author
对 微凉 回复

我回传了,把所有生成的 json 文件都放到了一个文件夹下,但是这样生成显示的只有一个 slave 的 case,另外一个 slave 的 case 可能是因为名字是一样的所以被放到了 history 下面显示。

清水 #13 · January 22, 2024 Author

新加了一个 conftest.py 文件,文件内容如下:
from server.config import config

def pytest_itemcollected(item):
"""
Modify the _nodeid attribute of the item by appending the node name from the config
to the beginning of the original nodeid.
"""
item._nodeid = f'{config.node_name}.{item.nodeid}'
然后问题就解决了

14Floor has deleted
15Floor has deleted

楼主你好,我在使用 pytest + appium + 多进程 并行测试多设备的时候,其中一个设备的 driver 高概率上报 selenium.common.exceptions.InvalidSessionIdException: Message: The session identified by 916e901e-3717-4a9a-989f-4addc325e67e is not known , 请问有什么方法解决呢?

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up。