Различные стандарты Pylint для тестовых файлов

#python #pytest #pylint

Вопрос:

У меня есть типичная кодовая база Python с сотнями .py файлов в десятках каталогов и десятками /tests/ каталогов, заполненных test_whatever.py файлами (которые я запускаю с помощью pytest ).

Но, честно говоря, у меня гораздо более низкая планка для заботы о pylint вещах в тестовых файлах, чем в реальном коде. Как я могу игнорировать эти четыре вещи для файлов в /tests/ папках?

  1. missing-module-docstring
  2. missing-class-docstring
  3. missing-function-docstring
  4. protected-access

Единственное, что мне удалось в основном решить, — это функция docstring one, поместив это в мой pylintrc :

 no-docstring-rgx=^_|^test_
 

Можно ли исправить остальные? (Я не могу полностью исключить тестовые файлы из компоновки.)

Комментарии:

1. как вы управляете pylint ? вы используете токсины, например ? что я обычно делаю, так это добавляю к исполнениям pylint в tox, один для кода и один для тестов, и таким образом я могу отправлять разные аргументы между ними

2. Лично я использую предварительную фиксацию, в которой есть опция исключения, позволяющая фильтровать test/

3. @ozs Да, pylint обычно управляется tox. Можете ли вы показать, как это работает? Я бы с удовольствием посмотрел на это!

Ответ №1:

вы можете использовать tox, который является универсальным средством управления virtualenv и тестирования командной строки. токсины помогают вам :

  • проверка правильности установки пакета в разных версиях python
  • выполнение тестов в каждой из сред
  • выполнение функций интерфейса для серверов непрерывной интеграции

вы можете прочитать больше о токсикологии на их официальном сайте

установите tox с помощью pip install tox

добавьте файл tox.ini на корневом уровне. см. Структуру проекта на рисунке ниже

введите описание изображения здесь

в файле tox.ini базовая конфигурация для запуска тестов и pylint будет выглядеть так:

 [tox]
minversion = 2.0
envlist = py36, pylint
skipsdist = True

[testenv]
commands = {envbindir}/pytest {posargs}
deps = -r{toxinidir}/requirements.txt
       -r{toxinidir}/dev-requirements.txt
recreate = False
passenv = *

[testenv:pylint]
basepython=python3.6
deps = -r{toxinidir}/requirements.txt
       -r{toxinidir}/dev-requirements.txt
commands=pylint src
         pylint --disable=missing-module-docstring,missing-class-docstring tests
 

как вы можете видеть, я разделил pylint на 2 команды, которые позволяют мне управлять тем, как по-разному обрабатывать мой src и тесты.

чтобы запустить tox (тесты lint), просто запустите tox терминал из каталога tox.ini.

если вы хотите запустить только pylint, вы можете запустить tox -e pylint

Комментарии:

1. Штопать. Так что проблема несколько сложнее. (1) /tests/ находится внутри /src/ , а во-вторых, у меня есть десятки /tests/ папок на разных уровнях глубины. хм

2. вы можете создать 2 файла pylintrc (для каждой команды). в pylintrc вы можете использовать «шаблоны игнорирования» для определения файлов черного списка. запустите pylint —rcfile=путь , один для src и один для тестов