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)
Installeer java jdk. Via https://gatling.io/docs/current/installation#java-version kan je zien welke java versies Gatling ondersteund.
Installeer Apache Maven.
Installeer IntelliJ IDEA. Niet noodzakelijk, wel makkelijk. Deze blog gaat ervan uit dat IntelliJ IDEA geïnstalleerd is. De (gratis) Community editie is prima om mee te werken. Eventuele bijzonderheden m.b.t. de installatie kan je hier vinden: https://gatling.io/docs/current/installation#intellij-idea.
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. 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.
Comentários