Split Tests Java
ActionsTags
(2)Divides a test suite into groups with equal execution time, based on prior test timings.
This ensures optimal parallel execution. Since test file runtimes can vary significantly, splitting them evenly without considering timing may result in inefficient grouping.
name: Integration Testson:
pull_request:
branches: '**'workflow_dispatch:
concurrency:
group: integration-test-${{ github.ref }}cancel-in-progress: trueenv:
split-total: 10jobs:
generate-split-index-json:
name: Generate split indexesruns-on: ubuntu-latestoutputs:
json: ${{ steps.generate.outputs.split-index-json }}steps:
- name: Generate split index list id: generateuses: donnerbart/split-tests-java-action/generate-split-index-json@v1with:
split-total: ${{ env.split-total }}integration-test:
name: 'Split #${{ matrix.split-index }}'runs-on: ubuntu-latestneeds:
- generate-split-index-jsonstrategy:
fail-fast: falsematrix:
split-index: ${{ fromjson(needs.generate-split-index-json.outputs.json) }}steps:
- name: Checkout repositoryuses: actions/checkout@v4with:
path: project
- name: Checkout JUnit reportsuses: donnerbart/split-tests-java-action/checkout-junit-reports@v1with:
git-branch: junit-reports/${{ github.base_ref }}path: junit-reports
- name: Set up JDK 21uses: actions/setup-java@v4with:
distribution: temurinjava-version: 21
- name: Set up Gradleuses: gradle/actions/setup-gradle@v4
- name: Split testsid: split-testsuses: donnerbart/split-tests-java-action@v1with:
split-index: ${{ matrix.split-index }}split-total: ${{ env.split-total }}glob: '**/project/src/integrationTest/**/*IT.java'junit-glob: '**/junit-reports/*.xml'format: 'gradle'new-test-time: 'average'debug: true
- name: Run integration testsrun: ./gradlew :integrationTest ${{ steps.split-tests.outputs.test-suite }}
- name: Upload JUnit report artifactuses: actions/upload-artifact@v4with:
name: junit-xml-reports-${{ matrix.split-index }}path: '**/test-results/integrationTest/*.xml'merge-junit-reports:
name: Merge JUnit reportsruns-on: ubuntu-latestneeds:
- integration-testpermissions:
contents: writesteps:
- name: Merge JUnit reportsuses: donnerbart/split-tests-java-action/merge-junit-reports@v1with:
git-branch: junit-reports/${{ github.base_ref }}artifact-name: junit-xml-reportssplit-artifact-pattern: junit-xml-reports-*Split Tests Java is not certified by GitHub. It is provided by a third-party and is governed by separate terms of service, privacy policy, and support documentation.