【发布时间】:2019-02-07 20:07:02
【问题描述】:
我正在尝试运行 py.test 并仅执行 pylint,但不执行单元测试。
此页面上的文档表明您可以做到:
https://pypi.org/project/pytest-pylint/
您可以通过键入以下内容将您的测试运行限制为仅执行 pylint 检查而不执行任何其他测试:
py.test --pylint -m pylint
但是当我准确地运行该命令时,我仍然会从 py.test 找到的单元测试中得到错误。 linting 过程似乎按预期运行,然后我在 unittest 文件中报告了一堆错误。这似乎与文档相反。
py.test --version 表明我正在使用0.14.0:
$ py.test --version
This is pytest version 4.0.0, imported from /usr/local/lib/python3.6/dist-packages/pytest.py
setuptools registered plugins:
pytest-pylint-0.14.0 at /usr/local/lib/python3.6/dist-packages/pytest_pylint.py
【问题讨论】:
-
您是否在单元测试中遇到关于代码样式的 linter 错误或实际单元测试失败?
-
好问题,主要是模块导入错误,单元测试文件中的 pythonpath 问题,虽然很容易解决,但根本不应该运行。我们只希望 Jenkins 管道的这一部分中出现 lint 错误。我们将定义管道的另一部分以正确运行单元测试。
-
可能提出的一种解决方案是同时运行 lint 和运行单元测试,但 linting 和 unittests 的排除项也会有所不同,因此对 linting 和 unittests 运行一次
py.test并不干净.另一种解决方案是将pylint作为自己的进程运行,而不是在py.test下运行,但是我们会丢失junit结果格式,它可以更干净地集成到Jenkins 中。 -
"> 主要是模块导入错误,单元测试文件中的 pythonpath 问题,虽然很容易解决,但根本不应该运行。” - 我认为这里的解释是
pytest正在尝试加载单元测试模块,但实际上不会运行它们。-m pylint是一个标记过滤器,这意味着只需要运行标记为“pylint”的测试。所以pytest必须查看所有测试并检查它们的标记。我猜想解决 import/pythonpath 问题会解决问题,py.test --pylint -m pylint会按预期运行。 -
您可以运行
pytest和-o norecursedirs=*以避免收集测试。pytest --pylint -m pylint -o norecursedirs=*。顺便说一句,不要再使用py.test,它已被弃用,很快就会被删除。
标签: python unit-testing pytest pylint