2015-02-25 14 views
12

Co robię? Obecnie pracuję nad skonfigurowaniem ciągłego procesu integracji/dostarczania dla aplikacji frontowych. Planujemy użyć SonarQube jako narzędzia jakości kodu i chcemy zaimportować wyniki testu junitowego/pokrycia kodu w SONAR do dalszej analizy.importowanie javascript xml junit testy do SONAR przy użyciu polecenia jstestdriver nie powiodło się

Udało mi się pomyślnie zaimportować raport o zasięgu kodu javascript do SONAR. Używamy Gulp/Karma/PhantomJS/Jasmine itp. I korzystamy z reportaży Pokarm/Junit do generowania wyników testów. Nazwa pliku testowego Junit to TEST-xunit.xml.

Gdzie utknąłem? Potrzebuję twojej pomocy/wskazówek ekspertów dotyczących importowania wyników testów JavaScript do SONAR. Próbowałem różnych rzeczy, ale w jakiś sposób nie mogłem zaimportować źródeł testów jednostkowych do SONAR.

Co wszystko, czego próbowałem? Wcześniej używaliśmy SONAR Runner 2.3, SONAR Qube 4.5/Javascript plugin 2.2 i mogliśmy importować statystyki wysokiego poziomu Junit, takie jak testy zdane/nieudane itd. Jednak nie byliśmy w stanie przejść do poszczególnych testów, aby zobaczyć, który test został zaliczony/nieudany .

Po dalszych badaniach zauważyliśmy, że wtyczka Javascript 2.3 dodaje więcej komunikatów do scenariusza, jeśli nie znajdzie źródeł testowych. Były też inne zależności, dzięki którym SONAR qube został zaktualizowany do wersji 5.0. Przetestowano z programem SONAR runner 2.4 i obserwowano następujące komunikaty. Obecnie statystyki wysokiego poziomu również nie są importowane.

JSTestDriverSensor.java kod jest od SONAR Javascript plugin na 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 wygenerowane przez wtyczkę SONAR haustem (używa 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 

Próbowałem nawet osobnej instalacji SONAR 2.4, ale nadal otrzymuję te same komunikaty o błędach.

Pytanie? 1. Musi być coś, co przeoczam i jakoś nie jestem w stanie określić, co może być przyczyną tego. Myślę, że albo ustawiam błędnie ścieżkę katalogu testowego, albo JSTestDriverSensor źle interpretuje plik katalogu testowego. Propozycje? 2. Na początek chcę zaimportować przykładowy plik junit xml, aby sprawdzić, czy zostanie pomyślnie zaimportowany. Potem mogę zmodyfikować wyjście generatora karma junit, aby dopasować wejście junit xml. Potrzebujesz tutaj przykładów referencyjnych.

Dołączanie niektórych dzienników. Zmodyfikowałem junit xml, aby ustawić różne nazwy klas, aby sprawdzić, czy JsTestDriverSensor je znajdzie. Ale nie jest!

[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

Gdzie znajdują się pliki testowe? Czy są obecne tam, gdzie sonar szuka, np. App/main/testSpec.js? –

+0

Tak, jest obecny w aplikacji/main/testSpec.js ... – Sunil

+0

Mam podobny problem i odkryłem, że wtyczka nie znajduje odpowiednich zasobów testowych, gdy nie znajdują się w katalogu głównym lokalizacji testowej i Analiza jest uruchamiana w systemie Windows. Czy korzystasz również z systemu Windows? – ioscode

Odpowiedz

2

Dla każdego, kto czyta to i przy użyciu Grunt (zamiast Gulp) istnieje plugin do grunt and karma do konwersji wyników testów jednostkowych w odpowiednim formacie do importu do SonarQube. Zainstaluj wtyczkę i ustaw konfigurację Grunt. Na przykład:

 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' 
       } 
      }] 
     } 

Domyślnie zajmie to pliki utworzone i przetworzone przez karmę./ Tmp/sonar/wyniki

Następnie we właściwościach sonarowych dodać coś takiego

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

Uwaga: Jedną rzeczą, która mnie ugryzła początkowo było to, że testy nazwane jak test.spec.js zostanie zamieniony na test_spec, gdy Sonar działa, więc gdy idzie do odwzorowania wyników do plików, nadal szuka pliku test_spec.js zamiast test.spec.js. Naprawiłem to po prostu zmieniając moje testowe nazwy na nam podkreślenie nietoperza.

Inna uwaga: Używając tego podejścia z Jenkinsem, użyłem go tylko do konwersji wyników testu, a nie do niczego innego. Z tego powodu zadanie Grunt dla karmaSonar zakończyłoby się niepowodzeniem (ponieważ nie było żadnego wystąpienia SonarQube skonfigurowanego lub znalezionego na pudełku), więc jeśli nie chcesz, aby cała twoja kompilacja się nie udała, upewnij się, że używasz flagi --force z Gruntem . Zauważyłem, że pliki zostały przekonwertowane, nawet jeśli zadanie nie powiodło się. Następnie użyłem kroku Invoke Standalone SonarQube Analysis w moim zadaniu, aby uruchomić analizę kodu statycznego i pobrać wyniki testu.

Mam nadzieję, że to pomoże!

Powiązane problemy