保存以前的测试运行,并允许重新执行以前的pytest运行以重现崩溃或不稳定的测试
pytest-repla的Python项目详细描述
保存以前的测试运行,并允许重新执行以前的pytest运行以重现崩溃或不稳定的测试
这个Pytest插件是用Cookiecutter和@hackebrot的Cookiecutter-pytest-plugin模板生成的。
功能
这个插件有助于在使用xdist运行测试时重现随机或不稳定的行为。pytest-xdist执行测试 以一种不可预测的顺序,使得很难再现ci中的行为,因为没有方便的方法 跟踪哪个工人执行的测试。
此插件记录由--replay-record-dir=<dir>标志给定的目录中每个工作进程执行的节点ID, 并且可以使用--replay=<file>重新运行以前运行的测试。例如:
$ pytest -n auto --replay-record-dir=build/tests/replay
这将生成具有每个工作进程执行的每个测试的节点ID的文件,例如,工作进程gw1将生成 一个文件.pytest-replay-gw1.txt,其内容如下:
test_foo.py::test[1] test_foo.py::test[3] test_foo.py::test[5] test_foo.py::test[7] test_foo.py::test[8]
如果workergw1的测试中出现崩溃或片状故障,则可以从ci服务器获取该文件,然后 按相同的顺序执行测试:
$ pytest --replay=.pytest-replay-gw1.txt
希望这样可以更容易地重现问题并修复它。
常见问题
pytest有自己的cache,为什么要使用不同的机制?
内部缓存使用json保存数据,这在出现崩溃时是不合适的,因为文件 将不可读。
从文件中选择测试的能力不应该是pytestcore的一部分吗?
当然可以,但是在提议之前,让我们试着把它作为一个单独的插件 它包含在核心。
安装
您可以通过PyPI中的pip安装pytest-replay:
$ pip install pytest-replay
或使用conda:
$ conda install -c conda-forge pytest-replay
贡献
我们非常欢迎您的贡献。
如果使用本机python安装,则可以使用tox运行测试。
要使用conda运行测试,首先创建一个虚拟环境并从中执行测试 (根环境中使用python 3.5+的conda):
$ python -m venv .env $ .env\scripts\activate $ pip install -e . pytest-xdist $ pytest tests
释放
按照以下步骤制作新版本:
- 从master; 创建新分支release-X.Y.Z。
- 更新CHANGELOG.rst;
- 打开PR;
- 在green和approved之后,按X.Y.Z; 格式推送一个新标记
travis将自动部署到pypi。
然后,在conda-forge/pytest-replay-feedstock中更新配方。
许可证
根据MIT许可证的条款分发。
问题
如果您遇到任何问题,请file an issue连同详细说明。