Flaky test tracking in Kotlin with JUnit
We will be setting up a Kotlin project with Gradle, Github Actions for CI, and JUnit for our tests. A demo repo is here if you want to see the full code.
Overview of the steps:
- New Gradle project
- Add a test
- Run
gradlew test
- Verify report xml has been generated in your build directory
- Setup our test script
- Setup Github Actions
- Sample action
- Update your TR_UPLOAD_TOKEN
- Push your changes
1) New Gradle project
Either create a new project or use an existing one, our sample app used Intellij for creating a new one. As long as you are able to create and run tests with gradlew test
then you should be good to go.
2) Add a test
Create a simple test if you do not already have one, this is our hello world test
// src/test/kotlin/HelloTest.kt
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
class HelloTest {
@Test
fun simplest() {
assertEquals(2, 1 + 1, "1 + 1 should equal 2")
}
}
3) Run gradlew test
Run gradlew test
hopefully your test suite passes, but either a pass or fail will work. As long as it runs we can go on to the next step.
4) Verify report xml has been generated in your build directory
The default location for test results is in the build directory of your app. There should be an xml file build/test-results/test/TEST-HelloTest.xml
if you created the hello world test, as well as other tests in the build/test-results/test/
directory if you have other tests.
5) Setup our test script
The test results need to be uploaded after the test suite has finished running, regardless of pass or fail. There are many ways to achieve this, a simple one is to use a test script like this using trap:
#!/bin/bash
set -e
export TR_UPLOAD_TOKEN="<add_your_token_here>"
trap 'testrecall-reporter' EXIT
./gradlew test
6) Setup Github Actions
Here is an example github action:
name: Java CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up java
uses: actions/setup-java@v1
with:
java-version: 11
- name: Setup test dependencies
run: |
curl -sL https://get.testrecall.com/reporter | bash
- name: Build with Gradle
run: ./test.sh
To start we check out our code and set up Java. Afterward, we install the TestRecall reporter, this makes the testrecall-reporter
command available. Lastly, we call invoke our test.sh script from earlier. This runs our tests and uses trap to invoke testrecall-reporter
.
7) Update your TR_UPLOAD_TOKEN
Our example used <add_your_token_here>
, replace this with the value from your TestRecall project.
8) Push your changes
With everything set up, push your changes and you should see your test results in TestRecall.