Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to fail Jenkins build if no tests were run?

We are running TestNG tests using Gradle on Jenkins.

Job configuration:
Build section -> Invoke Gradle Script -> Use Gradle Wrapper -> Tasks:

clean test -Dgroups=myTestNGTestGroupName

In Jenkins Console Output I can see the logs from execution of gradlew.bat with specific parameters (one of them is -Dgroups=myTestNGTestGroupName)).

We have quite a lot of Jenkins jobs and automation Selenium tests.
Since that on daily basis we are checking only failed jobs.

During refactoring tests TestNG group name may be changed or typo may occur.
If you changed the test group name in test repository and forgot to update Jenkins job:
0 tests are executed and job is still passing (build is successful).

How can I tell Jenkins to mark build as non-successful if no tests were executed?

like image 974
drets Avatar asked Oct 30 '22 13:10

drets


1 Answers

TestNG generates testng-results.xml file every time after test run
(even if 0 tests were executed).

We can analyze this file. The simplest solution which I found is using Text-finder Plugin
(which in my case was already added to Jenkins)

I added Jenkins Text Finder in Post-build Actions as follow: text-finder-plugin

How it looks in Jenkins Console Output logs:

BUILD SUCCESSFUL

Total time: 42.105 secs
Build step 'Invoke Gradle script' changed build result to SUCCESS
Archiving artifacts
Checking <testng-results skipped="0" failed="0" total="0" passed="0">
c:\jenkins\workspace\my-job-name\build\reports\tests\testng-results.xml:
<testng-results skipped="0" failed="0" total="0" passed="0">
Build step 'Jenkins Text Finder' changed build result to UNSTABLE
...
Finished: UNSTABLE
like image 106
drets Avatar answered Nov 10 '22 05:11

drets