Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pytest:只运行linter检查(Pytest-8),不运行测试_Python_Pytest - Fatal编程技术网

Python Pytest:只运行linter检查(Pytest-8),不运行测试

Python Pytest:只运行linter检查(Pytest-8),不运行测试,python,pytest,Python,Pytest,我正在使用这个插件来过滤我的Python代码。 每次我像这样运行线绳: pytest --flake8 除绒线外,所有测试都将运行。 但我只想进行细纱检查 如何配置pytest,使其只删除代码,而跳过所有测试,最好是通过命令行或conftest.py,而不必向我的测试添加跳过标记?您可以自己更改测试运行逻辑,例如在通过-flake 8 arg时忽略收集的测试: # conftest.py def pytest_collection_modifyitems(session, config, i

我正在使用这个插件来过滤我的Python代码。 每次我像这样运行线绳:

pytest --flake8
除绒线外,所有测试都将运行。 但我只想进行细纱检查


如何配置pytest,使其只删除代码,而跳过所有测试,最好是通过命令行或conftest.py,而不必向我的测试添加跳过标记?

您可以自己更改测试运行逻辑,例如在通过-flake 8 arg时忽略收集的测试:

# conftest.py

def pytest_collection_modifyitems(session, config, items):
    if config.getoption('--flake8'):
        items[:] = [item for item in items if item.get_closest_marker('flake8')]

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

我也有同样的问题,经过一些挖掘,我意识到我只想运行flake8:

薄片8


就这样。无需运行任何其他操作,因为您的flake8独立于PyTest。

经过进一步思考,这是我提出的解决方案-它可以与PyTest 5.3.5 get_marker一起使用,但现在已经不存在了

它允许我通过命令行运行特定的线头检查。 因为我仍然喜欢保留同时运行linting检查和测试的选项,所以我添加了一个标志,告诉pytest它是否应该只运行linting

用法:

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

# Run tests and flake8
pytest --flake8
代码:

如果您的所有测试都在一个目录中,那么Pytests-ignore选项在这里也可以很好地工作

我通常把它隐藏在make命令后面。在本例中,我的Makefile和tests目录都位于存储库的根目录

.PHONY: lint

lint:
    pytest --flake8 --ignore tests

flake8测试使用flake8标记进行标记,因此您可以通过运行以下命令仅选择这些测试:


pytest-flake8-m flake8

@ifischer我很想知道为什么您认为提供替代工作解决方案不能回答这个问题。我知道您明确要求基于pytest的解决方案,但在我看来,这不是最好的方式。正如我所说的,我也遇到了同样的问题,我意识到当我使用pytest时,这需要付出很多努力,并且在我看来会给项目增加不必要的复杂性。只运行flake8是一个简单而干净的替代方案,它解决了给定的问题。我也一直在这样做,但如果要删除的文件是包含测试的文件,这是不够的,这就是我认为OP所要问的。我希望在pytest中运行linting的原因是,它使我能够将linting检查输出为HTML/XML,因此它可以更好地集成到CI管道中。所有脱毛和测试结果将采用相同的结果格式。此外,由于我现在能够将运行的快速筛选检查和之后的慢速测试分开,我的管道将很快失败。只是为了澄清-get_标记被get_最近的标记所取代,请参阅。更新了答案。@hoefling谢谢,这比导入每个item类更好。我还使用get_Nestest_Marker更新了我的解决方案。您会如何注释这些类型?这个解析器是一个from _pytest.config.argparsing导入解析器,但是session/config/items是什么呢?我想是从_pytest.config导入配置。
.PHONY: lint

lint:
    pytest --flake8 --ignore tests