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
相关产品推荐
相关产品推荐

