跳转到主要内容

pytest插件,用于检查固定的依赖项要求

项目描述

描述

此插件检查您的依赖项文件中的特定版本,并将这些版本与您的环境中安装的库进行比较,如果任何版本无效或过时,则会失败您的测试套件。

这对于保持虚拟环境更新,并确保您的测试套件始终使用您指定的要求通过非常有用。

它还具有额外的优势,可以验证您的依赖项文件是否语法有效,并检查是否有新的依赖项版本可用。

使用方法

通过

pip install pytest-reqs

如果您输入

py.test --reqs

默认情况下,它将在与以下匹配的文件中搜索依赖项

  • req*.txt

  • req*.pip

  • requirements/*.txt

  • requirements/*.pip

并将声明的依赖项与当前环境进行比较。

一个简单的例子

如果您的环境安装了如下依赖项

$ pip freeze
foo==0.9.9

但您有一个如下所示的 requirements.txt 文件

$ cat requirements.txt
foo==1.0.0

您可以运行已安装插件的 py.test

$ py.test --reqs
=================================== FAILURES ===================================
______________________________ requirements-check ______________________________
Distribution "foo" requires foo==1.0.0 (from -r requirements.txt (line 1)) but
0.9.9 is installed

它还可以处理 pip 的版本包含语法(例如,foo<=1.0.0foo>=1.0.0 等)

$ py.test --reqs
=================================== FAILURES ===================================
______________________________ requirements-check ______________________________
Distribution "foo" requires foo>=1.0.0 (from -r requirements.txt (line 1)) but
0.9.9 is installed

此外,它还会告诉您您的依赖项文件是否无效(例如,如果 = 符号不足)

$ py.test --reqs
______________________________ requirements-check ______________________________
Invalid requirement: 'foo=1.0.0' (from -r requirements.txt)

配置选项

忽略本地项目

您可能有包含本地项目路径的依赖项文件,例如用于本地开发

$ cat requirements/local_development.txt
-e ../foo

但是,如果测试环境缺少本地项目(例如,在CI构建中),测试这些依赖项将失败

=================================== FAILURES ===================================
______________________________ requirements-check ______________________________
../foo should either be a path to a local project or a VCS url beginning with
svn+, git+, hg+, or bzr+ (from -r requirements.txt)

为了解决这个问题,您可以使用以下 pytest 选项禁用对本地项目的检查

# content of setup.cfg
[pytest]
reqsignorelocal = True

声明您自己的文件名模式

您可能有自己的依赖项文件不在默认文件名模式中

  • req*.txt

  • req*.pip

  • requirements/*.txt

  • requirements/*.pip

对于要求文件的文件名没有限制,目前pytest-reqs支持的文件名模式与其他自动化工具支持的常见模式相同。

但是,您可以使用以下pytest选项覆盖这些默认模式:

# content of setup.cfg
[pytest]
reqsfilenamepatterns =
    mycustomrequirementsfile.txt
    someotherfilename.ext

在任何其他测试之前运行pytest-reqs

目前没有定义pytest插件顺序的方法(参见pytest-dev/pytest#935

这意味着如果您不使用任何其他插件,pytest-reqs将最后运行它的测试。如果您使用其他插件,无法保证pytest-reqs测试将在何时运行。

如果您绝对需要在任何其他测试和插件之前运行pytest-reqs,而不是使用--reqs标志,您可以定义一个tests/conftest.py文件如下:

from pytest_reqs import check_requirements

def pytest_collection_modifyitems(config, session, items):
    check_requirements(config, session, items)

运行要求检查而不运行其他测试

您也可以通过键入来限制测试运行,仅执行“reqs”测试而不执行任何其他测试:

py.test --reqs -m reqs

这将仅运行此插件动态添加的带有“reqs”标记的测试项。

检查过时依赖项

您可以使用--reqs-outdated标志确定您的依赖项是否过时

$ py.test --reqs-outdated
______________________________ requirements-check ______________________________
Distribution "foo" is outdated (from -r requirements.txt (line 1)),
latest version is foo==1.0.1

此功能仅适用于pip>=9.0.0。

作者

许可证

开源MIT许可证。

注意

此插件的存储库位于http://github.com/di/pytest-reqs

有关pytest的更多信息,请参阅http://pytest.org

项目详细信息


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

pytest-reqs-0.2.1.tar.gz (7.5 kB 查看哈希值)

上传时间

构建分布

pytest_reqs-0.2.1-py3-none-any.whl (5.9 kB 查看哈希值)

上传时间 Python 3

支持