Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说allure 报告,希望能够帮助你!!!。
一、简介
二、下载安装
三、报告生成
四、环境配置
五、Python 使用 allure 方法
官方文档:https://docs.qameta.io/allure/
1、linux 下载安装
2、windows 下载安装
下载地址
下载后解压到安装目录,配置环境变量
查看安装版本:allure --version
1、结合pytest框架生成 xml格式的报告数据
python -m pytest --alluredir=[allure的xml目录]
2、将xml报告数据转换成html格式
allure generate --clean [allure的xml目录] -o [allure的html目录]
3、打开报告-默认浏览器
allure open <directory-with-report>
4、清理报告
使用 allure report clean 命令。
---------方式一-------------
1、在报告生成前创建 environment.properties 环境配置文件
2、environment.properties 文件内配置环境属性
Browser=Chrome
Browser.Version=63.0
Stand=Production
3、将 环境配置文件 environment.properties 移动到报告目录下以后 生成报告即可
-------方式二--------
1、在报告生成前创建 environment.xml 环境配置文件
2、environment.xml 文件内配置环境属性
<environment>
<parameter>
<key>Browser</key>
<value>Chrome</value>
</parameter>
<parameter>
<key>Browser.Version</key>
<value>63.0</value>
</parameter>
<parameter>
<key>Stand</key>
<value>Production</value>
</parameter>
</environment>
3、将环境配置文件environment.xml 移动到报告目录下以后 生成报告即可
1、安装 allure-pytest 库
pip install allure-pytest
2、在测试完成后查看报告 此命令将在默认浏览器中显示您生成的报告。
allure serve /tmp/my_allure_results
3、用例描述 在用例方法内使用"""用例描述"""
import pytest
def test_success():
"""this test succeeds"""
assert True
4、标记预期失败的方法 @pytest.mark.xfail(condition=lambda: True, reason='this test is expecting failure')
@pytest.mark.xfail(condition=lambda: True, reason='this test is expecting failure')
def test_xfail_expected_failure():
"""this test is an xfail that will be marked as expected failure"""
assert False
5、条件标记
@pytest.mark.skipif('2 + 2 != 5', reason='This test is skipped by a triggered condition in @pytest.mark.skipif')
def test_skip_by_triggered_condition():
pass
6、参数化
import allure
import pytest
@allure.step
def simple_step(step_param1, step_param2 = None):
pass
@pytest.mark.parametrize('param1', [True, False], ids=['id explaining value 1', 'id explaining value 2'])
def test_parameterize_with_id(param1):
simple_step(param1)
@pytest.mark.parametrize('param1', [True, False])
@pytest.mark.parametrize('param2', ['value 1', 'value 2'])
def test_parametrize_with_two_parameters(param1, param2):
simple_step(param1, param2)
@pytest.mark.parametrize('param1', [True], ids=['boolean parameter id'])
@pytest.mark.parametrize('param2', ['value 1', 'value 2'])
@pytest.mark.parametrize('param3', [1])
def test_parameterize_with_uneven_value_sets(param1, param2, param3):
simple_step(param1, param3)
simple_step(param2)
7、步骤描述
import allure
@allure.step('Step with placeholders in the title, positional: "{0}", keyword: "{key}"')
def step_with_title_placeholders(arg1, key=None):
pass
def test_steps_with_placeholders():
step_with_title_placeholders(1, key='something')
step_with_title_placeholders(2)
step_with_title_placeholders(3, 'anything')
8、夹具步骤描述 使用conftest.py
模块中定义的夹具进行测试的示例(即使未直接导入,Pytest也会解析此类夹具)
# conftest.py
import allure
import pytest
@allure.step('step in conftest.py')
def conftest_step():
pass
@pytest.fixture
def fixture_with_conftest_step():
conftest_step()
# test case file
import allure
from .steps import imported_step
@allure.step
def passing_step():
pass
def test_with_step_in_fixture_from_conftest(fixture_with_conftest_step):
passing_step()
9、添加附件
allure.attach(body, name, attachment_type, extension)
:
body
-要写入文件的原始内容。
name
-带有文件名的字符串
attachment_type
-allure.attachment_type
值之一
extension
-提供的-将用作创建文件的扩展名。
10、添加附件方法二
allure.attach.file(source, name, attachment_type, extension)
:
source
-包含文件路径的字符串。
name
-带有文件名的字符串
attachment_type
-allure.attachment_type
值之一
extension
-提供的-将用作创建文件的扩展名。
import allure
import pytest
@pytest.fixture
def attach_file_in_module_scope_fixture_with_finalizer(request):
allure.attach('A text attacment in module scope fixture', 'blah blah blah', allure.attachment_type.TEXT)
def finalizer_module_scope_fixture():
allure.attach('A text attacment in module scope finalizer', 'blah blah blah blah',
allure.attachment_type.TEXT)
request.addfinalizer(finalizer_module_scope_fixture)
def test_with_attacments_in_fixture_and_finalizer(attach_file_in_module_scope_finalizer):
pass
def test_multiple_attachments():
allure.attach.file('./data/totally_open_source_kitten.png', attachment_type=allure.attachment_type.PNG)
allure.attach('<head></head><body> a page </body>', 'Attach with HTML type', allure.attachment_type.HTML)
11、用例描述
@allure.description
提供描述字符串的装饰器,也可以用于@allure.description_html
提供一些HTML,以在测试用例的“描述”部分中呈现
12、标题
import allure
import pytest
@allure.title("This test has a custom title")
def test_with_a_title():
assert 2 + 2 == 4
13、链接
import allure
TEST_CASE_LINK = 'https://github.com/qameta/allure-integrations/issues/8#issuecomment-268313637'
@allure.link('https://www.youtube.com/watch?v=4YYzUTYZRMU')
def test_with_link():
pass
@allure.link('https://www.youtube.com/watch?v=Su5p2TqZxKU', name='Click me')
def test_with_named_link():
pass
@allure.issue('140', 'Pytest-flaky test retries shows like test steps')
def test_with_issue_link():
pass
@allure.testcase(TEST_CASE_LINK, 'Test case title')
def test_with_testcase_link():
pass
14、失败重试
使用插件 pip install pytest-rerunfailures
pytest --reruns 5 --reruns-delay 1 # 使用pytest 命令行 指定失败重试次数 可选重试延迟时间 秒
15、BDD标记
@allure.feature (修饰类)
和@allure.story(修饰方法)
用于根据特定于项目的功能/故事细分来标记测试
要标记某些功能或故事属于史诗,请使用以epic_
前缀开头的名称
import allure
def test_without_any_annotations_that_wont_be_executed():
pass
@allure.story('epic_1')
def test_with_epic_1():
pass
@allure.story('story_1')
def test_with_story_1():
pass
@allure.story('story_2')
def test_with_story_2():
pass
@allure.feature('feature_2')
@allure.story('story_2')
def test_with_story_2_and_feature_2():
pass
可以使用以下命令行选项来指定不同的测试集,以执行传递逗号分隔值列表的操作:
--allure-epics
--allure-features
--allure-stories
17、严重性标记
使用@allure.severity
装饰器。它以allure.severity_level
枚举值作为参数
通过将--allure-severities
命令行选项与逗号分隔的严重性级别结合使用,将仅运行具有相应严重性的测试
pytest tests.py --allure-severities normal,critical
import allure
def test_with_no_severity_label():
pass
@allure.severity(allure.severity_level.TRIVIAL)
def test_with_trivial_severity():
pass
@allure.severity(allure.severity_level.NORMAL)
def test_with_normal_severity():
pass
@allure.severity(allure.severity_level.NORMAL)
class TestClassWithNormalSeverity(object):
def test_inside_the_normal_severity_test_class(self):
pass
@allure.severity(allure.severity_level.CRITICAL)
def test_inside_the_normal_severity_test_class_with_overriding_critical_severity(self):
pass
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章