Enhancing Web Performance Testing in GoLang: The Bombardier Blueprint
A Practical Tutorial on How to Use Bombardier
One tool that has garnered attention in golang is Bombardier, a versatile and efficient HTTP bench marking tool that can help you assess and optimize your Go applications.
In this article, we’ll delve into the world of Bombardier and explore how it can be leveraged in GoLang projects.
What is Bombardier?
Bombardier
is an open-source, command-line HTTP bench marking
tool that is designed for testing the performance of HTTP services, including web servers, proxies, and other HTTP-based applications.
This has become a popular choice for developers looking to measure the scalability and speed of their HTTP endpoints.
The power of Bombardier
- Fast and Efficient: Bombardier is built using the
fasthttp
library, which provides excellent performance compared to Go’s defaulthttp
library. This allows Bombardier to handle a high number of requests with minimal resource usage. - Customizable Request Parameters: With Bombardier, we can easily customize request parameters such as headers, payload, and query strings. This flexibility allows us to test different aspects of our web application’s functionality and performance.
- Real-Time Metrics: Provides real-time metrics for our requests, including the number of requests completed, the number of requests failed, and the average response time. This information helps us to monitor the performance of our web application during the benchmarking process.
- Integration with Go’s net/http Library: Starting from
version 1.1
, Bombardier supports the use of Go’snet/http
client, allowing us to test HTTP/2.x services or use a more RFC-compliant HTTP client. This integration makes Bombardier even more versatile for testing different types of web applications.
Installation
You can grab binaries in the releases section. Alternatively, to get latest
go install github.com/codesenberg/bombardier@latest
Getting started
Let’s create a simple example of how to use Bombardier
to test a Go HTTP server. First, you’ll need to have a GoLang HTTP server running. Here’s a basic example with echo
Now, you can run the following command to run the bench mark test for the endpoint health
bombardier -c 200 -n 500 http://localhost:8080/health
and which will have an output as
The Bombardier Commands
Here is some of the most commonly used Bombardier commands and options
- c , — connections
Specifies the number of concurrent connections (clients) to use during the test.
Example :-c 200
orconnection=200
sets 200 connections
-d, — duration
Defines the test duration. You can specify it as a number followed by a unit, such as ‘s’ for seconds, ‘m’ for minutes, or ‘h’ for hours
Example :-d 10s
orduration=10s
sets the test duration to10 second
- m, — method
Sets the HTTP request method to use for the test. Common methods include GET, POST, PUT, DELETE
Example :-m GET
or--method=GET
- H, — header
Allows you to specify custom HTTP headers. You can use this option to send headers with your requests.
Example :-H "x-api-key: demoapikey"
or--header="x-api-key: demoapikey"
-b, — body
Enables you to include a request body in POST or PUT requests.
Example :-b "{'name':'John Doe'}"
or--body="{'name':'John Doe'}"
sets the request body.
-r, — rate
Specifies the request rate per second. You can use this option to control the request rate, especially when running with a fixed number of connections.
-o, — format
Specifies which format to use to output the result.
Formats understood by bombardier are:
— plain-text (short: pt)
— json (short: j)
Example :-o j
or--format=j
-l, —latencies
Specifies to print latency statistics
Example :-l
or--latencies
try bombardier — help
to see more commands
A complete Sample
Let’s create a server wich Echo
web framework to create a simple RESTful API. And includes a middleware for API key validation and handles JSON request.
then run the command in terminal
bombardier -c 200 -n 500 -d 10s \
-H 'Content-Type: application/json' \
-H 'x-api-key:test' \
-m POST -b '{"name":"john doe"}' -l http://localhost:8080/ping
let’s get the request body from a file. Create file named as request-body.json
with this content in it.
{
"name":"John Doe"
}
then run this command
bombardier -c 200 -n 500 -d 10s \
-H 'Content-Type: application/json' \
-H 'x-api-key:test' -m POST -f request-body.json -l http://localhost:8080/ping
and we will have an output as this
Conclusion
Bombardier offers a wide range of options for more advanced use cases. You can customize headers, set a specific HTTP method, and much more. For a complete list of options and usage examples, refer to the official documentation.
It is a valuable tool for any developer working with GoLang who wants to assess and optimize the performance of their HTTP services. It allows us to simulate various scenarios and stress-test your applications effectively. Whether you’re building a high-performance web server, a RESTful API, or a microservice, Bombardier can help ensure your project meets the demands of real-world usage.
I hope this article helps. Thank you so much for reading. :)