Skip to main content
Archived

This project has been archived by its maintainers, and is no longer receiving any updates.

pytest-nodev is a simple test-driven search engine for Python code, it finds classes and functions that match the behaviour specified by the given tests.

How does “test-driven code search” work?

To be more precise pytest-nodev is a pytest plugin that lets you execute a set of tests that specify the expected behaviour of a class or a function on all objects in the Python standard library and in all the modules you have installed.

Show me how it works in practice. I need to write a parse_bool function that robustly parses a boolean value from a string. Here is the test I intend to use to validate my own implementation once I write it:

def test_parse_bool():
    assert not parse_bool('false')
    assert not parse_bool('FALSE')
    assert not parse_bool('0')

    assert parse_bool('true')
    assert parse_bool('TRUE')
    assert parse_bool('1')

First, install the latest version of pytest-nodev from the Python Package Index:

$ pip install pytest-nodev

Then copy your specification test to the test_parse_bool.py file and decorate it with pytest.mark.candidate as follows:

import pytest

@pytest.mark.candidate('parse_bool')
def test_parse_bool():
    assert not parse_bool('false')
    assert not parse_bool('FALSE')
    assert not parse_bool('0')

    assert parse_bool('true')
    assert parse_bool('TRUE')
    assert parse_bool('1')

Finally, instruct pytest to run your test on all candidate callables in the Python standard library:

$ py.test --candidates-from-stdlib test_parse_bool.py
======================= test session starts ==========================
platform darwin -- Python 3.5.1, pytest-2.9.2, py-1.4.31, pluggy-0.3.1
rootdir: /tmp, inifile: setup.cfg
plugins: nodev-1.0.0, timeout-1.0.0
collected 4000 items

test_parse_bool.py xxxxxxxxxxxx[...]xxxxxxxxXxxxxxxxx[...]xxxxxxxxxxxx

====================== pytest_nodev: 1 passed ========================

test_parse_bool.py::test_parse_bool[distutils.util:strtobool] PASSED

=== 3999 xfailed, 1 xpassed, 260 pytest-warnings in 75.38 seconds ====

In just over a minute pytest-nodev collected 4000 functions from the standard library, run your specification test on all of them and reported that the strtobool function in the distutils.util module is the only candidate that passes your test.

Now you can review it and if you like it you may use it in your code. No need to write your own implementation!

Wow! Does it work so well all the times?

To be honest strtobool is a little known gem of the Python standard library that is just perfect for illustrating all the benefits of test-driven code search. Here are some of them in rough order of importance:

  • a function imported is a one less function coded—and tested, documented, debugged, ported, maintained…

  • it’s battle tested code—lot’s of old bugs have already been squashed

  • it’s other people code—there’s an upstream to report new bugs to

  • it gives you additional useful functionality—for free on top of that

  • it’s in the Python standard library—no additional dependency required

BIG FAT WARNING!

Searching code with pytest-nodev looks very much like running arbitrary callables with random arguments. A lot of functions called with the wrong set of arguments may have unexpected consequences ranging from slightly annoying, think os.mkdir('false'), to utterly catastrophic, think shutil.rmtree('/', True). Serious use of pytest-nodev, in particular using --candidates-from-all, require running the tests with operating-system level isolation, e.g. as a dedicated user or even better inside a dedicated container. The Starter kit guide documents how to run pytest-nodev safely and efficiently.

Project resources

Documentation

http://pytest-nodev.readthedocs.io

Support

https://stackoverflow.com/search?q=pytest-nodev

Development

https://github.com/nodev-io/pytest-nodev

Discussion

To be decided, see issue #15

Download

https://pypi.python.org/pypi/pytest-nodev

Code quality

Build Status on Travis CI Build Status on AppVeyor Coverage Status on Coveralls

Contributing

Contributions are very welcome. Please see the CONTRIBUTING document for the best way to help. If you encounter any problems, please file an issue along with a detailed description.

Authors:

Contributors:

Sponsors:

License

pytest-nodev is free and open source software distributed under the terms of the MIT license.

Release files for pytest-nodev 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pytest-nodev 1.0.1
File Size Uploaded
pytest-nodev-1.0.1.tar.gz 25.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pytest-nodev 1.0.1
File Interpreter ABI Platform
pytest_nodev-1.0.1-py2.py3-none-any.whl Python 3, Python 2 none any Details

Total release size: 42.7 kB

Release files / pytest-nodev-1.0.1.tar.gz

Download URL pytest-nodev-1.0.1.tar.gz
Size 25.9 kB
Tags Source
SHA-256 checksum
How to use checksums
17d721a2c39a3b38f872979a727df3c5ca6391f9efd0273c23b2c9e46a4af8be
BLAKE2b-256 checksum
How to use checksums
fdbf88f62917fdd782992aed060e9cddd1c73372fefc0fd382a1eceddb256bc9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / pytest_nodev-1.0.1-py2.py3-none-any.whl

Download URL pytest_nodev-1.0.1-py2.py3-none-any.whl
Size 16.7 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
43be610727055f11e77397de9bbca045561f01da713c166a4702121f048677a5
BLAKE2b-256 checksum
How to use checksums
62bc5af87bc5436c0b0a5798264105065a9603d7e47552ad8caef4e9ed13290e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page