Python Pytest:只运行linter检查(Pytest-8),不运行测试
我正在使用这个插件来过滤我的Python代码。 每次我像这样运行线绳: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
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