You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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):
            # 测试逻辑
            pass
    
    在test_agentBank.py中:
    import pytest
    
    @pytest.mark.order(2)
    class TestAgentBank:
        def test_agent_bank_case(self):
            # 测试逻辑
            pass
    
    在test_bankacct.py中:
    import pytest
    
    @pytest.mark.order(3)
    class TestBankAcct:
        def test_bank_acct_case(self):
            # 测试逻辑
            pass
    
  • 执行测试时,插件会严格按照标记的order值从小到大执行测试文件/用例。

方法2:自定义测试集合顺序(无插件依赖)

如果不想引入第三方插件,可以通过pytest的钩子函数自定义执行顺序:

  1. 在项目根目录创建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))
    
  2. 执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 14:17:19