Pytest:仅运行linter检查(pytest-flake8),不运行测试

时间:2018-10-19 09:10:58

标签: python pytest

我正在使用pytest-flake8插件来整理我的Python代码。 每次我像这样运行棉绒:

pytest --flake8

除棉绒外,还运行所有测试。 但是我只想运行linter检查。

如何配置pytest,使其仅掉入代码但跳过所有测试,最好通过命令行(或conftest.py)-无需在测试中添加跳过标记

>

5 个答案:

答案 0 :(得分:2)

如果所有测试都在一个目录中,那么

Pytests --ignore <<path>>选项在这里也可以很好地工作。

我通常将其隐藏在make命令后面。在这种情况下,我的Makefiletests目录都位于存储库的根目录。

.PHONY: lint

lint:
    pytest --flake8 --ignore tests

答案 1 :(得分:2)

flake8 测试用 flake8 标记标记,因此您可以通过运行来只选择那些:

pytest --flake8 -m flake8

答案 2 :(得分:1)

您可以自己更改测试运行逻辑,例如,通过mail.company.co.za arg时忽略收集的测试:

--flake8

现在仅将执行flake8测试,其余的将被忽略。

答案 3 :(得分:1)

我遇到了同样的问题,经过一番挖掘,我意识到我只想运行flake8

flake8 <path to folder>

就是这样。您的flake8 configuration独立于PyTest。

答案 4 :(得分:0)

经过进一步思考,这是我想出的解决方案-并与pytest 5.3.5(https://stackoverflow.com/a/52891274/319905中的get_marker不存在)一起使用。

它允许我通过命令行运行特定的棉绒检查。 由于我仍然希望保留同时运行linting检查和测试的选项,因此我添加了一个标志告诉pytest是否只应该进行linting。

用法:

# Run only flake8 and mypy, no tests
pytest --lint-only --flake8 --mypy

# Run tests and flake8
pytest --flake8

代码:

# conftest.py
def pytest_addoption(parser):
    parser.addoption(
        "--lint-only",
        action="store_true",
        default=False,
        help="Only run linting checks",
    )


def pytest_collection_modifyitems(session, config, items):
    if config.getoption("--lint-only"):
        lint_items = []
        for linter in ["flake8", "black", "mypy"]:
            if config.getoption(f"--{linter}"):
                lint_items.extend(
                    [item for item in items if item.get_closest_marker(linter)]
                )
        items[:] = lint_items