Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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