2015-02-25 11 views
12

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

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

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

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

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

JSTestDriverSensor.java код из ГИДРОЛОКАТОРА 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 порожденный ГИДРОЛОКАТОР GULP плагиным (использует ГИДРОЛОКАТОР 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" 
+0

Где находятся тестовые файлы? Являются ли они присутствующими при поиске сонара, т. Е. App/main/testSpec.js? –

+0

Да, его настоящее в app/main/testSpec.js ... – Sunil

+0

У меня возникла аналогичная проблема, и я обнаружил, что плагин, похоже, не правильно находит тестовые ресурсы, когда они не находятся в корне места тестирования, а анализ выполняется в Windows. Вы тоже работаете в Windows? – ioscode

ответ

2

Для тех, кто читает это и с помощью Grunt (вместо Глотка) есть плагин для grunt and karma для преобразования результатов модульного тестирования в соответствующий формат для импорта в 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.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. Я исправил это, просто изменив свои тестовые имена на нас, подчеркивая с места в карьер.

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

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