Load Impact and Team City

Automated Performance Testing

Get started

TeamCity

We believe in goal oriented and automated load testing. That's why we built k6 to work well in such environments, integrating nicely with tools like TeamCity, continuous integration and delivery server from JetBrains.

This guide will help you get up and running with k6, TeamCity and LoadImpact Insights. Content on this page assumes you are familiar with k6 and TeamCity.

It also assumes you have a LoadImpact account. If not, go get one here – it’s free. Once you have your account setup, try this sample of how to include load testing in your TeamCity setup.

The load test

It starts with code. This is the load test example script we'll be using in this guide. It tests our example site test.loadimpact.com:

k6-circleci-load-test-script.5469d6e5affe.png

To describe the load test script in words:

  1. The test will ramp up from 0 to 10 users over 60s, stay flat at 10 users for another 60s, before ramping down to 0 users again over 60s
  2. We've set a goal that the 95th percentile response time should be below 500ms. This step, k6 thresholds, is essential, it's how we define our goals which is the basis for the pass/fail mechanism to work that is built into k6. If a threshold fails, k6 will end with a non-zero exit code, which in turn indicates a failed build step to Team City (and other CI tools).
  3. In the load test "main" function we define a group Front page inside which, we make a request, check the response status code and sleep for 10s, before letting the user loop from the top of the function.

 

Configuration

Next we created a TeamCity project by the name k6_demo which has one build configuration, k6_build.

 

teamcity-build.6ccc527254d8.png

 

And here is the history when we have executed a couple of times.

 

teamcity-build-list.b03eeb0d21bc.png

 

So slightly more interesting – let’s take a look at the settings of the k6 configuration.

 

teamcity-config-general.10de301fedec.png

 

Everything is plain default, no specific settings needed to run a k6 load test.

There is only one build step needed to run the load test. It works fine on both *nix and Windows.

 

teamcity-config-buildstep.4140fa508f50.png

 

The Build Step in TeamCity is a command line build step.

Only one requisite is needed and that is k6 needs to be in the PATH of the build agent.

There is an old TeamCity caveat and that needs to be handled. Even if it is only a single command line you should select to Run a custom script which only contains a single command line to run k6. If not it will add a duplicate set of double quotes to the entire command which means it will not execute.

This is the entire custom script needed.
k6 run --quiet -o cloud github.com/loadimpact/k6-circleci-example/loadtests/main.js

 

Load Impact Insights

Before we dive into the details – let's get some essentials from your Load Impact account. We need the Insights API key so you can analyze the results in the Load Impact Insights cloud service. The Insights API key you get in your Load Impact account when you are logged in.

 

 

Go to your profile, i.e. click your name at the top left and then select “Insider program”. Then copy if from the Manage API token text box underlined in red. The key itself has been masked in the sample below.

 

 

Now you have an API key for your account to store the results from the test

Before running, make sure k6 is installed in the executable PATH of your build node. Install instructions can be found in the k6 documentation.

 

 

 

Environment variables

k6 will pick up the LoadImpact API key from the environment variable K6CLOUD_TOKEN so it has to be in the environment when executed. This is set in the TeamCity build settings where you add a new parameter by that name, K6CLOUD_TOKEN.

 

teamcity-config-envvars.49fc716bf4f4.png
 

Execution

Now let's execute a build. Once started it will look something like the below.

 

teamcity-build-running.f148d80269b4.png

 

And looking into the details of the build log itself we see the output from k6 as it's running.

 

teamcity-build-log.5466548b400a.png

 

If you expand to see the details of the build log there's also a direct link to the full results and analysis in LoadImpact Insights where you can always find all the results of all your tests.

 

teamcity-build-log-insights-url.17509d2c3701.png

 

If the load test is successful all is fine. If it fails it will exit with a non-zero exit code and thus fail the build step as well.

 

Result analysis

A passing build is not much fun to look at. But, when builds fail, you want to understand why. No exception when it's a load test failing the build. We've built Insights to be a perfect companion to k6 for analysing results! The analysis workflow is error driven, meaning the goal is to help you quickly finding the cause of the failed load test. Read more about Insights functionality on this and adjacent pages in our Knowledge Base.

k6-circleci-result-analysis-insights.33fcc05f3d82.png

That's it, happy automated testing!