we’re using (SonarQube(Developer Edition Version 9.5 (build 56709)), SonarScanner 4.7.0.2747),
C code and cpputest generates junit format xml’s.
we’re trying to achieve a display number of unit tests executed
we’ve tried setting path of junit xml’s location “sonar.junit.reportPaths=build/junit_reports/” or “sonar.junit.reportPaths=build/junit_reports/**/cpputest_*.xml”, reports are generated and gitlab picks loads them successfully, tested in MR also after merging to main branch still not working.
is it not possible to display number of tests or is something possible wrong with the configuration?
Per the docs, to get stats about the tests themselves (versus their coverage) you need to be passing in a test execution report, using the sonar.cfamily.cppunit.reportsPath parameter.
08:04:14.865 ERROR: Error during SonarScanner execution
com.sonar.cpp.plugin.visualstudio.XmlParserHelper$ParseErrorException: Missing root element <TestRun> in /workspaces/project/build/junit_reports/cpputest_HexUtilities.xml at line 2
at com.sonar.cpp.plugin.visualstudio.XmlParserHelper.parseError(XmlParserHelper.java:125)
at com.sonar.cpp.plugin.visualstudio.XmlParserHelper.checkRootTag(XmlParserHelper.java:43)
at com.sonar.cpp.plugin.cppunit.CppunitXmlParser.checkRootTag(CppunitXmlParser.java:28)
at com.sonar.cpp.plugin.cppunit.CppunitXmlParser.parse(CppunitXmlParser.java:22)
at com.sonar.cpp.plugin.cppunit.CppunitSensor.lambda$execute$1(CppunitSensor.java:54)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
at java.base/java.util.Iterator.forEachRemaining(Unknown Source)
at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
at com.sonar.cpp.plugin.cppunit.CppunitSensor.scan(CppunitSensor.java:87)
at com.sonar.cpp.plugin.cppunit.CppunitSensor.execute(CppunitSensor.java:52)
at org.sonar.scanner.sensor.AbstractSensorWrapper.analyse(AbstractSensorWrapper.java:64)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:85)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.lambda$execute$1(ModuleSensorsExecutor.java:59)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.withModuleStrategy(ModuleSensorsExecutor.java:77)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:59)
at org.sonar.scanner.scan.SpringModuleScanContainer.doAfterStart(SpringModuleScanContainer.java:81)
at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:188)
at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:167)
at org.sonar.scanner.scan.SpringProjectScanContainer.scan(SpringProjectScanContainer.java:392)
at org.sonar.scanner.scan.SpringProjectScanContainer.scanRecursively(SpringProjectScanContainer.java:388)
at org.sonar.scanner.scan.SpringProjectScanContainer.doAfterStart(SpringProjectScanContainer.java:357)
at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:188)
at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:167)
at org.sonar.scanner.bootstrap.SpringGlobalContainer.doAfterStart(SpringGlobalContainer.java:135)
at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:188)
at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:167)
at org.sonar.batch.bootstrapper.Batch.doExecute(Batch.java:72)
at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:66)
at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
at com.sun.proxy.$Proxy0.execute(Unknown Source)
at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:189)
at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:138)
at org.sonarsource.scanner.cli.Main.execute(Main.java:112)
at org.sonarsource.scanner.cli.Main.execute(Main.java:75)
at org.sonarsource.scanner.cli.Main.main(Main.java:61)
Per the docs the only options are CPPUnit reports, passed via sonar.cfamily.cppunit.reportsPath or the generic test data format, passed via sonar.testExecutionReportPaths.