Skip to main content

flake8-pytest-style

pypi Python: 3.9+ Downloads Build Status Code coverage License: MIT Code style: 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}'
PT028 test function {name} has default value for argument {arg}, remove it
PT029 set the expected warning in pytest.warns()
PT030 pytest.warns({warning}) is too broad, set the match parameter or use a more specific warning
(configurable by pytest-warns-require-match-for)
PT031 pytest.warns() block should contain a single simple statement

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
  • pytest-warns-require-match-for — see PT030

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.2.0 - 2025-10-20

  • require at least Python 3.10
  • support Python 3.14

2.1.0 - 2025-01-10

  • support reason= kwarg in pytest.fail for PT016
  • add PT028 (checks for default values in test functions)
  • add PT029 (checks for pytest.warns without expected warning)
  • add PT030 (checks for too broad pytest.warns clauses)
  • add PT031 (checks for multiple statements in pytest.warns blocks)
  • require at least Python 3.9
  • support Python 3.13

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

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

Metadata

Release files for flake8-pytest-style 2.2.0

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

Source distribution (sdist)

Source distribution for flake8-pytest-style 2.2.0
File Size Uploaded
flake8_pytest_style-2.2.0.tar.gz 17.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for flake8-pytest-style 2.2.0
File Interpreter ABI Platform
flake8_pytest_style-2.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 40.1 kB

Release files / flake8_pytest_style-2.2.0.tar.gz

Download URL flake8_pytest_style-2.2.0.tar.gz
Size 17.8 kB
Tags Source
SHA-256 checksum
How to use checksums
d23a33294bccfb9f1b11aaf5212256727b299b9c9b17cf21e230c52c1095a468
BLAKE2b-256 checksum
How to use checksums
4a18b5115b91db2eca4d287d578f2f97c5e99e713ce4cb747774076f5a42fe1c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.2.1 CPython/3.13.9 Darwin/24.6.0

Release files / flake8_pytest_style-2.2.0-py3-none-any.whl

Download URL flake8_pytest_style-2.2.0-py3-none-any.whl
Size 22.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d01c4198a6c4e0ab759a92a0fa7710f10d83ec28e32a50ab6fb2e10f973a2f36
BLAKE2b-256 checksum
How to use checksums
4dde36523c4defc0d02f1617de66e23cd18ad74b869d401269bba6d790abc95e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.2.1 CPython/3.13.9 Darwin/24.6.0

Release history Release notifications | RSS feed

This release

2.2.0 This release

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.7.2

2 release files

1.7.1

2 release files

1.7.0

2 release files

1.6.0

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.4.4

2 release files

1.4.3

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

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