pytest的执行用例顺序
时间: 2023-09-13 07:07:44 浏览: 88
pytest默认的用例执行顺序是以文件名ASCII码顺序执行。如果需要改变执行顺序,可以使用pytest.mark.run(order=num)或pytest_collection_modifyitems函数进行控制。具体方法如下:
1. 在测试用例函数上方加上装饰器@pytest.mark.run(order=num),num为数字,表示执行顺序。例如:
```
import pytest
@pytest.mark.run(order=1)
def test_a():
assert True
@pytest.mark.run(order=2)
def test_b():
assert True
```
2. 在conftest.py文件中添加pytest_collection_modifyitems函数,通过修改item列表的顺序来控制用例执行顺序。例如:
```
def pytest_collection_modifyitems(items):
items.reverse()
```
以上两种方法可以单独使用,也可以一起使用。注意,使用pytest.mark.run(order=num)方式时,num不能重复;使用pytest_collection_modifyitems函数时,需要以列表的形式返回修改后的items。
相关问题
pytest用例执行顺序
pytest执行用例的顺序是根据pytest框架的规则来确定的。pytest会按照以下顺序执行用例:
1. 根据指定的命令行参数或配置文件,pytest会搜索并收集所有符合条件的测试用例文件。
2. pytest会按照文件名的字母顺序对测试用例文件进行排序。
3. 对于每个测试用例文件,pytest会按照以下规则执行其中的测试用例:
- pytest会按照测试用例函数名的字母顺序执行测试用例。
- 如果测试用例函数有装饰器(如@pytest.mark.parametrize),pytest会根据装饰器的参数生成多个测试用例实例,并按照字母顺序执行这些实例。
- pytest会按照测试用例函数定义的顺序执行fixture函数(如果有)。
- 如果测试用例函数有依赖其他fixture函数,pytest会按照依赖关系先后执行这些fixture函数。
- pytest会在每个测试用例函数执行前后执行fixture函数(如果有)。
- pytest会在每个测试用例函数执行前后执行模块级别的fixture函数(如果有)。
4. pytest会在整个测试过程中记录并显示每个测试用例的执行结果。
如何让pytest测试用例依次执行?
在Pytest中,如果你想让测试用例按照特定顺序执行,可以利用`fixtures`和`fixture ordering`功能。`fixtures`允许你在每个测试函数之前设置一些共享状态,而`conftest.py`文件或`setup_function()`装饰器可以控制它们的执行顺序。
1. **设置fixture顺序**:你可以通过在`conftest.py`文件中定义`fixture`并指定`scope='function'`来保证它们按顺序执行,因为每个函数级fixture都会在当前函数开始前运行,然后在该函数结束后清除:
```python
import pytest
@pytest.fixture(scope="function", autouse=True)
def setup_fixture(request):
# 设置初始状态...
def teardown():
# 清理操作...
request.addfinalizer(teardown)
@pytest.mark.order("first") # 指定fixture的执行顺序
def test_one(setup_fixture):
# 测试用例...
@pytest.mark.order("last")
def test_two(setup_fixture):
# 测试用例...
```
2. **标记有序执行**:如果你只想让某些测试按特定顺序执行,可以在`test_`函数前添加`@pytest.mark.order('xxx')`,其中`xxx`是一个字符串,表示与其他标记的相对位置,如"first"、"last"等。
3. **使用session fixture**:如果你需要在整个测试套件中保持某个固定的状态,可以使用`session`级别的fixture,它会在所有测试之前运行一次:
```python
@pytest.fixture(scope="session")
def global_setup():
# 初始化全局资源...
def test_cases(global_setup):
# 紧随其后的测试用例...
```
阅读全文