For now, you need to have a running dockerized James JMAP server running on the same computer than your Gatling host. It needs to export the webAdmin over port 8000.
Alternatively you can set up the following system properties:
-
TARGET_HOSTNAME
which is set tolocalhost
by default -
SMTP_PORT
which is set to25
by default -
SMTP_SSL_PORT
which is set to465
by default -
JMAP_PORT
which is set to1080
by default -
JMAP_PROTOCOL
which is set tohttp
by default (you can usehttps
instead for example) -
WEBADMIN_PORT
which is set to8000
by default -
WEBADMIN_PROTOCOL
which is set tohttp
by default (you can usehttps
instead for example)
In some cases you could want to specify target hostname per protocol, the following properties can help you:
* SMTP_TARGET_HOSTNAME
which is set to TARGET_HOSTNAME
by default
* JMAP_TARGET_HOSTNAME
which is set to TARGET_HOSTNAME
by default
* IMAP_SERVER_HOSTNAME
which is set to TARGET_HOSTNAME
by default
* WEBADMIN_SERVER_HOSTNAME
which is set to TARGET_HOSTNAME
by default
You can run all the simulations via sbt :
$ sbt > gatling:test
Run a specific simulation via sbt :
$ sbt > gatling:testOnly SIMULATION_FQDN
FQDN :
org.apache.james.gatling.simulation.jmap.draft.JmapAuthenticationSimulation
Authenticate 10 JMAP users, one time. Demonstrate user auto-provisioning through James WebAdmin server.
FQDN :
org.apache.james.gatling.simulation.jmap.draft.JmapSendMessagesSimulation
Authenticate 100 JMAP users, one time. Then they all retrieve their mailboxes, and then sends messages 360 messages each to other recipients.
FQDN :
org.apache.james.gatling.simulation.jmap.draft.JmapGetMailboxesSimulation
Authenticate 200 JMAP users, one time. Then they all retrieve 360 times their mailboxes each.
FQDN :
org.apache.james.gatling.simulation.jmap.draft.JmapGetMessageListSimulation
Authenticate 100 JMAP users, one time. Then they all retrieve their system mailboxes. Then they send each other 10 mails each at random. Then wait 30 seconds for mails to be delivered. Finally they retrieve 250 times each their mails list using GetMessagesList.
FQDN :
org.apache.james.gatling.simulation.jmap.draft.JmapGetMessagesSimulation
Authenticate 100 JMAP users, one time. Then they all retrieve their system mailboxes. Then they send each other 10 mails each at random. Then wait 30 seconds for mails to be delivered. They retrieve their mails list using GetMessagesList. Then they retrieve their mails 250 times, at random.
FQDN :
org.apache.james.gatling.simulation.jmap.draft.JmapMessageUpdateSimulation
Authenticate 100 JMAP users, one time. Then they all retrieve their system mailboxes. Then they send each other 10 mails each at random. Then wait 30 seconds for mails to be delivered. They retrieve their mails list using GetMessagesList. Then they update their mail 250 times with the following properties :.
-
70% mark mails as READ
-
20% mark mails as ANSWERED
-
10% mark mails as FLAGGED
You can use a custom local jenkins runner with the Jenkinsfile
at the root of this project to build the project.
This will automatically do for you:
-
checkout and compile the latest code of James Gatling project
-
launch Gatling integration tests
To launch it you need to have docker installed. From the root of this project, you can build the Jenkins runner locally yourself:
docker build -t local-jenkins-runner dockerfiles/jenkins-runner
And then you need to launch it with the Jenkinsfile:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v ${PWD}/dockerfiles/jenkins-runner/Jenkinsfile:/workspace/Jenkinsfile --network=host local-jenkins-runner
If you don’t want the build to redownload everytime all the sbt dependencies (it can be heavy) you can mount
your local sbt repository as a volume by adding -v $HOME/.ivy2/cache:/root/.ivy2/cache
to the above command.
You can use the Dockerfile at the root to build an image that will contain this Gatling project that you can run.
docker build -t james-gatling-runner dockerfiles/docker-runner
To change configuration variables, you should modify the environment file. You can find an example in sample.env
.
You should also change the file 'dockerfiles/docker-runner/users.csv` to be able to match your test users on your environment.
To launch it:
docker run --env-file sample.env \ --mount type=bind,source="$(pwd)"/dockerfiles/docker-runner/users.csv,target=/home/sbtuser/james-gatling/src/test/resources/users.csv \ -it --rm james-gatling-runner
Then you will be prompted with sbt from inside the container. You can run simulations now.
In case want to run a specific simulation directly, you can use the following command:
docker run --env-file sample.env \ --mount type=bind,source="$(pwd)"/dockerfiles/docker-runner/users.csv,target=/home/sbtuser/james-gatling/src/test/resources/users.csv \ -it --rm james-gatling-runner org.apache.james.gatling.simulation.imap.PlatformValidationSimulation
Sometimes we could have hang simulation when few users can not finish their session. It forces us to break the simulation without any report that generated by Gatling.
We however can save wasted time for the hang simulations by generating reports using the [Gatling report](https://github.com/nuxeo/gatling-report).
For example, we can export the report as CSV format:
java -jar path/to/gatling-report-VERSION-capsule-fat.jar path/to/simulation.log > report.csv