blob: 5e3968788c41ab0a6decd65ce01f7dba3b03f0dd [file] [log] [blame]
:linkattrs:
= Gerrit Code Review - End to end load tests
This document provides a description of a Gerrit load test scenario implemented using the link:http://gatling.io[`Gatling`] framework.
Similar scenarios have been successfully used to compare performance of different Gerrit versions or study the Gerrit response
under different load profiles.
== What is Gatling?
Gatling is a load testing tool which provides out of the box support for the HTTP protocol. Documentation on how to write an
HTTP load test can be found link:https://gatling.io/docs/current/http/http_protocol/[`here`,role=external,window=_blank].
However, in the scenario we are proposing, we are leveraging the link:https://github.com/GerritForge/gatling-git[`Gatling Git extension`,role=external,window=_blank]
to run tests at Git protocol level.
Gatling is written in Scala, but the abstraction provided by the Gatling DSL makes the scenarios implementation easy even without any Scala knowledge.
Examples of scenarios can be found in the `e2e-tests` directory.
=== How to run the load tests
==== Prerequisites
* link:https://www.scala-lang.org/download/[`Scala 2.12`]
==== How to build
----
sbt compile
----
==== Setup
If you are running SSH commands the private keys of the users used for testing need to go in `/tmp/ssh-keys`.
The keys need to be generated this way (JSch won't validate them [otherwise,role=external,window=_blank](https://stackoverflow.com/questions/53134212/invalid-privatekey-when-using-jsch):
----
ssh-keygen -m PEM -t rsa -C "test@mail.com" -f /tmp/ssh-keys/id_rsa
----
*NOTE*: Don't forget to add the public keys for the testing user(s) to your git server
==== Input file
The ReplayRecordsScenario is fed by the data coming from the [src/test/resources/data/requests.json](/src/test/resources/data/requests.json) file.
Such file contains the commands and repo used during the load test.
Below an example:
----
[
{
"url": "ssh://admin@localhost:29418/loadtest-repo.git",
"cmd": "clone"
},
{
"url": "http://localhost:8080/loadtest-repo.git",
"cmd": "fetch"
}
]
----
Valid commands are:
* fetch
* pull
* push
* clone
==== How to use the framework
Run all tests:
----
sbt "gatling:test"
----
Run a single test:
----
sbt "gatling:testOnly com.google.gerrit.scenarios.ReplayRecordsFromFeederScenario"
----
Generate the last report:
----
sbt "gatling:lastReport"
----
GERRIT
------
Part of link:index.html[Gerrit Code Review]
SEARCHBOX
---------
[scala]: