三、pytest测试用例执行顺序自定义 pytest-ordering

# -*- coding: utf-8 -*-
# @Time    : 2023/6/27 10:05
# @Author  : yanfa
# @user   : yanfa 
# @File    : test_pytest_for_ordering.py
# @remark: 自定义用例执行顺序

""""""
import pytest

"""一、pytest常用插件
1、pip install pytest-ordering 控制用例执行顺序
2、pip install pytest-xdist 分布式并发执行测试用例
3、pip install pytest-dependency 控制用例的依赖关系
4、pip install pytest-rerunfailures 失败重试
5、pip install pytest-assume 多重校验
6、pip install pytest-random-order 用例随机执行
7、pip install pytest-html 测试报告
"""

"""二、pytest执行顺序
场景:
对于集成测试,经常会有上下文依赖关系的测试用例。
比如10个步骤,拆成10条case,这时候能知道到底执行到哪步报错。,
而用例默认执行顺序是自上而下,需要控制执行顺序

解决:
可以通过setup/teardown/fixture来解决,也可以使用对应插件。

安装:pip install pytest-ordering (仓库地址https://github.com/ftobia/pytest-ordering)

用法:
    @pytest.mark.first 对应0,不推荐这种写法
    @pytest.mark.last 对应-1,不推荐这种写法
    @pytest.mark.run(order=0) 对应第一个,推荐这种写法
    @pytest.mark.run(order=2) 对应第三个,推荐这种写法

注意:
    1、多个插件装饰器(>2)的时候,有可能会发生冲突
    2、order支持英文/正整数/负整数,执行优先级:0>较小的正数>较大的正数>无标记>较小的负数>较大的负数
    orders_map = {
    'first': 0,
    'second': 1,
    'third': 2,
    'fourth': 3,
    'fifth': 4,
    'sixth': 5,
    'seventh': 6,
    'eighth': 7,
    'last': -1,
    'second_to_last': -2,
    'third_to_last': -3,
    'fourth_to_last': -4,
    'fifth_to_last': -5,
    'sixth_to_last': -6,
    'seventh_to_last': -7,
    'eighth_to_last': -8,
}
"""
#例子 执行顺序0->2->4->无标记->-4->-2 (0>较小的正数>较大的正数>无标记>较小的负数>较大的负数)
@pytest.mark.run(order=4)
def test_demo1():
    print("4")

@pytest.mark.run(order=2)
def test_demo2():
    print("2")

@pytest.mark.run(order=0)
def test_demo3():
    print("0")

def test_demo4():
    print("无标记")

@pytest.mark.run(order=-4)
def test_demo5():
    print("-4")

@pytest.mark.run(order=-2)
def test_demo6():
    print("-2")