Pytest测试文件执行顺序异常:如何正确指定执行顺序?
按指定顺序执行Pytest测试文件的正确方法
问题根源
pytest默认会按文件名的字母顺序执行测试文件,所以你在命令里指定的test_transTypes.py、test_agentBank.py、test_bankacct.py,会被自动排序为test_agentBank.py→test_bankacct.py→test_transTypes.py执行,这就是实际顺序和命令不符的原因。
可行解决方法
方法1:使用pytest-order插件(推荐,维护活跃)
你之前用到的@pytest.mark.run属于旧插件的语法,现在更推荐使用维护中的pytest-order插件:
- 先安装插件:
pip install pytest-order - 在测试文件的类或函数上添加顺序标记:
比如在test_transTypes.py中:
在import pytest @pytest.mark.order(1) class TestTransTypes: def test_trans_type_case(self): # 测试逻辑 passtest_agentBank.py中:
在import pytest @pytest.mark.order(2) class TestAgentBank: def test_agent_bank_case(self): # 测试逻辑 passtest_bankacct.py中:import pytest @pytest.mark.order(3) class TestBankAcct: def test_bank_acct_case(self): # 测试逻辑 pass - 执行测试时,插件会严格按照标记的
order值从小到大执行测试文件/用例。
方法2:自定义测试集合顺序(无插件依赖)
如果不想引入第三方插件,可以通过pytest的钩子函数自定义执行顺序:
- 在项目根目录创建
conftest.py文件,写入以下代码:def pytest_collection_modifyitems(items): # 定义你期望的文件执行顺序 target_order = [ "test_transTypes.py", "test_agentBank.py", "test_bankacct.py" ] # 按照目标顺序重新排序测试用例 items.sort(key=lambda item: target_order.index(item.fspath.basename)) - 执行pytest命令时,无论是否指定文件路径,都会按照
target_order里的顺序执行测试。
方法3:旧版pytest-ordering插件(不推荐)
如果你坚持想用之前的@pytest.mark.run标记,需要安装停止维护的pytest-ordering插件:
- 安装命令:
pip install pytest-ordering - 标记语法和你之前的写法一致,不会再出现未知标记警告,但由于插件已停止更新,不建议在新项目中使用。
注意事项
- 依赖顺序的UI测试要做好状态隔离,避免前一个测试的残留状态影响后续测试结果。
- 如果在AWS Batch中执行,要确保所需插件(如pytest-order)已包含在执行环境的依赖清单(比如requirements.txt)中,避免运行时缺失。
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

