When you create a new load test, you'll often first define the HTTP requests that you will use to test your system.
Making HTTP Requests
A simple GET request looks like this:
For something slightly more complex, here's a POST request to authenticate on a service or site:
Available methods
The http module handles all kinds of HTTP requests and methods.
Name | Value |
---|---|
batch() | Issue multiple HTTP requests in parallel (like e.g. browsers tend to do). |
del() | Issue an HTTP DELETE request. |
get() | Issue an HTTP GET request. |
head() | Issue an HTTP HEAD request. |
options() | Issue an HTTP OPTIONS request. |
patch() | Issue an HTTP PATCH request. |
post() | Issue an HTTP POST request. |
put() | Issue an HTTP PUT request. |
request() | Issue any type of HTTP request. |
HTTP Request Tags
k6 automatically applies tags to your HTTP requests. You can use these tags to filter your results and organize your analysis.
Name | Description |
---|---|
expected_response | By default, response statuses between 200 and 399 are true. Change the default behavior with setResponseCallback. |
group | When the request runs inside a group, the tag value is the group name. Default is empty. |
name | Defaults to URL requested |
method | Request method (GET, POST, PUT etc.) |
scenario | When the request runs inside a scenario, the tag value is the scenario name. Default is default. |
status | response status |
url | defaults to URL requested |
The following snippet shows a JSON example of how a test-result data point is logged. In this example, the metric is the duration of an HTTP request.
Note how the tags object groups data.
URL Grouping
By default, tags have a name field that holds the value of the request URL. If your test has dynamic URL paths, you might not want this behavior, which could bring a large number of unique URLs into the metrics stream. For example, the following code accesses 100 different URLs:
You might prefer to report this data in a single metric: To aggregate data from dynamic URLs, explicitly set a name tag:
That code would produce JSON output like this:
Note how these two objects have the same name, despite having different URLs. If you filter the results for the tag name: PostsItemURL, the results include all data points from all 100 URLs.
As an alternative, you can also use the http.url wrapper to set the name tag with a string template value:
Inside k6 Cloud Results
k6 Cloud Results HTTP Table organizes requests by URL.