One of the many great things about Go (Golang) is how simple it is to run tests. With the changes we saw in Go v1.11, running tests is as simple as:
# To test only your current module go test ./... # To test your module as well as its direct and indirect dependencies go test all
In this post, I'm going to show you how we can make the output of
go test more useful for local development as well as for CircleCI.
gotestsum is a CLI tool written in Go that runs
go test for you. It enhances the output, making it much more palatable. As described on its GitHub repository, it "runs tests, and prints friendly test output and a summary of the test run."
Here's how it looks:
That's pretty cool for local development, but what about using it for continuous integration (CI)?
Most CI providers support saving tests results in the JUnit format. What the CI provider does with it can vary, but this usually means accessing historical test data, cool charts and graphs, etc. CircleCI supports collecting test metadata as long as it's in JUnit format. Since
go test doesn't output in the JUnit format natively, we'll use
gotestsum to do that for us.
gotestsum --junitfile unit-tests.xml
The command above will output your test results in the JUnit format. You can then tell CircleCI to use that file as test metadata via your CircleCI
- store_test_results: path: /tmp/test-results
- Go v1.10 or later
As with most Go applications, running
gotestsum can be as simple as placing the binary on your
curl -sSL "https://github.com/gotestyourself/gotestsum/releases/download/v0.3.1/gotestsum_0.3.1_linux_amd64.tar.gz" | sudo tar -xz -C /usr/local/bin gotestsum
The above command installs v0.3.1 of
gotestsum, the most recent version as of this writing. If a new version is available, update the version number in the URL. You can also replace
linux in the URL with
darwin for macOS users. The binary packages available are for 64-bit x86 systems. See the next section to compile your own.
If you have a 32-bit system, ARM, or some other need, here's how to compile and install a custom binary:
go get -u gotest.tools/gotestsum
If you are using a Golang CircleCI Docker Convenience Image (
circleci/golang) then congratulations,
gotestsum is already pre-installed for you! If not, I'd suggest following the installing locally instructions and applying that to your CircleCI
config.yml file or, for a custom image, within a Dockerfile.
gotestsum is a project maintained by Daniel Nephin, an engineer at CircleCI.