Skip to main content

pytest plugin to check pinned requirements

Project description

Description

This plugin checks your requirements files for specific versions, and compares those versions with the installed libraries in your environment, failing your test suite if any are invalid or out of date.

This is useful for keeping virtual environments up-to-date, and ensuring that your test suite is always being passed with the requirements you have specified.

It also has the added bonus of verifying that your requirements files are syntatically valid.

Usage

install via:

pip install pytest-reqs

if you then type:

py.test --reqs

by default it will search for dependencies in the files matching:

  • req*.txt

  • req*.pip

  • requirements/*.txt

  • requirements/*.pip

and the declared dependencies will be checked against the current environment.

A little example

If your environment has dependencies installed like this:

$ pip freeze
foo==0.9.9

But you have a requirements.txt file like this:

$ cat requirements.txt
foo==1.0.0

you can run py.test with the plugin installed:

$ 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

It also handles pip’s version containment syntax (e.g, foo<=1.0.0, foo>=1.0.0, etc):

$ 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

Furthermore, it will tell you if your requirements file is invalid (for example, if there is not enough = symbols):

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

Configuring options

Ignoring local projects

You might have requirements files with paths to local projects, e.g. for local development:

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

However, testing these requirements will fail if the test environment is missing the local project (e.g., on a CI build):

=================================== 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)

To get around this, you can disable checking for local projects with the following pytest option:

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

Declaring your own filename patterns

You might have requirements files in files other than the default filename patterns:

  • req*.txt

  • req*.pip

  • requirements/*.txt

  • requirements/*.pip

While there aren’t any restrictions on what filenames are or are not valid for requirements files, the patterns which are currently supported by pytest-reqs are the same common patterns supported by other automated tools around requirements files.

However, you can override these default patterns with the following pytest option:

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

Running requirements checks and no other tests

You can also restrict your test run to only perform “reqs” tests and not any other tests by typing:

py.test --reqs -m reqs

This will only run test items with the “reqs” marker which this plugin adds dynamically.

Authors

License

Open source MIT license.

Notes

The repository of this plugin is at http://github.com/di/pytest-reqs.

For more info on py.test see http://pytest.org.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytest-reqs-0.0.5.tar.gz (6.0 kB view details)

Uploaded Source

Built Distribution

pytest_reqs-0.0.5-py3-none-any.whl (6.5 kB view details)

Uploaded Python 3

File details

Details for the file pytest-reqs-0.0.5.tar.gz.

File metadata

File hashes

Hashes for pytest-reqs-0.0.5.tar.gz
Algorithm Hash digest
SHA256 d9619cfad7ccd12338b3998a1885cead7e680745995fff87ac2e1a204806f398
MD5 666b75e751d3b9515d79e6a6ba53977c
BLAKE2b-256 19abed743ef9042430772aa26696957383d4a5ce81354e9838366c784496c496

See more details on using hashes here.

Provenance

File details

Details for the file pytest_reqs-0.0.5-py3-none-any.whl.

File metadata

File hashes

Hashes for pytest_reqs-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 32841ddf4695a5052658c41819f186ebf416d1fa7076d0e1d549cc6ee9d7db74
MD5 b3fa0a6d3f25afdac8dca03d842d8d38
BLAKE2b-256 ad34bb9d25cf3db2e9d87196709ae57bacc2e30d8b7ad5015936f6c685a3ffaf

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page