Target : использование пользовательских правил pylint с пользовательским интерфейсом SonarQube
Я создал пользовательское правило для pylint для python selenium webdriver. Чтобы проверить, используется ли локатор XPATH.
#webdriver_locator_checker.py
from pylint.interfaces import IRawChecker
from pylint.checkers import BaseChecker
XPATH_LOCATORS = [
b'XPATH',
b'xpath'
]
class WebdriverLocatorChecker(BaseChecker):
"""Checks if XPATH locator is used."""
__implements__ = IRawChecker
name = 'webdriver-xpath-locator'
msgs = {
'WD001': (
'Locator strategy by xpath is not recommended',
'xpath-locator-not-recommended',
'Xpath locators are not recommended, use css locators instead or use class name, id or name if possible.'
),
}
options = ()
def process_module(self, node):
with node.stream() as stream:
for (lineno, line) in enumerate(stream):
for locator in XPATH_LOCATORS:
if locator in line:
self.add_message('xpath-locator-not-recommended', line=lineno + 1)
break
def register(linter):
"""required method to auto register this checker"""
linter.register_checker(WebdriverLocatorChecker(linter))
В корневой каталог я добавил .pylintrc
файл с (для использования пользовательской проверки):
#.pylintrc
load-plugins=webdriver_locator_checker
, затем я связал свои файлы, чтобы получитьотчет о pylint: (pylint-checkers - dir with webdriver_locator_checker.py)
PYTHONPATH=./pylint-checkers/ pylint ./path/to/locators.py | tee ./pylint.out
файл отчета был создан правильно с определением требуемого правила:
#pylint.out
path/to/locators.py:31: [WD001(xpath-locator-not-recommended), ] Locator strategy by xpath is not recommended
В проекте я настроилФайл конфигурации сонара с помощью (для запуска сонар-сканера):
#sonar-project.properties
sonar.python.pylint.reportPath=pylint.out
Затем я запустил сонар-сканер для SonarQube:
sonar-scanner -Dsonar.projectKey=Project1 -Dsonar.host.url=http://localhost:9000 -Dsonar.login=xxxxxxxxxxxxxxxxx
, но результат терминала содержит (вам нужно по крайней мере 1правило Pylint в профиле сонара, чтобы оно работало с отчетом Pylint):
WARN: Pylint rule 'WD001' is unknown in Sonar
И это обнаружение WD001 не отображается в пользовательском интерфейсе SonarQube.
Вопрос : Каксделать это правило видимым в SonarQube Analysis? (WD001 - это пользовательский идентификатор)
Я использую локальный докер SonarQube Сервер SonarQube 7.9.1
Сканер SonarQube 4.0.0.1744
python 3.6.8
pylint2.4.2