Welcome to Flake8-AAA’s documentation

Travis build Read the Docs PyPI PyPI - Python Version flake8-aaa is licensed under the MIT License


A linter for Python tests.

Flake8-AAA enforces simple formatting of your test suite making it more consistent and easier to grok, especially across teams.

Installation and usage

Flake8-AAA is a Flake8 plugin.

Install flake8-aaa with pip, which will also install flake8:

$ pip install flake8-aaa

Invoke Flake8 on your test suite, in this case in the tests directory:

$ flake8 tests

Errors returned by Flake8-AAA have the AAA code, for example:

tests/block/test_init.py:14:1: AAA02 multiple Act blocks found in test

Arrange Act Assert

Tests are linted against the Arrange Act Assert pattern.

TL;DR following the AAA pattern means tests are laid out like this:

def test():
    <ARRANGE block> # set up of the system under test (SUT)

    <ACT block> # perform a single action on the SUT

    <ASSERT block> # check that the SUT changed as expected

For example:

def test(tmpdir):
    Checker is able to parse provided file at load time
    target_file = tmpdir.join('test.py')
    target_file.write('assert 1 + 2 == 3\n')
    tree = ast.parse(target_file.read())
    checker = Checker(tree, ['assert 1 + 2 == 3\n'], target_file.strpath)

    result = checker.load()

    assert result is None
    assert len(checker.tree.body) == 1
    assert type(checker.tree.body[0]) == ast.Assert
    assert len(checker.ast_tokens.tokens) == 8

More examples are in our test suite’s “good” files.


  • Pytest and unittest supported.
  • Compatible with Black and yapf formatted code.
  • Current release works with the latest versions of Python 3 (3.5, 3.6, 3.7 and 3.8). Older releases have support for older Pythons.

See the Compatibility list for more info.