我正在使用pytest-flake8插件来整理我的Python代码。 每次我像这样运行棉绒:
pytest --flake8
除棉绒外,还运行所有测试。 但是我只想运行linter检查。
如何配置pytest,使其仅掉入代码但跳过所有测试,最好通过命令行(或conftest.py)-无需在测试中添加跳过标记?
>答案 0 :(得分:2)
Pytests --ignore <<path>>
选项在这里也可以很好地工作。
我通常将其隐藏在make命令后面。在这种情况下,我的Makefile
和tests
目录都位于存储库的根目录。
.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)
答案 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