Подтвердить что ты не робот

Импорт javascript xml junit тестов в SONAR с помощью jstestdriver не удается

Что я делаю? В настоящее время я работаю над настройкой Continuous Integration/Delivery для приложений на передней панели. Мы планируем использовать SonarQube в качестве инструмента для улучшения качества кода и хотим импортировать результаты тестирования/кода кода junit в SONAR для дальнейшего анализа.

Мне удалось успешно импортировать отчет о покрытии кода JavaScript в SONAR. Мы используем Gulp/Karma/PhantomJS/Jasmine и т.д. И используем рецензентов Karma/Junit для генерации результатов теста. Имя файла теста Junit - TEST-xunit.xml.

Где я застрял? Мне нужна ваша помощь/экспертное руководство по импорту результатов теста Javascript в SONAR. Я пробовал разные вещи, но каким-то образом не смог импортировать источники/результаты unit test в SONAR.

Что я пробовал? Раньше мы использовали SONAR Runner 2.3, SONAR Qube 4.5/Javascript plugin 2.2 и могли импортировать статистику высокого уровня Junit, например, тесты прошли/не удалось. Однако мы не смогли перейти к отдельным тестам, чтобы увидеть, какой тест прошел/не удалось.

При дальнейшем исследовании заметили, что плагин Javascript 2.3 добавил больше сообщений для сценария, если он не находит тестовые источники. Кроме того, были некоторые другие зависимости, поэтому обновленная версия SONAR до 5.0. Протестировано с помощью SONAR runner 2.4 и наблюдается следующее сообщение. В настоящее время статистика высокого уровня также не импортируется.

JSTestDriverSensor.java код из SONAR Javascript плагин на github)

LOG.warn("Test result will not be saved for test class \"{}\", because SonarQube associated resource has not been found using file name: \"{}\"",
    getUnitTestClassName(classKey), getUnitTestFileName(classKey));

sonar-runner.properties, сгенерированный плагином SONAR Gulp (использует SONAR Runner 2.3)

sonar.projectBaseDir=C:/xxxxx/homepage2
sonar.host.url=http://xxxxx:9000/sonarqube/
sonar.jdbc.url=jdbc:mysql:// xxxxx:3306/sonar
sonar.jdbc.username= xxxxx
sonar.jdbc.password= xxxxx
sonar.projectKey=homepage:0.0.0
sonar.projectName=homepage
sonar.projectVersion=0.0.0
sonar.sources=src/app,src/components
sonar.exclusions=src/**/*spec.js
sonar.tests=test
sonar.language=js
sonar.sourceEncoding=UTF-8
sonar.javascript.lcov.reportPath=reports/coverage/lcov.info
sonar.javascript.jstestdriver.reportsPath=reports/unit

Я даже попробовал отдельную установку SONAR runner 2.4, но продолжаю получать те же сообщения об ошибках.

Вопрос 1. Должно быть что-то, что я пропускаю и как-то не могу определить, что может быть причиной этого. Я думаю, что либо я устанавливаю неправильный путь тестового каталога, либо JSTestDriverSensor неправильно интерпретирует файл тестового каталога. Предложения? 2. Для начала я просто хочу импортировать образец junit xml файла, чтобы узнать, успешно ли он импортируется. После этого я могу изменить выход генератора karma junit для соответствия входному junit xml. Здесь нужны некоторые ссылочные примеры.

Прикрепление некоторых журналов. Я изменил junit xml, чтобы установить разные имена классов, чтобы узнать, находит ли JsTestDriverSensor его. Но его нет!

[23:31:24] 23:31:24.122 DEBUG - Language of file 'src/app/main/textOverride.controller.js' is detected to be 'js'
23:31:24.122 DEBUG - Language of file 'src/app/main/main.routes.js' is detected to be 'js'
23:31:24.123 DEBUG - Language of file 'test/app/main/testSpec.js' is detected to be 'js'

[23:31:24] 23:31:24.138 DEBUG - Language of file 'src/components/navbar/navbar.controller.js' is detected to be 'js'

[23:31:24] 23:31:24.169 INFO  - 7 files indexed

[23:31:26] 23:31:26.632 INFO  - Quality profile for js: Sonar way

[23:31:26] 23:31:26.670 DEBUG - Sensors : QProfileSensor -> JavaScriptSquidSensor -> JsTestDriverSensor -> CoverageSensor -> InitialOpenIssuesSensor -> ProjectLinksSensor -> VersionEventsSensor -> FileHashSensor -> SCM Sensor (wrapped) -> CPD Sensor (wrapped)
23:31:26.671 INFO  - Sensor QProfileSensor...

[23:31:26] 23:31:26.680 INFO  - Sensor QProfileSensor done: 9 ms
23:31:26.680 INFO  - Sensor JavaScriptSquidSensor...

[23:31:26] 23:31:26.950 INFO  - 6 source files to be analyzed

[23:31:27] 23:31:27.081 INFO  - 6/6 source files analyzed

[23:31:27] 23:31:27.113 INFO  - Sensor JavaScriptSquidSensor done: 433 ms

[23:31:27] 23:31:27.114 INFO  - Sensor JsTestDriverSensor...
23:31:27.114 INFO  - Parsing Unit Test run results in Surefire format from folder C:\xxxxx\homepage2\reports\unit

[23:31:27] 23:31:27.176 WARN  - Test result will not be saved for test class "app.main.testSpec", because SonarQube associated resource has not been found using file name: "app/main/testSpec.js"

[23:31:27] 23:31:27.177 WARN  - Test result will not be saved for test class "src.app.main.testSpec", because SonarQube associated resource has not been found using file name: "src/app/main/testSpec.js"
4b9b3361

Ответ 1

Для тех, кто читает это и используя Grunt (вместо Gulp), есть плагин для grunt и karma для преобразования результатов unit test в соответствующий формат для импорта в SonarQube. Установите плагин и настройте конфигурацию Grunt. Например:

        my_target: {
            project: {
                key: 'projectKey',
                name: 'projectName',
                version: package.version
            },
            paths: [{
                cwd: '.',
                src: './src', // source being tested
                test: './tests/unit', // tests for the source
                reports: {
                    // karma output for unit test results
                    unit: './tests/reports/dev/completion/unit.xml',
                    // karma output for unit test coverage
                    coverage: './tests/reports/dev/coverage/lcov/lcov.info'
                }
            }]
        }

По умолчанию для этого создаются и создаются карма, созданные и конвертируемые в. /tmp/sonar/results

Затем в свойствах вашего сонара добавьте что-то вроде

sonar.tests=./tests/unit
sonar.sources=./src
sonar.javascript.jstestdriver.reportsPath=.tmp/sonar/results/
sonar.javascript.lcov.reportPath=.tmp/sonar/results/coverage_report.lcov

Примечание.. Сначала мне показалось, что тесты, названные как test.spec.js, будут преобразованы в test_spec при запуске Sonar, поэтому, когда он будет отображать результаты на файлов, он по-прежнему ищет test_spec.js вместо test.spec.js. Я исправил это, просто изменив свои тестовые имена на нас, подчеркивая с места в карьер.

Другое примечание: При использовании этого подхода с Jenkins я использовал его только для преобразования результатов теста, а не для чего-либо еще. Из-за этого задача Grunt для karmaSonar потерпит неудачу (так как не было экземпляра SonarQube, настроенного или найденного в окне), поэтому, если вы не хотите, чтобы вся ваша сборка была неудачной, обязательно используйте флаг -force с Grunt, Я обнаружил, что файлы были преобразованы просто отлично, даже если задача не удалась. Затем я использовал Invoke Standalone SonarQube Analysis в моей задаче для запуска анализа статического кода и получения результатов теста.

Надеюсь, это поможет!