VSCode本身不提供测试失败重试能力,真正起作用的是pytest及其pytest-rerunfailures插件;必须通过pytest.ini/pyproject.toml配置reruns参数或VSCode中设置python.testing.pytestArgs添加--reruns和--reruns-delay,且仅当插件显式启用时@pytest.mark.flaky才生效。

VSCode 本身不提供测试失败重试能力,真正起作用的是底层测试框架(如 pytest)及其插件,VSCode 只是调用和展示结果。直接在 VSCode 界面点击“重试”按钮无效,必须靠配置驱动。
pytest-rerunfailures 插件必须显式启用
即使已安装 pytest-rerunfailures,VSCode 的 Python 测试适配器默认不会自动启用它。不加配置时,你在测试侧边栏看到的“RERUN”按钮只是 UI 假动作,实际不会触发重试。
- 必须在
pytest.ini或pyproject.toml中声明重试策略,例如:[tool:pytest] reruns = 2 reruns_delay = 1
- 或通过 VSCode 设置强制传参:
python.testing.pytestArgs添加--reruns 2 --reruns-delay 1 - 注意:VSCode 的“运行失败测试”快捷操作(右键 → “Run Failed Tests”)仍只执行一次,不会自动重试——它不读取 reruns 配置
@pytest.mark.flaky 只对单个测试生效,且需配合全局配置
仅加装饰器不够。如果全局未启用 reruns,@pytest.mark.flaky(reruns=3) 会被忽略,测试失败就直接标 FAILED,不会重试。
- 装饰器优先级高于全局配置,但前提是插件已激活并解析了该标记
-
reruns_delay单位是秒,设为0可能触发并发冲突(尤其涉及共享资源如数据库连接) - 避免在 setup/teardown 中使用 flaky 标记——它们不被重试,只有测试函数体本身重试
VSCode 测试侧边栏不显示重试过程细节
你看到的“RERUN”状态只是 pytest 输出日志的简单映射,VSCode 不解析中间重试轮次。最终报告里只会保留最后一次执行的结果(PASS/FAIL),前面的 RERUN 不计入统计。
- 想确认是否真重试了,得看终端输出(启用
python.testing.pytestArgs加-s -v) - 失败重试后通过的用例,在 VSCode 测试树中仍显示为绿色,但点击展开看不到历史失败记录
- 日志文件(如
--junitxml=report.xml)会记录每次重试的testcase,但 VSCode 不读取该文件做 UI 渲染
重试机制本质是 pytest 的行为,VSCode 只是管道。最容易被忽略的是:VSCode 的测试发现和执行命令(如 pytest --collect-only)完全不触 reruns 参数,只有真正执行测试时才生效——这意味着你不能靠“刷新测试列表”来触发重试,必须手动运行或等待保存自动触发(且确保自动运行配置里包含了 reruns 参数)。


















