Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/m-burst/flake8-pytest-style
A flake8 plugin checking common style issues or inconsistencies with pytest-based tests.
https://github.com/m-burst/flake8-pytest-style
flake8 flake8-extensions flake8-plugin flake8-plugins pytest python3
Last synced: about 1 month ago
JSON representation
A flake8 plugin checking common style issues or inconsistencies with pytest-based tests.
- Host: GitHub
- URL: https://github.com/m-burst/flake8-pytest-style
- Owner: m-burst
- License: mit
- Created: 2019-05-21T22:10:45.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-09-11T06:15:17.000Z (3 months ago)
- Last Synced: 2024-10-05T11:04:12.118Z (2 months ago)
- Topics: flake8, flake8-extensions, flake8-plugin, flake8-plugins, pytest, python3
- Language: Python
- Size: 841 KB
- Stars: 229
- Watchers: 2
- Forks: 15
- Open Issues: 30
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-flake8-extensions - flake8-pytest-style - Checks for common style issues or inconsistencies with pytest-based tests. (Testing)
- awesome-python-backend - _flake8-pytest-style_ - check that pytest unit tests are written according to style (Topics Index / Code Quality and Linting)
README
# flake8-pytest-style
[![pypi](https://badge.fury.io/py/flake8-pytest-style.svg)](https://pypi.org/project/flake8-pytest-style)
[![Python: 3.8+](https://img.shields.io/badge/Python-3.8+-blue.svg)](https://pypi.org/project/flake8-pytest-style)
[![Downloads](https://img.shields.io/pypi/dm/flake8-pytest-style.svg)](https://pypistats.org/packages/flake8-pytest-style)
[![Build Status](https://github.com/m-burst/flake8-pytest-style/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/m-burst/flake8-pytest-style/actions/workflows/ci.yml)
[![Code coverage](https://codecov.io/gh/m-burst/flake8-pytest-style/branch/master/graph/badge.svg)](https://codecov.io/gh/m-burst/flake8-pytest-style)
[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://en.wikipedia.org/wiki/MIT_License)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)## Description
A `flake8` plugin checking common style issues or inconsistencies with `pytest`-based tests.
Currently the following errors are reported:
| Code | Description |
| ------- | ----------- |
| [PT001] | use @pytest.fixture over @pytest.fixture()
(configurable by `pytest-fixture-no-parentheses`) |
| [PT002] | configuration for fixture '{name}' specified via positional args, use kwargs |
| [PT003] | scope='function' is implied in @pytest.fixture() |
| [PT004] | fixture '{name}' does not return anything, add leading underscore |
| [PT005] | fixture '{name}' returns a value, remove leading underscore |
| [PT006] | wrong name(s) type in @pytest.mark.parametrize, expected {expected_type}
(configurable by `pytest-parametrize-names-type`) |
| [PT007] | wrong values type in @pytest.mark.parametrize, expected {expected_type}
(configurable by `pytest-parametrize-values-type` and `pytest-parametrize-values-row-type`) |
| [PT008] | use return_value= instead of patching with lambda |
| [PT009] | use a regular assert instead of unittest-style '{assertion}' |
| [PT010] | set the expected exception in pytest.raises() |
| [PT011] | pytest.raises({exception}) is too broad, set the match parameter or use a more specific exception
(configurable by `pytest-raises-require-match-for`) |
| [PT012] | pytest.raises() block should contain a single simple statement |
| [PT013] | found incorrect import of pytest, use simple 'import pytest' instead |
| [PT014] | found duplicate test cases {indexes} in @pytest.mark.parametrize |
| [PT015] | assertion always fails, replace with pytest.fail() |
| [PT016] | no message passed to pytest.fail() |
| [PT017] | found assertion on exception {name} in except block, use pytest.raises() instead |
| [PT018] | assertion should be broken down into multiple parts |
| [PT019] | fixture {name} without value is injected as parameter, use @pytest.mark.usefixtures instead |
| [PT020] | @pytest.yield_fixture is deprecated, use @pytest.fixture |
| [PT021] | use yield instead of request.addfinalizer |
| [PT022] | no teardown in fixture {name}, use return instead of yield |
| [PT023] | use @pytest.mark.foo over @pytest.mark.foo()
(configurable by `pytest-mark-no-parentheses`) |
| [PT024] | pytest.mark.asyncio is unnecessary for fixtures |
| [PT025] | pytest.mark.usefixtures has no effect on fixtures |
| [PT026] | useless pytest.mark.usefixtures without parameters |
| [PT027] | use pytest.raises() instead of unittest-style '{assertion}' |## Installation
pip install flake8-pytest-style
## Configuration
The plugin has the following configuration options:
* `pytest-fixture-no-parentheses` — see [PT001]
* `pytest-parametrize-names-type` — see [PT006]
* `pytest-parametrize-values-type` — see [PT007]
* `pytest-parametrize-values-row-type` — see [PT007]
* `pytest-raises-require-match-for` — see [PT011]
* `pytest-mark-no-parentheses` — see [PT023]## For developers
### Install deps and setup pre-commit hook
make init
### Run linters, autoformat, tests etc.
make format lint test
### Bump new version
make bump_major
make bump_minor
make bump_patch## License
MIT
## Change Log
**Unreleased**
...
**2.0.0 - 2024-04-01**
* **BREAKING:** invert default values for `pytest-fixture-no-parentheses` and `pytest-mark-no-parentheses`
to conform with `pytest` official style
* If you get a lot of [PT001] or [PT023] violations after upgrading, consider setting explicit values
for these configuration options
* require at least Python 3.8.1
* support Python 3.12**1.7.2 - 2023-02-15**
* fix false positive for [PT009] on `pytest.fail`
**1.7.1 - 2023-02-15**
* update list of unittest-style assert methods for [PT009]/[PT027]
**1.7.0 - 2023-02-09**
* require at least Python 3.7.2
* support Python 3.11
* add [PT027] (checks for unittest-style `assertRaises`)**1.6.0 - 2021-12-23**
* require at least Python 3.6.2
* expose `py.typed` file**1.5.1 - 2021-11-05**
* better wording for [PT011]
* support Python 3.10**1.5.0 - 2021-06-18**
* add [PT025] (checks for erroneous `pytest.mark.usefixtures` on fixtures)
* add [PT026] (checks for `pytest.mark.usefixtures` without parameters)**1.4.4 - 2021-06-17**
* fix [PT023] not checking marks in classes
* fix [PT004] incorrectly firing on fixtures with `yield from`**1.4.2 - 2021-05-24**
* update `flake8-plugin-utils` version to improve stability
**1.4.1 - 2021-04-01**
* fix argparse-related warnings
**1.4.0 - 2021-03-14**
* add [PT023] (checks for parentheses consistency in `pytest.mark` usage)
* add [PT024] (checks for unnecessary `pytest.mark.asyncio` on fixtures)
* fix [PT004], [PT005] firing on abstract fixtures
* fix [PT012] firing on `with` statements containing a single `pass`**1.3.0 - 2020-08-30**
* add [PT022] (checks for `yield` fixtures without teardown)
**1.2.3 - 2020-08-06**
* update `flake8-plugin-utils` dependency to fix encoding problems on Windows
**1.2.2 - 2020-07-23**
* fix [PT004]/[PT005] inspecting returns of nested functions
**1.2.1 - 2020-06-15**
* fix [PT021] for factory fixtures (#46)
**1.2.0 - 2020-06-12**
* support scoped `mocker` fixtures from `pytest-mock` for [PT008]
* check for positional-only lambda arguments in [PT008]
* add [PT020] (checks for `pytest.yield_fixture`)
* add [PT021] (checks for `request.addfinalizer`)
* add documentation pages for all rules**1.1.1 - 2020-04-17**
* fix [PT011] not reporting `match=''` as a violation
**1.1.0 - 2020-04-14**
* add [PT015] (checks for `assert False`)
* add [PT016] (checks for `pytest.fail()` without message)
* add [PT017] (checks for assertions on exceptions in `except` blocks)
* add [PT018] (checks for composite assertions)
* add [PT019] (checks for fixtures without value injected as parameters)**1.0.0 - 2020-03-26**
* add [PT014] (checks for duplicate test cases in `@pytest.mark.parametrize`)
**0.6.0 - 2020-03-21**
* add configuration option `pytest-parametrize-names-type` for [PT006]
* add configuration options `pytest-parametrize-values-type` and
`pytest-parametrize-values-row-type` for [PT007]**0.5.0 - 2020-03-09**
* add configuration option `pytest-fixture-no-parentheses` for [PT001]
* add [PT013] (checks for `from`-imports from `pytest`)**0.4.0 - 2020-03-09**
* add [PT012] (checks for multiple statements in `with pytest.raises()`)
**0.3.1 - 2020-03-09**
* fix default value of `pytest-raises-require-match-for` config option
**0.3.0 - 2020-03-09**
* add [PT010] and [PT011] (checks for `pytest.raises` parameters)
**0.2.0 - 2020-03-01**
* add [PT009] (ported from [flake8-pytest](https://github.com/vikingco/flake8-pytest))
**0.1.3 - 2019-05-24**
* add `yield` fixtures support
* fix changelog entry for 0.1.2**0.1.2 - 2019-05-23**
* fix parametrize checkers not working in decorators
**0.1.1 - 2019-05-23**
* update PyPI description
**0.1.0 - 2019-05-23**
* initial
[PT001]: /docs/rules/PT001.md
[PT002]: /docs/rules/PT002.md
[PT003]: /docs/rules/PT003.md
[PT004]: /docs/rules/PT004.md
[PT005]: /docs/rules/PT005.md
[PT006]: /docs/rules/PT006.md
[PT007]: /docs/rules/PT007.md
[PT008]: /docs/rules/PT008.md
[PT009]: /docs/rules/PT009.md
[PT010]: /docs/rules/PT010.md
[PT011]: /docs/rules/PT011.md
[PT012]: /docs/rules/PT012.md
[PT013]: /docs/rules/PT013.md
[PT014]: /docs/rules/PT014.md
[PT015]: /docs/rules/PT015.md
[PT016]: /docs/rules/PT016.md
[PT017]: /docs/rules/PT017.md
[PT018]: /docs/rules/PT018.md
[PT019]: /docs/rules/PT019.md
[PT020]: /docs/rules/PT020.md
[PT021]: /docs/rules/PT021.md
[PT022]: /docs/rules/PT022.md
[PT023]: /docs/rules/PT023.md
[PT024]: /docs/rules/PT024.md
[PT025]: /docs/rules/PT025.md
[PT026]: /docs/rules/PT026.md
[PT027]: /docs/rules/PT027.md