最近在研究接口自动化的框架,好的测试报告在整个测试框架起到相当重要的部分。终于被我发现一个超好用的报告框架,不只报告美观,并且方便CI集成。
就是它,就是它:Allure Test Report!!!html
先上一张报告效果图:
python
python 3.5
pytest 3.3.3
pytest-allure-adaptor 1.7.9chrome
安装Python依赖库:
pip3 install pytest
pip3 install pytest-allure-adaptor浏览器
安装 Command Tool:
brew tap qatools/formulas
brew install allure-commandline框架
官方参考文档:https://pypi.org/project/pytest-allure-adaptor/函数
一、pytest命令基础上加--alluredir,生成xml报告。测试
pytest -s -q --alluredir [xml_report_path] //[xml_report_path]根据本身须要定义文件夹,做者定义为:/report/xml
用例执行完成以后会在[xml_report_path]目录下生成了一堆xml的report文件,固然这不是咱们最终想要的美观报告。3d
二、须要使用 Command Tool 来生成咱们须要的美观报告。code
allure generate [xml_report_path] -o [html_report_path] //[html_report_path]根据本身须要定义文件夹,做者定义为:/report/html
打开 index.html,以前写的 case 报告就会呈如今你面前orm
注⚠️:直接用chrome浏览器打开报告,报告可能会是空白页面。
解决办法:
一、在pycharm中右击index.html选择打开方式Open in Browser就能够了。
二、使用Firefox直接打开index.html。
Feature: 标注主要功能模块
Story: 标注Features功能模块下的分支功能
Severity: 标注测试用例的重要级别
Step: 标注测试用例的重要步骤
Issue和TestCase: 标注Issue、Case,可加入URL
# -*- coding: utf-8 -*- # @Time : 2018/8/17 上午10:10 # @Author : WangJuan # @File : test_case.py import allure import pytest @allure.feature('test_module_01') def test_case_01(): """ 用例描述:Test case 01 """ assert 0 @allure.feature('test_module_02') def test_case_02(): """ 用例描述:Test case 02 """ assert 0 == 0 if __name__ == '__main__': pytest.main(['-s', '-q', '--alluredir', './report/xml'])
添加feature,Report展现见下图。
# -*- coding: utf-8 -*- # @Time : 2018/8/17 上午10:10 # @Author : WangJuan # @File : test_case.py import allure import pytest @allure.feature('test_module_01') @allure.story('test_story_01') def test_case_01(): """ 用例描述:Test case 01 """ assert 0 @allure.feature('test_module_01') @allure.story('test_story_02') def test_case_02(): """ 用例描述:Test case 02 """ assert 0 == 0 if __name__ == '__main__': pytest.main(['-s', '-q', '--alluredir', './report/xml'])
添加story,Report展现见下图。
# -*- coding: utf-8 -*- # @Time : 2018/8/17 上午10:10 # @Author : WangJuan # @File : test_case.py import allure import pytest @allure.feature('test_module_01') @allure.story('test_story_01') #test_case_01为用例title def test_case_01(): """ 用例描述:这是用例描述,Test case 01,描述本人 """ #注释为用例描述 assert 0 if __name__ == '__main__': pytest.main(['-s', '-q', '--alluredir', './report/xml'])
添加用例标题和用例描述,Report展现见下图。
Allure中对严重级别的定义:
一、 Blocker级别:中断缺陷(客户端程序无响应,没法执行下一步操做)
二、 Critical级别:临界缺陷( 功能点缺失)
三、 Normal级别:普通缺陷(数值计算错误)
四、 Minor级别:次要缺陷(界面错误与UI需求不符)
五、 Trivial级别:轻微缺陷(必输项无提示,或者提示不规范)
# -*- coding: utf-8 -*- # @Time : 2018/8/17 上午10:10 # @Author : WangJuan # @File : test_case.py import allure import pytest @allure.feature('test_module_01') @allure.story('test_story_01') @allure.severity('blocker') def test_case_01(): """ 用例描述:Test case 01 """ assert 0 @allure.feature('test_module_01') @allure.story('test_story_01') @allure.severity('critical') def test_case_02(): """ 用例描述:Test case 02 """ assert 0 == 0 @allure.feature('test_module_01') @allure.story('test_story_02') @allure.severity('normal') def test_case_03(): """ 用例描述:Test case 03 """ assert 0 @allure.feature('test_module_01') @allure.story('test_story_02') @allure.severity('minor') def test_case_04(): """ 用例描述:Test case 04 """ assert 0 == 0 if __name__ == '__main__': pytest.main(['-s', '-q', '--alluredir', './report/xml'])
添加Severity,Report展现见下图。
# -*- coding: utf-8 -*- # @Time : 2018/8/17 上午10:10 # @Author : WangJuan # @File : test_case.py import allure import pytest @allure.step("字符串相加:{0},{1}") # 测试步骤,可经过format机制自动获取函数参数 def str_add(str1, str2): if not isinstance(str1, str): return "%s is not a string" % str1 if not isinstance(str2, str): return "%s is not a string" % str2 return str1 + str2 @allure.feature('test_module_01') @allure.story('test_story_01') @allure.severity('blocker') def test_case(): str1 = 'hello' str2 = 'world' assert str_add(str1, str2) == 'helloworld' if __name__ == '__main__': pytest.main(['-s', '-q', '--alluredir', './report/xml'])
添加Step,Report展现见下图。
# -*- coding: utf-8 -*- # @Time : 2018/8/17 上午10:10 # @Author : WangJuan # @File : test_case.py import allure import pytest @allure.step("字符串相加:{0},{1}") # 测试步骤,可经过format机制自动获取函数参数 def str_add(str1, str2): print('hello') if not isinstance(str1, str): return "%s is not a string" % str1 if not isinstance(str2, str): return "%s is not a string" % str2 return str1 + str2 @allure.feature('test_module_01') @allure.story('test_story_01') @allure.severity('blocker') @allure.issue("http://www.baidu.com") @allure.testcase("http://www.testlink.com") def test_case(): str1 = 'hello' str2 = 'world' assert str_add(str1, str2) == 'helloworld' if __name__ == '__main__': pytest.main(['-s', '-q', '--alluredir', './report/xml'])
添加Issue和TestCase,Report展现见下图。
file = open('../test.png', 'rb').read() allure.attach('test_img', file, allure.attach_type.PNG)
在报告中增长附件:
allure.attach(’arg1’,’arg2’,’arg3’):
arg1
:是在报告中显示的附件名称
arg2
:表示添加附件的内容
arg3
:表示添加的类型(支持:HTML,JPG,PNG,JSON,OTHER,TEXTXML
)
添加attach参数,Report展现见下图。
此外,Allure还支持Jenkins Plugin,后面我会专门写一篇博文介绍,感兴趣的话请关注个人我的简书。
以上,对你有帮助的话,点赞吧❤️~~