gpt4 book ai didi

sonarqube - 使用 jstestdriver 将 javascript xml junit 测试导入到 SONAR 失败

转载 作者:行者123 更新时间:2023-12-03 23:58:11 25 4
gpt4 key购买 nike

我在做什么?
我目前正在为前端应用程序设置持续集成/交付管道。我们计划使用 SonarQube 作为代码质量工具,并希望在 SONAR 中导入 junit 测试结果/代码覆盖率以进行进一步分析。

我能够成功地将 javascript 代码覆盖率报告导入到 SONAR。我们正在使用 Gulp/Karma/PhantomJS/Jasmine 等,并使用 Karma 覆盖率/Junit 报告器来生成测试结果。 Junit 测试文件名为 TEST-xunit.xml。

我被困在哪里?
我需要您在将 Javascript 测试结果导入 SONAR 方面的帮助/专家指导。我尝试了不同的东西,但不知何故无法将单元测试源/结果导入 SONAR。

我都试过什么?
早些时候,我们使用 SONAR Runner 2.3、SONAR Qube 4.5/Javascript 插件 2.2 并能够导入 Junit 高级统计数据,如测试通过/失败等。但是,我们无法导航到单个测试以查看哪个测试通过/失败。

在进一步研究时,注意到 Javascript 插件 2.3 为场景添加了更多消息,如果它没有找到测试源。此外,还有一些其他依赖项,因此将 SONAR qube 升级到 5.0。使用 SONAR runner 2.4 进行测试并观察到以下消息。目前,高级统计数据也没有被导入。

JSTestDriverSensor.java
代码来自 github 上的 SONAR Javascript 插件)

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"

最佳答案

对于任何阅读本文并使用 Grunt(而不是 Gulp)的人来说,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/results

然后在您的 Sonar 属性中添加类似
sonar.tests=./tests/unit
sonar.sources=./src
sonar.javascript.jstestdriver.reportsPath=.tmp/sonar/results/
sonar.javascript.lcov.reportPath=.tmp/sonar/results/coverage_report.lcov

注:一开始让我感到困扰的一件事是,当 Sonar 运行时,名为 test.spec.js 的测试将被转换为 test_spec,因此当它将结果映射回文件时,它仍然会寻找 test_spec.js 而不是 test .spec.js。我只是通过将我的测试名称更改为我们下划线来解决这个问题。

另注:在 Jenkins 中使用这种方法时,我仅将其用于测试结果的转换,而不用于其他任何用途。因此,karmaSonar 的 Grunt 任务将会失败(因为在盒子上没有配置或找到 SonarQube 的实例),所以如果你不希望你的整个构建失败,请确保对 Grunt 使用 --force 标志.我发现即使任务失败,文件也能正常转换。然后我在我的工作中使用 Invoke Standalone SonarQube Analysis 步骤来运行静态代码分析并获取测试结果。

希望这有帮助!

关于sonarqube - 使用 jstestdriver 将 javascript xml junit 测试导入到 SONAR 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28714045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com