TestAutomatisering & PerformanceTesten

Gatling simulaties in een executable jar

In deze blog neem ik je mee in hoe ik bij mijn huidige opdracht een Gatling framework heb opgezet i.c.m. IntelliJ IDEA en Apache Maven en hoe ik uit dat framework met een simpel commando een executable fat jar kan produceren. Het voordeel van een dergelijke jar is dat je eigenlijk op elke server met java een Gatling simulatie kan uitvoeren zonder afhankelijk te zijn van een maven installatie of de aanwezigheid/bereikbaarheid van externe libraries.

Het is een vrij technische handleiding die je hierbij kan helpen, zonder dat jezelf het wiel opnieuw hoeft uit te vinden. Ik ben hierbij vooral benieuwd naar jouw ervaringen. Zijn er wellicht nog slimmere manieren om dit te doen? Ik hoor het graag!

Installatie Gatling (Using IntelliJ en Maven)

Het is dus belangrijk om de Scala plugin te installeren. De code voor de Gatling performance testen zijn geschreven in Scala (https://www.scala-lang.org/).

Nu zijn er meerdere opties om een Gatling framework op te zetten in IntelliJ. Je kan zelf een Maven project initiëren en de pom.xml aanpassen, maar ik vind het makkelijker om Gatling’s Maven Archetype te gebruiken (https://gatling.io/docs/current/extensions/maven_archetype/#maven-archetype). Op deze manier heb je ook meteen een structuur waarin je je resources en code kwijt kan en je hebt launchers voor de Recorder en de load test Engine.

Hoe nu verder?

Je kan nu via Recorder scripts maken.

De ene mogelijkheid is om de Recorder te gebruiken als recorder (de Recorder is een proxy en vangt netwerk verkeer af). De andere optie is om de Recorder als HAR converter te gebruiken.

Het resultaat is een script (simulation) die je kan draaien via maven commando’s of via de Engine.

Het e.e.a. hierover kan je vinden op https://gatling.io/docs/current/quickstart.

Maar deze blog gaat over het creëren van een executable fat jar. Wat is dat? Dit is een jar die alle gecompileerde code bevat, de resources EN de dependencies (external libraries). Dit maakt de jar ook een fat jar. Het voordeel hiervan is dat je op de server waarvandaan je de test wil draaien enkel java nodig hebt. Dus geen maven of een benaderbare repository met de dependencies (external libraries).

En hoe maken we nu zo’n executable fat jar?

Maken van executable fat jar

Toevoegen scala-maven-plugin

Wat je toe moet voegen aan de POM.xml voor de scala-maven-plugin kan je hier vinden: https://gatling.io/docs/current/installation#with-maven.

Je hebt de scala-maven-plugin nodig om de scala code te compileren en toe te voegen aan de jar.

Toevoegen maven-shade-plugin

De maven-shade-plugin gebruiken we om de executable fat jar te bouwen. Het volgende moet je toevoegen aan de POM.xml:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
  <version>${maven-shade-plugin.version}</version>
  <configuration>
    <filters>
      <filter>
        <artifact>*:*</artifact>
        <excludes>
          <exclude>META-INF/*.DSA</exclude>
          <exclude>META-INF/*.SF</exclude>
          <exclude>META-INF/*.RSA</exclude>
        </excludes>
      </filter>
    </filters>
  </configuration>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>shade</goal>
      </goals>
      <configuration>
        <transformers>
          <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
            <mainClass>io.gatling.app.Gatling</mainClass>
          </transformer>
        </transformers>
      </configuration>
    </execution>
  </executions>
</plugin>

Als mainClass is io.gatling.app.Gatling ingevuld. Dat betekent dus dat wanneer je de jar uitvoert dat de Gatling app wordt uitgevoerd.

test → main

De maven-shade-plugin stopt alleen de resources en code uit src/main in de package. Daarom moeten we de spullen in “test” verhuizen naar main (src/test à src/main). Let op! Hierdoor werken je Recorder en Engine en maven commando’s niet meer. Dit kan je wel weer werkend krijgen door in de POM.xml en IDEPathHelper.scala het e.e.a. aan te passen.

In IDEPathHelper moet je overal “test” vervangen door “main” en bij mavenBinariesDirectory moet je “test-classes” vervangen door “classes”.

In de POM.xml moet je bij de gatling-maven-plugin wat configuratie toe voegen:

<configuration>
<simulationsFolder>${project.basedir}\src\main\scala</simulationsFolder>
<resourcesFolder>${project.basedir}\src\main\resources</resourcesFolder>
  <configFolder>${project.basedir}\src\main\resources</configFolder>
</configuration>

Hoe executable fat jar uitvoeren?

Je kan de jar uitvoeren door het volgende commando uit te voeren:

java -jar <projectnaam>-<project versie>.jar -s <locatie en naam simulatie relatief aan src/main>

Je kan dezelfde argumenten gebruiken als bij de bundle versie van Gatling:

https://gatling.io/docs/current/general/configuration/?highlight=command%20line#command-line-options

Hiermee kan je dus je Gatling simulatie uitvoeren op elke server (waarbij dus alleen java een vereiste is!). Dit kan bijvoorbeeld handig zijn als je niet afhankelijk wil zijn van een bepaalde server waarvandaan je je loadtesten uitvoert.

Nawoord

Ik hoop dat deze blog duidelijk was. Als er nog vragen zijn of op- of aanmerkingen dan hoor ik het graag! Er komen nog wat blogjes aan m.b.t. Gatling (“Gatling in de pipeline” en “Gatling output in Splunk”. Mocht je willen dat ik een specifiek aandachtspunt meeneem in die blog’s, laat het dan hier even weten, dan probeer ik daar rekening mee te houden. Bedankt voor jullie aandacht.

Dit bericht is geplaatst in Innovatie Performancetesten en getagd in Gatling Performance Simulaties

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Nieuws

Blijf op de hoogte

Azure DevOps pipeline met Gatling

02/10/2020

In deze blog wordt beschreven hoe je Gatling performance testen in een Azure DevOps pipeline kan hangen.

Gatling simulaties in een executable jar

07/08/2020

Performance testen: Een handleiding voor het produceren van een fat jar uit een gatling framework.

Don’t be a fool, get the right tool!

30/06/2020

Heb jij weleens een keuze gemaakt voor een tool die achteraf gezien toch niet de verstandigste bleek? Helaas een ervaring die veel IT professionals weleens opdoen. En gezien de tools in de moderne ontwikkelomgevingen niet meer aan te slepen zijn, denk ik dat dit nog weleens vaker het geval gaat zijn.. Als testautomatiseerders hebben wij […]

Performance en de cloud

27/05/2020

Eén van de meest genoemde voordelen van de cloud is de in theorie oneindige schaalbaarheid. Zo zou het niet meer nodig zijn om als organisatie veel reservecapaciteit in te richten om pieken op te vangen en de performancerisico’s zouden helemaal verdwijnen. Maar is dat wel altijd zo? Wanneer wel, wanneer niet? Duidelijk is, dat wanneer […]

Ervaringen Performance.Now() 2019

13/12/2019

Ervaringen conferentie PerfNow

Performance test in de pipeline

25/10/2019

In deze blog geef ik kort en bondig neer in welke opzet en met welke tooling ik performancetesten heb geïntegreerd in de pijplijn bij mijn huidige opdracht.

Circle-CI, van code naar webserver met één klik.

13/09/2019

Wanneer je ‘vroeger’ een website had, waren er altijd flink wat handelingen nodig om files via een FTP client op een webserver te krijgen. Vandaag de dag, met behulp van een verscheidenheid aan tooltjes, is dat een fluitje van een cent. Daarnaast krijg je een arsenaal aan mogelijkheden mee als builden, testen, etc.. In deze […]

Een korte intro in data-analyse met R

10/07/2019

Een blog over hoe je met behulp van R grote hoeveelheden data kan analyseren. Een tool dat je helpt bij de analyse van bijvoorbeeld load- en stresstestresultaten.

Installatie Oracle ATS op Windows

28/03/2019

Handleiding over hoe je Oracle ATS installeert op Windows (Versie 13.x of hoger)

Postman API testen in CI

01/02/2019

beschrijving van hoe je jouw Postman collectie laat draaien vanuit Jenkins en hoe je hierbij een praktisch JUnit test report krijgt.

Workshop ‘Stop de Magie!’ bij Qquest

04/12/2018

In het kader van de 4e techday van Qquest heeft Chris met ondersteuning van HenkJaap een workshop gegeven. Basis was de presentatie en demo ‘No more magic’ van Bas en Chris, welke al een groot succes was op de TestAutomationDay en TestNet. Centraal bij het onderwerp ‘No more Magic’ staat het idee dat er bij […]

Visual Regression Testing – Wat is het en wat heb je eraan?

07/11/2018

Visual Regression Testing, of visuele regressie testen, is een categorie van testen die zich focust op het identificeren van visuele wijzigingen tussen iteraties of versies van een website. Dit kan handmatig door schermen of schermafdrukken te vergelijken, maar het is beter herhaalbaar en sneller te testen door dit automatisch te doen. Het mooiste is om deze testen als een […]