allure简介
Allure Framework是一个灵活的轻量级多语言测试报告工具。貌似是目前最漂亮的一个报告工具
python版本及必要库或工具
python 3.7
pytest 4.3.1
allure-pytest 2.6.1 (注意:这里不要使用pytest-allure-adaptor,踩过坑。使用pytest-allure-adaptor时因为一些兼容问题发现只有pytest3.7.0 才可以与alllure2.0匹配。但pytest3.7.0有不少bug)
command tool 工具 #用于生成美观报告
brew tap qatools/formulas
brew install allure-commandline
Features
1.title case标题
可以自定义用例标题,标题默认为函数名.
@allure.title
# -*- coding: utf-8 -*- # @Time : 2019/3/12 11:46 # @Author : zzt import allure import pytest @allure.title("用例标题0") def test_0(): pass @allure.title("用例标题1") def test_1(): pass def test_2(): pass
执行效果:
2. 说明
可以添加测试的详细说明,以便根据需要为报告阅读器提供尽可能多的上下文。
两种方式:@allure.description 提供描述字符串的装饰器
@allure.description_html 提供一些HTML在测试用例的描述部分 (待研究)
# -*- coding: utf-8 -*- # @Time : 2019/3/12 11:46 # @Author : zzt import allure import pytest @allure.title("用例标题0") @allure.description("这里是对test_0用例的一些详细说明") def test_0(): pass @allure.title("用例标题1") def test_1(): pass @allure.title("用例标题2") def test_2(): pass
3. 标签
这个标签非常好用
@allure.feature 分组第一层
@allure.story 分组第二层
@allure.severity 标记严重级别
用法一:通过@allure.feature @allure.story来标记case 可以使得case在报告里显示更有层次感
# -*- coding: utf-8 -*- # @Time : 2019/3/12 11:46 # @Author : zzt import allure import pytest @allure.feature('这里是一级标签') class TestAllure(): @allure.title("用例标题0") @allure.description("这里是对test_0用例的一些详细说明") @allure.story("这里是第一个二级标签") def test_0(self): pass @allure.title("用例标题1") @allure.story("这里是第一个二级标签") def test_1(self): pass @allure.title("用例标题2") @allure.story("这里是第二个二级标签") def test_2(self): pass
运行结果如下:
用法二:@allure.story @allure.feature 还可以用来指定执行的case集合
1 --allure-features
2 --allure-stories
3 --allure-epics (待研究)
# -*- coding: utf-8 -*- # @Time : 2019/3/12 11:46 # @Author : zzt import allure import pytest @allure.feature('这里是一级标签') class TestAllure(): @allure.title("用例标题0") @allure.description("这里是对test_0用例的一些详细说明") @allure.story("这里是第一个二级标签") def test_0(self): pass @allure.title("用例标题1") @allure.story("这里是第二个二级标签") def test_1(self): pass @allure.title("用例标题2") @allure.story("这里是第三个二级标签") def test_2(self): pass
执行命令 pytest test_1.py --allure-stories "这里是第二个二级标签", "这里是第三个二级标签" #
用法三:使用@allure.severity装饰器, 按严重性级别来标记case 这里等于给每个case定义一个严重级别 在Graphs页面查看分布情况。当然也可以指定执行的case集合 语法为 --allure.-severities XX,XX
# -*- coding: utf-8 -*- # @Time : 2019/3/12 11:46 # @Author : zzt import allure import pytest @allure.feature('这里是一级标签') class TestAllure(): @allure.title("用例标题0") @allure.description("这里是对test_0用例的一些详细说明") @allure.story("这里是第一个二级标签") @allure.severity(allure.severity_level.CRITICAL) def test_0(self): pass @allure.title("用例标题1") @allure.story("这里是第二个二级标签") @allure.severity(allure.severity_level.BLOCKER) def test_1(self): pass @allure.title("用例标题2") @allure.story("这里是第三个二级标签") @allure.severity(allure.severity_level.NORMAL) def test_2(self): pass
执行结果如下:
4. step 步骤 为报告中对应case添加一些的描述,以提供更详细的操作步骤
用法:@allure.step()
@allure.step(‘这里是操作步骤的描述: 获取参数一:“{0}”,获取参数二: “{1}” ’)
来装饰对应case
# -*- coding: utf-8 -*- # @Time : 2019/3/12 11:46 # @Author : zzt import allure import pytest @allure.feature('这里是一级标签') class TestAllure(): @allure.title("用例标题0") @allure.description("这里是对test_0用例的一些详细说明") @allure.story("这里是第一个二级标签") @allure.severity(allure.severity_level.CRITICAL) @allure.step("这里是步骤说明一") def test_0(self): pass @allure.title("用例标题1") @allure.story("这里是第二个二级标签") @allure.severity(allure.severity_level.BLOCKER) @allure.step("这里是步骤说明二") def test_1(self): pass @allure.step('这里是操作步骤打印:name: "{0}", age: "{age}"') def step_with_title(self, name, age=10): pass @allure.title("用例标题2") @allure.story("这里是第三个二级标签") @allure.severity(allure.severity_level.NORMAL) def test_2(self): self.step_with_title('张三') self.step_with_title('李四', 20) self.step_with_title('王五', age=30)
执行结果如下:
5. 参数化
可以将case所需参数展示在报告中,方便问题追踪
# -*- coding: utf-8 -*- # @Time : 2019/3/12 11:46 # @Author : zzt import allure import pytest @allure.feature('这里是一级标签') class TestAllure(): @allure.title("用例标题0") @allure.description("这里是对test_0用例的一些详细说明") @allure.story("这里是第一个二级标签") @allure.severity(allure.severity_level.CRITICAL) @allure.step("这里是步骤说明一") @pytest.mark.parametrize('param1, param2', [(1, 10), (2, 20)]) def test_0(self, param1, param2): print(param1) @allure.title("用例标题1") @allure.story("这里是第二个二级标签") @allure.severity(allure.severity_level.BLOCKER) @allure.step("这里是步骤说明二") @pytest.mark.parametrize('param1', ['value 1', 'value 2']) @pytest.mark.parametrize('param2', [True], ids=["这是一个有意思的操作"]) @pytest.mark.parametrize('param3', [1]) def test_1(self, param1, param2, param3): pass @allure.step('这里是操作步骤打印:name: "{0}", age: "{age}"') def step_with_title(self, name, age=10): pass @allure.title("用例标题2") @allure.story("这里是第三个二级标签") @allure.severity(allure.severity_level.NORMAL) def test_2(self): self.step_with_title('张三') self.step_with_title('李四', 20) self.step_with_title('王五', age=30)
6 附件
报告可以展示许多不同类型的附件,用来补充测试,步骤等信息
allure.attach(body, name, attachment_type, extension)
body
- 要写入文件的原始内容。
name
- 包含文件名的字符串
attachment_type
- 其中一个allure.attachment_type
值
extension
- 提供的将用作创建文件的扩展名
或者 allure.attach.file(source, name, attachment_type, extension)
source
- 包含文件路径的字符串。
# -*- coding: utf-8 -*- # @Time : 2019/3/12 11:46 # @Author : zzt import allure import pytest @allure.feature('这里是一级标签') class TestAllure(): @allure.title("用例标题0") @allure.story("这里是第一个二级标签") @pytest.mark.parametrize('param', ['青铜', '白银', '黄金']) def test_0(self, param): allure.attach('附件内容是: '+param, '我是附件名', allure.attachment_type.TEXT) @allure.title("用例标题1") @allure.story("这里是第二个二级标签") def test_1(self): allure.attach.file(r'E:\Myproject\pytest-allure\test\test_1.jpg', '我是附件截图的名字', attachment_type=allure.attachment_type.JPG) @allure.title("用例标题2") @allure.story("这里是第三个二级标签") @allure.severity(allure.severity_level.NORMAL) def test_2(self): pass
执行结果如下:
7. 链接
@allure.link @allure.issue @allure.testcase
# -*- coding: utf-8 -*- # @Time : 2019/3/12 11:46 # @Author : zzt import allure import pytest @allure.feature('这里是一级标签') class TestAllure(): @allure.title("用例标题0") @allure.story("这里是第一个二级标签") @pytest.mark.parametrize('param', ['青铜', '白银', '黄金']) def test_0(self, param): allure.attach('附件内容是: '+param, '我是附件名', allure.attachment_type.TEXT) @allure.title("用例标题1") @allure.story("这里是第二个二级标签") def test_1(self): allure.attach.file(r'E:\Myproject\pytest-allure\test\test_1.jpg', '我是附件截图的名字', attachment_type=allure.attachment_type.JPG) @allure.title("用例标题2") @allure.story("这里是第三个二级标签") @allure.issue('http://baidu.com', name='点击我跳转百度') @allure.testcase('http://bug.com/user-login-Lw==.html', name='点击我跳转禅道') def test_2(self): pass
执行结果如下: