Note from the publisher: You have managed to find some of our old content and it may be outdated and/or incorrect. Try searching in our docs or on the blog for current information.
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
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)?
CircleCI / JUnit support
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 config.yml
file.
- store_test_results:
path: /tmp/test-results
Installing gotestsum
Requirements
- Go v1.10 or later
Installing locally
As with most Go applications, running gotestsum
can be as simple as placing the binary on your $PATH
:
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.
Compiling a binary
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
Installing on CircleCI
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.