Как получить количество тестов, запущенных в Jenkins с JUnit XML-форматом в пост-задании script?

Есть ли способ получить количество тестов, которые были выполнены (или переданы) в Jenkins в Post Job Script (например, чтобы отправить этот номер в API состояния Github)?

Ответ 1

Я не видел доступа к этим номерам непосредственно из Publish JUnit test result report подключаемого модуля Jenkins.

Тем не менее, вы всегда можете использовать/анализировать xml или json, взятые из Jenkins REST API после успешного анализа XML-кода JUnit:

http://<jenkinsHost>/job/<YourJobName>/<JobID>/testReport/api/json?pretty=true или

чтобы он был более общим: http://<jenkinsHost>/job/<YourJobName>/lastSuccessfulBuild/testReport/api/json?pretty=true

для выхода JSON:

  {
      "duration" : 6109.1104,
      "failCount" : 0,
      "passCount" : 4389,
      "skipCount" : 0,
      "suites" : [
        {
        "cases" : [
          {
            ...
          }
        ],
        "duration" : 0.012,
        "id" : null,
        "name" : "EventTest",
        "stderr" : null,
        "stdout" : null,
        "timestamp" : null
         }
       ]
  }

http://<jenkinsInstanceHost>/job/<YourJobName>/<JobID>/testReport/api/xml

для вывода XML:

<testResult>
  <duration>6109.1104</duration>
  <failCount>0</failCount>
  <passCount>4389</passCount>
  <skipCount>0</skipCount>
 <suite>
  <case>
    <age>0</age>
    <className>
     ...
    </className>
    <duration>0.012</duration>
    <failedSince>0</failedSince>
    <name>Loop</name>
    <skipped>false</skipped>
    <status>PASSED</status>
  </case>
  <duration>0.012</duration>
  <name>EventTest</name>
 </suite>
</testResult>

Ответ 2

В итоге я просто написал простой скрипт bash, который делает супер простой синтаксический анализ xml, созданного после запуска тестов. Использование API в качестве альтернативного ответа - это крутая идея, если вам нужно сделать это удаленно. В моем случае это script:

total_tests=$(cat test-reports/*.xml | grep "<testsuite" | tr -s " " | cut -d " " -f6 | cut -d "=" -f2 | sed 's/\"//g' | paste -sd+ - | bc)