是否可以按照这样的顺序进行测试:测试A将首先进行,然后测试B进行,然后测试A将再次作为第三个进行?
技术堆栈:Python 3.8.5,pytest 6.1.0,pytest订单1.0.1
下面是使用的代码:
import logging
import pytest
@pytest.mark.order(2)
def test_a():
logging.info('test_a')
pass
@pytest.mark.order(1)
@pytest.mark.order(3)
def test_b():
logging.info('test_b')
pass
但是测试B没有执行第三次,因为有两个 * order * 标记,所以只作为第一次执行了一次。
- 输出:**
===================测试会话开始===============
收集...收集了2个项目
test.py::test_a PASSED [ 50%]
test.py::test_b PASSED [100%]
===================== 2次在0.07秒内通过================
1条答案
按热度按时间3htmauhk1#
实际上
pytest-order
不允许添加两个order
标记。但是我为您想到了一些解决方案。你可以使用pytest_generate_tests pytest钩子来解析这个语法,只需要把它添加到你的
conftest.py
文件中。以下示例将读取所有
pytest.mark.order
标记,并对其进行参数化测试(如果提供了多个顺序标记)。它添加了名为order
的参数,该参数存储pytest.mark.order
中指定的参数。pytest test_order.py -v
输出**如您所见,所有测试都按照定义的顺序运行。
我已经更新了hook,使它与
pytest-order
的其他特性兼容。另外,我还创建了PR in pytest-order GitHub repo。