Пользовательское правило проверки Pylint неизвестно в сонаре - PullRequest
0 голосов
/ 14 октября 2019

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

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Проблемы с Pylint могут быть импортированы, только если их идентификатор Pylint известен анализатору Python SonarQube. Это ограничение способа интеграции Pylint с SonarQube. Это будет устранено , когда проблемы с Pylint импортируются как внешние проблемы в SonarQube . Тем временем вы должны полагаться на обходные пути, такие как тот, который вы нашли.

0 голосов
/ 15 октября 2019

возможно с описанием проблемы json и назначением файла отчета для сонара. переменная https://docs.sonarqube.org/latest/analysis/generic-issue/

...