Skip to main content

Test code blocks in your READMEs

Project description

pytest-codeblocks

Test code blocks in your READMEs.

PyPi Version Anaconda Cloud PyPI pyversions GitHub stars Downloads

gh-actions codecov LGTM Code style: black

This is pytest-codeblocks, a pytest plugin for testing code blocks from README files. It supports Python and shell code.

Install with

pip install pytest-codeblocks

and run pytest with

pytest --codeblocks
================================= test session starts =================================
platform linux -- Python 3.9.4, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: /path/to/directory
plugins: codeblocks-0.11.0
collected 56 items

example.md .......................                                              [ 50%]
README.md .......................                                               [100%]

================================= 56 passed in 0.08s ==================================

pytest-codeblocks will only pick up code blocks with python and sh/bash/zsh syntax highlighting.

Marking code blocks

It is possible to use pytest.mark for marking code blocks. For example, to skip a code block use pytest.mark.skip or pytest.mark.skipif:

Lorem ipsum

<!--pytest.mark.skip-->

```python
foo + bar  # not working
```

dolor sit amet.
<!--pytest.mark.skipif(sys.version_info <= (3, 7), reason="Need at least Python 3.8")-->

You can skip code blocks on import errors with

<!--pytest-codeblocks:importorskip(sympy)-->

Skip the entire file by putting

<!--pytest-codeblocks:skipfile-->

in the first line.

For expected errors, use pytest.mark.xfail:

The following gives an error:

<!--pytest.mark.xfail-->

```python
1 / 0
```

Merging code blocks

Broken-up code blocks can be merged into one with the pytest-codeblocks:cont prefix

Lorem ipsum

```python
a = 1
```

dolor sit amet

<!--pytest-codeblocks:cont-->

```python
# this would otherwise fail since `a` is not defined
a + 1
```

If you'd like to prepend code that you don't want to show, you can just comment it out; pytest-codeblocks will pick it up anyway:

Lorem ipsum

<!--
```python
a = 1
```
-->

dolor sit amet

<!--pytest-codeblocks:cont-->

```python
# this would otherwise fail since `a` is not defined
a + 1
```

Expected output

You can also define the expected output of a code block:

This

```sh
print(1 + 3)
```

gives

<!--pytest-codeblocks:expected-output-->

```
4
```

(Conditionally) Skipping the output verfication works by prepending the first block with skip/skipif (see above).

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_codeblocks-0.16.1.tar.gz (11.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pytest_codeblocks-0.16.1-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

Details for the file pytest_codeblocks-0.16.1.tar.gz.

File metadata

  • Download URL: pytest_codeblocks-0.16.1.tar.gz
  • Upload date:
  • Size: 11.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.27.1

File hashes

Hashes for pytest_codeblocks-0.16.1.tar.gz
Algorithm Hash digest
SHA256 14cc14a78e578f30f505602eb7a6fb8a22d9c4664dfa9aca6429b93da6eaea2a
MD5 02674efe2eb6e9fab3e5b043d1c912af
BLAKE2b-256 393c68f8a128c450eab2a28dfe44649beeddae0dc62aa2a0a4944f9819ba544f

See more details on using hashes here.

File details

Details for the file pytest_codeblocks-0.16.1-py3-none-any.whl.

File metadata

File hashes

Hashes for pytest_codeblocks-0.16.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a99f5336774241e7879a68cc86602b651154d726d3ae26efa288a805a7ad7795
MD5 0307af3d15904d031296fb6da4415adf
BLAKE2b-256 42b38bfd0dfc3c274c7fcc70c64dad66a17d65b3c357c20ca0a3d5c3668f47e5

See more details on using hashes here.

Supported by

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