基于覆盖率数据排除测试的pytest插件
pytest-cov-exclude的Python项目详细描述
pytest的基于覆盖率的测试排除插件。通过观察 行由每个测试执行,下一个测试运行可以通过 not在没有更改源文件的情况下执行测试。
如果您有一个经常重新运行的大型测试套件,那么这个插件可以 极大地改进了迭代时间。
安装
使用pip安装:
$ pip install pytest-cov-exclude
pytest-cov-exclude需要pytest 2.8或更高版本。它与 python 2.7、3.3、3.4、3.5以及pypy。它对pypy不起作用 3由于生成的覆盖率数据存在未知错误。
用法
首次运行测试套件时,将启用每个测试覆盖率 这套套房比平时要花一点时间:
$ py.test ==================== test session starts ===================== # Test output... ================ MANY passed in MANY seconds =================
现在,当您重新运行测试套件时,所有测试都应该 不包括:
$ py.test ==================== test session starts ===================== # Test output... =============== MANY deselected in FEW seconds ===============
如果测试失败,它将重新运行,即使没有任何更改以便 保留测试套件的一般故障状态。
强制包含个别测试
如果有依赖于覆盖率数据中未包含的文件的测试, 例如数据文件或生成的源,可以使用 external_dependencies。这迫使他们重新逃跑,即使没有 文件已更改:
@pytest.mark.external_dependenciesdeftest_something():# Run tests from external data files
已知错误
在pytest的收集阶段对文件的更改将是 忽略。测试文件及其依赖项在 在完成测试集合之后可能有。
有一个标记为xfail的测试用例突出显示了这个问题。
运行整个测试套件
如果要强制整个测试套件重新运行,则 有两个选项:禁用插件或清除pytest的缓存:
$ py.test -p no:cov-exclude # Disable the plugin $ py.test --cache-clear # Clear pytest's cache
兼容性
如前所述,这个插件需要Pytest2.8或更高版本,因为它 取决于新的缓存模块。
虽然pypy是受支持的,但是ujson库用于 序列化/反序列化不可用,因此返回到 而是使用默认的json实现。正因为如此, 使用pypy下的这个插件,测试可能实际运行slower。