testFailCount、testSkipCount、testTotalCount。分别为测试失败用例总数、跳过的测试用例总数和用例总数。获取到这些指标后就能对单个项目的单元测试设置一下度量指标。(单元测试覆盖率可以在SonarQube平台获取)
获取指标数据的接口
我之前第一想法是通过日志获取到这些数据,但并没有简单的插件能够完成。BlueOcean上面有测试数据相关的接口,貌似可以获取数据(但是我并没有获取到~)于是直接使用jenkins的json api尝试获取,果然是有的,只要应用了单元测试(junit)的项目都会有这个类和相对应的数据指标。
一起调试接口
接口地址: ${JOB_URL}${BUILD_ID}/api/json?pretty=true
接口返回:
[_class, actions, artifacts, building, description, displayName, duration, estimatedDuration, executor, fullDisplayName, id, keepLog, number, queueId, result, timestamp, url, changeSets, culprits, nextBuild, previousBuild]
测试数据:
{"_class":"hudson.tasks.junit.TestResultAction","failCount":0,"skipCount":0,"totalCount":1,"urlName":"testReport"}
一起编写Jenkinsfile
node("xxxxx"){ def testsFailCount = "0" def testSkipCount = "0" def testTotalCount = "0" response = httpRequest ignoreSslErrors: true, url: "${JOB_URL}${BUILD_ID}/api/json?pretty=true" //println(response.content) response = response.content //使用json方法偶尔出现序列化问题,果断采用readJSON def info = readJSON text: """${response}""" //println(info.keySet()) //println(info["actions"]) for (cls in info["actions"]){ if (cls.get("_class")){ if (cls["_class"] == "hudson.tasks.junit.TestResultAction"){ println(cls) testsFailCount = cls["failCount"] testSkipCount = cls["skipCount"] testTotalCount = cls["totalCount"] } } } println([testsFailCount,testSkipCount,testTotalCount])}