Capturing profiles

?> This feature was first made available in Testground v0.5.4 + sdk-go v0.2.8.

Profiling is a powerful way to understand how the code under test behaves under the hood. Different programming languages support different types of profiles. For example, Go supports these types:

  • CPU profiles.

  • Heaps and allocs profiles.

  • Goroutine, threads, mutex and block profiles.

Refer to the pprof package godocs for more information.

Testground has first-class support for capturing profiles continuously throughout the test execution, and it's very versatile:

  • You can choose to profile all test run instances, or just a subset of them (per group).

  • You can choose which profile types to record.

  • You can set the sampling interval or frequency of capture for snapshot-type profiles (e.g. goroutine, heap, etc. profiles in go).

?> Success Because profiling is a language feature, Testground delegates the capture to the corresponding SDK by sending the profiling requirements for each instance inside the TEST_CAPTURE_PROFILES� env variable.

The profiles are written to the output path for each instance, and are available in the output bundle generated by testground collect or the testground run --collect flag.

Enabling profiles

You can enable profiles by setting the profiling settings under the run configuration.

To enable profiling globally

composition.toml

...

[global.run]
# this enables a continuous CPU profile, a heap profile every 5 seconds,
# and an allocs profile every 10 seconds.
profiles = { cpu = "true", heap = "5s", allocs = "10s" }

...

To enable profiling in a single group

composition.toml

...

[[groups]]
id = "low-latency"
[groups.run]
# same settings as above
profiles = { cpu = "true", heap = "5s", allocs = "10s" }

...

Last updated