allure2报告中添加用例支持tags标签、失败重试功能 L2

1、Allure2 报告中添加用例支持 tags 标签

Allure2 添加用例标签应用场景

  • Allure 报告支持的一些常见 Pytest 特性包括 xfail、skipif、fixture 等。测试结果会展示特定的标识在用例详情页面。

Allure2 添加用例标签-xfail、skipif

  • 用法:使用装饰器 @pytest.xfail()@pytest.skipif()
import pytest

# 当用例通过时标注为 xfail
@pytest.mark.xfail(condition=lambda: True, reason='这是一个预期失败的用例')
def test_xfail_expected_failure():
    """this test is an xfail that will be marked as expected failure"""
    assert False

# 当用例通过时标注为 xpass
@pytest.mark.xfail
def test_xfail_unexpected_pass():
    """this test is an xfail that will be marked as unexpected success"""
    assert True

# 跳过用例
@pytest.mark.skipif('2 + 2 != 5', reason='当条件触发时这个用例被跳过 @pytest.mark.skipif')
def test_skip_by_triggered_condition():
    pass

Allure2 添加用例标签-fixture(终结器)

  • 应用场景:fixture 和 finalizer 是分别在测试开始之前和测试结束之后由 Pytest 调用的实用程序函数。Allure 跟踪每个 fixture 的调用,并详细显示调用了哪些方法以及哪些参数,从而保持了调用的正确顺序。
"""
@Author: 霍格沃兹测试开发学社-西西
@Desc: 更多测试开发技术探讨,请访问:https://ceshiren.com/t/topic/15860
"""
import pytest

@pytest.fixture()

def func(request):
    print("这是一个fixture方法")

    # 定义一个终结器,teardown动作放在终结器中
    def over():
        print("session级别终结器")

    request.addfinalizer(over)


class TestClass(object):
    def test_with_scoped_finalizers(self,func):
        print("测试用例")
import pytest

@pytest.fixture()
def func1():
    print("这是fixture func1 前置动作")
    yield
    print("这是fixture func1 后置动作")
@pytest.fixture()
def func(request):
    # 前置动作 -- 相当于setup
    print("这是一个fixture方法")
    # 后置动作 -- 相当于teardown
    # 定义一个终结器,teardown动作放在终结器中
    def over():
        print("session级别终结器")
    # 添加终结器,在执行完测试用例之后会执行终结器中的内容
    request.addfinalizer(over)


class TestClass(object):
    def test_with_scoped_finalizers(self,func,func1):
        print("测试用例")


在setup中后执行的,在teardown中先执行

2、Allure2报告中支持记录失败重试功能

Allure2 失败重试功能应用场景

  • Allure 可以收集用例运行期间,重试的用例的结果,以及这段时间重试的历史记录。

Allure2 失败重试功能

  • 重试功能可以使用 pytest 相关的插件,例如 pytest-rerunfailures
  • 重试的结果信息,会展示在详情页面的”Retries” 选项卡中。
"""
@Author: 霍格沃兹测试开发学社-西西
@Desc: 更多测试开发技术探讨,请访问:https://ceshiren.com/t/topic/15860
"""
import pytest

@pytest.mark.flaky(reruns=2, reruns_delay=2)
def test_rerun2():
    assert False