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

pytest模块内测试用例执行顺序反转,如何恢复默认执行顺序?

恢复pytest测试用例的默认定义顺序执行

首先得明确:pytest的默认行为确实是按照测试用例在模块/类中的定义顺序执行的,你遇到的反转情况大概率是因为环境里装了会修改执行顺序的第三方插件,比如 pytest-randomly(随机打乱顺序)或者 pytest-ordering(支持自定义排序),或是这些插件的配置导致了顺序异常。

下面是具体的解决步骤:

1. 检查并卸载干扰插件

先看看当前环境里装了哪些pytest相关插件:

pip list | grep pytest

如果看到 pytest-randomly、pytest-ordering 这类排序相关插件,直接卸载它们:

pip uninstall pytest-randomly pytest-ordering

卸载后重新运行测试,应该就能回到默认的定义顺序执行了。

2. 若需保留插件,强制使用默认顺序

如果你不想卸载插件,但希望强制按定义顺序跑测试,可以这样做:

  • 针对 pytest-randomly:运行测试时加 --no-randomly 参数禁用随机排序:
    pytest --no-randomly test_demo4.py
    
  • 针对 pytest-ordering:确保没有给测试用例加 @pytest.mark.order('last') 这类自定义排序标记,部分版本也支持用 --no-order 参数强制恢复默认顺序。

3. 用干净环境验证默认行为

要是上面的操作没解决问题,可以建一个干净的虚拟环境,只装pytest来测试:

python -m venv clean_env
source clean_env/bin/activate  # Linux/Mac 系统
# Windows 系统用:clean_env\Scripts\activate
pip install pytest

在这个干净环境里运行你的测试用例,确认是否恢复了默认顺序。如果恢复了,说明原环境里的某个插件或配置导致了顺序反转。

举个例子,你的测试代码:

def test_a():
    assert True
def test_d():
    assert True
def test_c():
    assert True

在默认pytest环境中运行,正常输出应该是:

test_demo4.py::test_a PASSED
test_demo4.py::test_d PASSED
test_demo4.py::test_c PASSED

内容的提问来源于stack exchange,提问作者Sumanth Suvarna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 15:59:08