前文中讲了如何集成allure测试报告,但生成的测试报告比较简单
可以看到无论是主页还是具体用例页面,内容都比较少,无法看到更具体的内容,这里我们丰富一下测试报告
1.添加allure相关的装饰器
装饰器 | 说明 |
---|---|
@allure.epic() | 场景范围,直译为史诗,就是一个比较大的场景范围 |
@allure.feature() | 特性,epic往下一个层级的场景范围 |
@allure.story() | 故事,feature下一层级的场景范围 |
@allure.title() | 用例标题,使用这个装饰器可以在生成测试报告时重命名用例的标题 |
@allure.description() | 测试用例的描述 |
@allure.tag() | 测试用例的tag |
@allure.severity() | 测试用例的等级,枚举值有BLOCKER、CRITICAL、NORMAL、MINOR、TRIVIAL |
@allure.label() | 用例label |
@allure.link() | 添加链接 |
@allure.issue() | 用例的issue |
@allure.testcase() | 对应的用例链接 |
@allure.step() | 用例里面具体的步骤 |
@allure.attach() | 用例关联的附件 |
我们可以在一个类里面添加这些装饰器查看下效果
这是报告页面,可以看到整个类和方法的层级按照我们写的feature和story划分,用例标题也被重写,用例内容也有description,link和step
我们看到test_2的报告,上面在test_2中写了一个assert错误,测试报告中就能显示是在测试步骤2有报错,而且我们可以看到@testcase和@link的内容都添加到Links模块中去了
添加这些装饰器,可以让我们的测试报告更加丰富,定位问题更迅速,维护用例更方便,我们可以根据需要添加不同的装饰器
注:这里可以继续添加日志和附件(例如失败截图),这个在后续的接口和UI自动化中会具体体现
2.增加trends分析
目前生成测试报告都是把前一次的数据删除生成新的,导致无历史数据保留,有时我们需要分析下自动化通过率的走势,这个时候就要保存历史数据了。具体操作如下:
1.首先生成第一次报告
2.执行第二次任务,重新生成报告数据,注意是数据,不是报告
即tmp目录下的数据重新生成,这时上方的allure-report还是上次生成的报告,里面有一个history的文件夹
3.将这个文件夹拷贝到tmp文件夹下面
4.重新生成测试报告
allure generate report\tmp -c -o report\allure-report
allure open report\allure-report
可以看到生成的报告已有历史数据,生成了趋势图
上面这些步骤也可以直接写在一个bat脚本里,我们执行自动化工程时,直接调用这个脚本就能生成测试报告了,就不用再手动执行这么多命令(linux里可以写个shell脚本)。
这里我简单写了个脚本,可以自动把历史数据复制过去,并生成测试报告。
bat脚本附在这里,有需要可添加或修改使用
@echo off
echo start to generate report
IF EXIST ./report/allure-report/history (
echo history exist
IF EXIST ./report/tmp (
echo report data folder exist
xcopy .\report\allure-report\history .\report\tmp\history /s /e /i /y
echo generate report
allure generate report\tmp -c -o report\allure-report
) ELSE (
echo report data folder not exist, please pytest first
pause
)
) ELSE (
echo report history not exist, start to generate report
allure generate report\tmp -c -o report\allure-report
)
重新打开测试报告,可以看到趋势图增加了一次数据
3.其它
我们还可以添加一些其他信息,比如说环境信息,这个就结合具体的业务环境进行添加了,后续我们再补充。。。
问题记录
1.集成allure后,执行整个工程,会报找不到testcase方法中的url参数的报错,具体报错如下
file E:\project\autotest1.venv\Lib\site-packages\allure_commons_allure.py, line 85
def testcase(url, name=None):
E fixture ‘url’ not found
available fixtures: cache, capfd, capfdbinary, caplog, capsys, capsysbinary, doctest_namespace, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory
use ‘pytest --fixtures [testpath]’ for help on them.
原因:默认情况下pytest会执行所有以test开头的测试方法,而testcase方法又被引入到测试文件中,所以pytest将testcase方法也识别成测试方法,这时候方法中的url参数就被识别成fixture方法了(这个我们在前面介绍过fixture方法的使用),这样就会因为找不到url方法而报错,这个如何解决呢,就是我们定义一下测试方法的命名规范
在pytest.ini中定义测试方法是以test_开头的,这样就匹配不到testcase方法了。
当然还有一种方法,就是按需导入,我不导入testcase的方法就好了。
有时为了书写方便,我一般都是全量导入。