保存以前的测试运行,并允许重新执行以前的pytest运行以重现崩溃或不稳定的测试

pytest-repla的Python项目详细描述


http://img.shields.io/pypi/v/pytest-replay.svghttps://anaconda.org/conda-forge/pytest-replay/badges/version.svgSee Build Status on Travis CISee Build Status on AppVeyorhttps://img.shields.io/pypi/pyversions/pytest-replay.svg

保存以前的测试运行,并允许重新执行以前的pytest运行以重现崩溃或不稳定的测试


这个Pytest插件是用Cookiecutter@hackebrotCookiecutter-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

希望这样可以更容易地重现问题并修复它。

常见问题

  1. pytest有自己的cache,为什么要使用不同的机制?

    内部缓存使用json保存数据,这在出现崩溃时是不合适的,因为文件 将不可读。

  2. 从文件中选择测试的能力不应该是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

释放

按照以下步骤制作新版本:

  1. master
  2. 创建新分支release-X.Y.Z
  3. 更新CHANGELOG.rst
  4. 打开PR;
  5. greenapproved之后,按X.Y.Z
  6. 格式推送一个新标记

travis将自动部署到pypi。

然后,在conda-forge/pytest-replay-feedstock中更新配方。

许可证

根据MIT许可证的条款分发。

问题

如果您遇到任何问题,请file an issue连同详细说明。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在jetty请求日志中添加milliscond字段?   java在使用Scanner类从文件读取信息时遇到问题   为什么。类不适用于泛型类型?   SQLite插入上的java空指针异常   java能告诉我们Guava缓存是在禁用统计数据的情况下构建的吗?   java在应用程序中使用常量   java无法使用AutoIT和Selenium Webdriver在所需位置/文件夹保存图像   java如何在jtable中更新jprogress栏   java是比较给定日期和当前日期(在给定时区中没有时间段)的最佳方法   安卓代码中的java错误   java无法访问实体类中的字段   java如何在tomcat中处理三个JDBC连接池?   java无法使用Spring Security保护AngularJS页面   如何在没有TCP/IP协议栈的情况下用Java发送以太帧