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

清水 · 2024年01月13日 · 最后由 清水 回复于 2024年01月22日 · 5160 次阅读

请教各位路过的大佬,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 下

共收到 12 条回复 时间 点赞

在代码里面去控制例如@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 生成的日志就可以了


加这段代码就行了

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

赵测试 回复

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

11楼 已删除
清水 #12 · 2024年01月19日 Author
微凉 回复

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

清水 #13 · 2024年01月22日 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}'
然后问题就解决了

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