jenkins获取单元测试数据

定义要获取的指标

testFailCount、testSkipCount、testTotalCount。分别为测试失败用例总数、跳过的测试用例总数和用例总数。获取到这些指标后就能对单个项目的单元测试设置一下度量指标。(单元测试覆盖率可以在SonarQube平台获取)

获取指标数据的接口

我之前第一想法是通过日志获取到这些数据,但并没有简单的插件能够完成。BlueOcean上面有测试数据相关的接口,貌似可以获取数据(但是我并没有获取到~)于是直接使用jenkins的json api尝试获取,果然是有的,只要应用了单元测试(junit)的项目都会有这个类和相对应的数据指标。

jenkins单元测试数据获取接口

接口地址: ${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"}

前置条件:

1、readJSON需要jenkins安装script-security、pipeline-utility-steps插件。(安装有依赖顺序,从左到右)。

2、调用接口获取数据前,首先要使用junit插件获取数据。

pipeline实现:

node("master"){
    def testsFailCount = "0"
    def testSkipCount = "0"
    def testTotalCount = "0"

   sh "mvn clean package"
   junit allowEmptyResults:true,testResults: "target/surefire-reports/*.xml" 

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

猜你喜欢

转载自blog.csdn.net/a910196454/article/details/107154968
今日推荐