Gradle plugin for running groups of tests with varied runtime requirements.
Features
- Easily define and run categories of tests
- Uses the standard
gradle test
task - IDE support for running tests in parallel
- Built-in allocation testing support for realtime safety
- Built on JUnit 5, Gradle, and JVM
- Load resources using file APIs with the
resource.dir
JVM property runningOnCIServer
boolean JVM property to improve running tests locally- Support for projects using ihmc-build plugin
- Generate empty test results when no tests are present to avoid false negative builds
Download
plugins {
id("us.ihmc.ihmc-build") version "0.15.1"
id("us.ihmc.ihmc-ci") version "1.2.0"
}
User Guide
This plugin defines a concept of categories
. Categories are communicated via the category
Gradle property (i.e. gradle test -Pcategory=fast
)and are used to set up a test process to run tests based on tags, parallel execution settings, and JVM arguments.
Built in categories
The default settings can be scaled via the cpuThreads
property (i.e. -PcpuThreads=8
). The default value is 8
.
...
Run untagged tests as fast as possible.
Assume no special runtime requirements.
...
Run SCS video recordings.
(Will eventually move SCS Gradle plugin)
Custom categories
In your project's build.gradle.kts
(Kotlin): kotlin categories.create("slow-scs") { classesPerJVM = 1 // default: 1 maxJVMs = 2 // default: 2 maxParallelTests = 1 // default: 4 excludeTags += "none" // default: all includeTags += ["slow", "scs"] // default: empty jvmProperties += "some.arg" to "value" // default: empty List jvmArguments += "-Dsome.arg=value" // default: empty List minHeapSizeGB = 1 // default: 1 maxHeapSizeGB = 8 // default: 4 }
In your project's build.gradle
(Groovy): groovy def fast = categories.create("fast") fast.jvmProperties.putAll(fast.getScsDefaultJVMProps()) fast.minHeapSizeGB = 6 fast.maxHeapSizeGB = 8
Special JVM argument accessors:
getAllocationAgentJVMArg()
- Find location of-javaagent:[..]java-allocation-instrumenter[..].jar
getSCSDefaultJVMArgs()
- Default settings for SCS
The plugin will do a few other things too:
- If
-PrunningOnCIServer=true
, set-DrunningOnCIServer=true
. - Pass
-Dresources.dir
that points to your resources folder on disk. - Pass
-ea
JVM argument to enable JVM assertions
Examples
$ gradle test -Pcategory=fast // run fast tests
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
@Test
public void fastTest() { ... } // runs in fast category
@Tag("allocation")
@Test
public void allocationTest() { ... } // runs in allocation category
Running tests locally in your IDE
It is possible to run tests in parallel in your IDE, just pass these VM arguments:
-Djunit.jupiter.execution.parallel.enabled=true
-Djunit.jupiter.execution.parallel.config.strategy=dynamic