Gatling (software)

{{Short description|Load- and performance-testing framework}}

{{Use dmy dates|date=May 2025}}

{{Infobox website

| name = Gatling

| logo = Gatling-Logo.png

| screenshot = Gatling load testing dashboard.png

| caption = Gatling reports screenshot

| website = {{URL|gatling.io}}

| company_type = Private

| founded = {{Start date and age|2015|07|01|df=yes}}

| location = Bagneux, France

| area_served = Worldwide

| founder = Stéphane Landelle (CTO)

| industry = Software

| international = Yes

| content_license = Apache

| programming_language = Scala, Java, JavaScript

| website_type = Open-source load and performance testing for web applications

| language = English

| users = 20,000,000+

| launched = {{Start date and age|2012|01|13|df=yes}}

| current_status = Active

| products = Gatling, Gatling Enterprise

| License =

}}

Gatling is a load- and performance-testing framework based on Scala and Netty. The first stable release was published on January 13, 2012. In 2015, Gatling's founder, Stéphane Landelle, created a company (named "Gatling Corp"), dedicated to the development of the open-source project. According to Gatling Corp's official website, Gatling was downloaded more than 20,000,000 times (2024).{{Cite web |date=December 7, 2023 |title=Gatling announces 20 million downloads |url=https://storiesout.com/en/press-releases/gatling-announces-20-million-downloads/ |website=Storiesout}} In June 2016, Gatling officially presented Gatling Enterprise the commercial version which included test orchestration and team collaboration features.{{cite web |title=Soirée de présentation Gatling FrontLine |url=https://www.meetup.com/fr-FR/Gatling-User-Group-Paris/events/229956473/ |language=French |work=Gatling Paris User Group |publisher=Meetup |accessdate=September 1, 2017}}

The software is designed to be used as a load testing tool for analyzing and measuring the performance of a variety of services, with a focus on web applications, application programming interfaces (APIs), and microservices.

Gatling was mentioned twice in ThoughtWorks Technology Radar, in 2013 and 2014,{{cite web |title=Gatling: Take Your Performance Tests to the next Level |url=https://www.thoughtworks.com/insights/blog/gatling-take-your-performance-tests-next-level |work=Blog |publisher=ThoughtWorks |author=Rodrigo Tolledo |date=12 May 2014 |accessdate=September 1, 2017}} "as a tool worth trying", with an emphasis on "the interesting premise of treating your performance tests as production code".

The latest minor release is Gatling 3.14, published on May 12, 2025.{{Cite news |date=2025-05-16 |title=What's new in 3.14 |url=https://docs.gatling.io/release-notes/whats-new/3.14/}}

Company History

Gatling started as an open-source project in 2012 by Stéphane Landelle, while he was the chief technology officer (CTO) of a French IT consulting firm, eBusiness Information. In 2015 a dedicated company named "Gatling Corp" to develop a commercial product for load test orchestration and collaboration. The first version of Gatling Enterprise (originally named FrontLine) was released in 2016.

The company is based in Bagneux, France, near Paris.

Gatling Corp is a member of Systematic Paris-Region, an Île-de-France business cluster created in 2005,{{in lang|fr}}[http://www.campus-paris-saclay.fr/La-FCS/Les-fondateurs/Systematic-Paris-Region Systematic Paris-Région] {{Webarchive|url=https://archive.today/20130217113910/http://www.campus-paris-saclay.fr/La-FCS/Les-fondateurs/Systematic-Paris-Region|date=2013-02-17}} devoted to complex systems and ICT.{{in lang|fr}}[http://www.systematic-paris-region.org/fr/le-pole Qui sommes-nous?] Systematic Paris-Region gathers large groups, SMEs, universities and research labs to promote digital innovation. Gatling is a member of Systematic's Open Source Working Group and was elected member of Systematic's board of directors, as a representative of SMEs, in November 2016.

The company took part in some events, like the Paris Open Source Summit (POSS, 2015, 2016 and 2017 editions), Liferay's 2016 Symposium, Java User Group (JUG)'s meetings, the Paris Gatling User Group and the New York Gatling User Group.

Overview of the Project

Gatling consists of an open-source core and an enterprise orchestration and collaboration platform. The open-source performance testing tool includes:

Gatling Enterprise includes all of the open-source features and additionally:

  • Real-time and interactive reporting
  • Customized reports and sharing options
  • Multiple load generator options, from fully managed to self-hosted
  • Full CI/CD integration
  • RBAC and SSO

Terminology

  • Simulation: The simulation file includes the different scenarios of a test, its parametrization and the injection profiles. Technically speaking, a simulation is a Scala class.{{cite web |title=Performance testing with Gatling |url=http://automationrhapsody.com/performance-testing-with-gatling/ |publisher=Automation Rhapsody |author=Lyudmil Latinov |date=9 June 2017 |quote=“Simulation” is the actual test. It is a Scala class that extends Gatling’s io.gatling.core.scenario.Simulation class. Simulation has a HTTP Protocol object instantiated and configured with proper values as URL, request header parameters, authentication, caching, etc. Simulation has one or more “Scenario”. |accessdate=September 1, 2017}} Here are examples of simulations in Java and JavaScript:{{cite web |author=Gatling Corp |title=Gatling Documentation, Create your first Java-based simulation |url=https://docs.gatling.io/tutorials/scripting-intro/ |accessdate=January 12, 2018 |publisher=Gatling Corp}}{{Cite web |date=2023-12-16 |title=Create your first JavaScript-based simulation |url=https://docs.gatling.io/tutorials/scripting-intro-js/ |access-date=2024-07-23 |website=Gatling documentation |language=en-US}}

//Java

public class BasicSimulation extends Simulation {

HttpProtocolBuilder httpProtocol =

http.baseUrl("https://e-comm.gatling.io")

.acceptHeader("application/json")

.contentTypeHeader("application/json");

ScenarioBuilder myFirstScenario = scenario("My First Scenario")

.exec(http("Request 1")

.get("/session/"));

{

setUp(

myFirstScenario.injectOpen(constantUsersPerSec(2).during(60))

).protocols(httpProtocol);

}

}//JavaScript

export default simulation((setUp) => {

const httpProtocol =

http.baseUrl("https://e-comm.gatling.io")

.acceptHeader("application/json")

.contentTypeHeader("application/json");

const myScenario = scenario("My Scenario")

.exec(http("Request 1")

.get("/session/"));

setUp(

myScenario.injectOpen(constantUsersPerSec(2).during(60))

).protocols(httpProtocol);

});

  • Scenario: A scenario consists of a series of requests. Each scenario within a simulation can have its own injection profile.{{cite web |title=Performance testing with Gatling |url=http://automationrhapsody.com/performance-testing-with-gatling/ |publisher=Automation Rhapsody |author=Lyudmil Latinov |date=9 June 2017 |quote=Scenario is a series of HTTP Requests with different action (POST/GET) and request parameters. Scenario is the actual user execution path. It is configured with load users count and ramp up pattern. This is done in the Simulation’s “setUp” method. Several scenarios can form one simulation. |accessdate=September 1, 2017}} Here is an example of a scenario:

//Java

ScenarioBuilder myFirstScenario = scenario("My First Scenario")

.exec(http("Request 1")

.get("/session/"));

{

setUp(

myFirstScenario.injectOpen(constantUsersPerSec(2).during(60))

).protocols(httpProtocol);

}//JavaScript

const myScenario = scenario("My Scenario")

.exec(http("Request 1")

.get("/session/"));

setUp(

myScenario.injectOpen(constantUsersPerSec(2).during(60))

).protocols(httpProtocol);

});

  • Group: Groups can be used as a subdivision of a scenario. It is also a series of requests, that has a functional purpose (for instance, the login process).
  • Request: Gatling is able to simulate complex users' behaviors. For this purpose, it generates the appropriate requests in the system under test. Here is an example of a request in Gatling:

//Java

.exec(http("Request 1")

.get("/session/"));

//JavaScript

.exec(http("Request 1")

.get("/session/"));

  • Injection profile: An injection profile is the number of virtual users injected during the test in the system under test and how they are injected. Here is an example of an injection profile:

//Java

setUp(

myFirstScenario.injectOpen(constantUsersPerSec(2).during(60))

).protocols(httpProtocol);

//JavaScript

setUp(

myScenario.injectOpen(constantUsersPerSec(2).during(60))

).protocols(httpProtocol);

Architecture

Gatling implemented a fully new architecture for a performance testing tool, in order to be more resource efficient.{{cite web |title=Gatling: A Lightweight Load Testing Tool |url=https://dzone.com/articles/gatling-light-weight-load-testing-tool |work=Performance Zone |publisher=DZone |author=Siva Prasad Rao Janapati |date=1 February 2017 |quote=Gatling consumes fewer system resources to run a load test than other options. |accessdate=September 1, 2017}} It makes it possible to simulate a high number of requests per second with a single machine.{{cite web |title=Performance testing with Gatling |url=http://automationrhapsody.com/performance-testing-with-gatling/ |publisher=Automation Rhapsody |author=Lyudmil Latinov |date=9 June 2017 |quote=It is capable of creating an immense amount of traffic from a single node. |accessdate=September 1, 2017}}

Components

=Recorder=

Gatling comes with an HTTP web recorder to bootstrap a simulation. The HTTP recorder can be used to directly capture browser actions or convert .har files to load test scenarios.

=Domain-specific language=

Gatling is provided with a simple{{cite web |title=An Introduction to Load Testing With Gatling |url=https://dzone.com/articles/gatling-gun-is-now-a-prospecting-tool-for-testers |work=DevOps Zone |publisher=DZone |author=Sree Tejaswi |date=4 January 2017 |quote=It is an easy-to-install tool where simulations and scenarios are coded in a simple domain-specific language (DSL). |accessdate=September 1, 2017}} and lightweight Domain-specific language, in which simulations and scenarios are coded. This allows users to add custom behavior through many hooks.{{Cite web|url=http://gatling.io/docs/current/cheat-sheet/|title = Cheat-Sheet|date = 20 April 2021}} This makes simulation scripts readable and easy to maintain.{{cite web |title=An Introduction to Load Testing With Gatling |url=https://dzone.com/articles/gatling-gun-is-now-a-prospecting-tool-for-testers |work=DevOps Zone |publisher=DZone |author=Sree Tejaswi |date=4 January 2017 |quote=You can thus generate readable and easy to maintain performance test code. |accessdate=September 1, 2017}}

In 2024 Gatling introduced a new DSL (SDK) for JavaScript and TypeScript.{{Cite web |title=JavaScript SDK |url=https://gatling.io/blog/gatling-doubles-its-availability-with-a-new-javascript-sdk |access-date=2024-05-24 |website=Gatling.io: Gatling Blog |language=en}} The JavaScript and TypeScript SDK uses GraalVM to translate JavaScript code to Java and execute load tests on a Java virtual machine (JVM). Adding JavaScript and TypeScript support made Gatling the first polyglot load testing tool in the market.

This is an example of what Gatling's domain-specific language looks like (see also {{Section link||Terminology}}):

val scn = scenario("BasicSimulation")

.exec(http("request_1")

.get("/"))

.pause(5)

=Reports=

At the end of each test, Gatling generates a static HTML report. Reports include:{{cite web |title=An Introduction to Load Testing With Gatling |url=https://dzone.com/articles/gatling-gun-is-now-a-prospecting-tool-for-testers |work=DevOps Zone |publisher=DZone |author=Sree Tejaswi |date=4 January 2017 |accessdate=September 1, 2017}}

  • Active users over time
  • Response time distribution
  • Response time percentiles over time
  • Requests per second over time
  • Responses per second over time

Gatling Enterprise additionally includes:{{Cite web |title=Cloud |date=10 March 2021 |url=https://docs.gatling.io/reference/stats/reports/cloud/ |access-date=16 May 2025}}

  • Real-time results
  • Advanced response metrics
  • Load generator health metrics
  • Run trends and comparison tools

Protocols support and plugins

It officially supports the following protocols:

Gatling documentation states that it is protocol agnostic, which makes it possible to implement other protocols' support.{{cite web |title=Gatling |url=http://gatling.io/docs/current/ |work=Documentation |publisher=Gatling Corp |quote=As the core engine is actually protocol agnostic, it is perfectly possible to implement support for other protocols. |accessdate=September 1, 2017}}

Plugins

Gatling comes out with official and community plugins. It integrates with:

= Community plugins =

Here is a non-exhaustive list of plugins created by community members:{{Cite web |title=Gatling Docs, Third-party plugins for Gatling |url=https://docs.gatling.io/reference/integrations/third-parties/ |access-date=May 16, 2025 |website=Gatling|date=20 April 2021}}

Continuous integration

Automation with Gatling is related to its simulations' maintainability.{{cite web |title=Gatling Tool Review for Performance Tests (Written in Scala) |author=Federico Toledo |date=12 July 2016 |url=https://dzone.com/articles/gatling-tool-review-for-performance-tests-written |work=Performance Zone |publisher=DZone |quote=The language, Scala, and Gatling’s DSL are pretty focused on facilitating the maintainability of the tests, which is ideal if you are focusing on continuous integration |accessdate=September 1, 2017}} The integration with other developer tools, especially in the DevOps lifecycle, makes it possible to create performance tests at scale, that is to say to fully automate the execution of performance testing campaigns in the software development process.

Major and minor releases

class="wikitable"
Version{{cite web |title=Milestones |url=https://github.com/gatling/gatling/milestones?state=closed |work=Gatling's repository |publisher=GitHub |accessdate=September 1, 2017}}Release date
3.14

|12 May 2025

3.13

|13 November 2024

3.12

|9 September 2024

3.11.1

|25 April 2024

3.10.321 December 2023
3.9.510 May 2023
3.0.023 October 2018
2.3.030 August 2017
2.2.015 April 2016
2.1.015 December 2014
2.0.06 October 2014
1.5.06 May 2013
1.4.020 December 2012
1.3.019 September 2012
1.2.031 May 2012
1.1.026 March 2012
1.0.013 January 2012

Licensing

Gatling is published under Apache License 2.0,{{cite web |title=License|url=https://github.com/gatling/gatling/blob/master/LICENSE.txt |work=Gatling's repository |publisher=GitHub |accessdate=September 1, 2017}} a permissive free software license written by the Apache Software Foundation (ASF).{{cite web|url=http://www.newmediarights.org/open_source/new_media_rights_open_source_licensing_guide |title=Open Source Licensing Guide |author=New Media Rights |publisher=California Western School of Law |date=2008-09-12|accessdate=2015-11-28 |quote=The ‘BSD-like’ licenses such as the BSD, MIT, and Apache licenses are extremely permissive, requiring little more than attributing the original portions of the licensed code to the original developers in your own code and/or documentation.}}

The source code is accessible on GitHub.

Gatling Enterprise

Gatling Enterprise is the commercial version of Gatling. It is proprietary software, distributed by Gatling Corp.

See also

References

{{Reflist}}