Microsoft vient d’annoncer la preview publique d’Azure Load Testing et nous allons voir ce que c’est et comment cela fonctionne đ
Qu’est ce que c’est ?
Tout d’abord Azure Load Testing sert Ă effectuer des tests de charge et de rĂ©silience pour ĂȘtre sur que votre application va tenir en production.
Cette nouvelle feature est basĂ©e JMeter mais pour le cloud. Si vous regardez mon article sur JMeter, je n’y fais mention d’aucune intĂ©gration avec GitHub Actions ou pipelines Azure DevOps.J’avais mĂȘme prĂ©fĂ©rĂ© K6 pour sa maniĂšre de fonctionner et son intĂ©gration avec GitHub et Azure Devops.
Ce n’est pas que ces intĂ©grations n’existent mais mais elles nĂ©cessitent une grosse infrastructure Ă mettre en place malgrĂ© tout comme des machines virtuelles ce qui peut vite devenir lourd et couteux.
Aujourd’hui MS nous propose ce nouveau service qui reste bien d’ĂȘtre utile car il reprend les possibilitĂ©s de JMeter en associant cela aux features Azure comme le reporting et les pipelines Azure.
Voici l’architecture de test lors du lancement d’Azure Load Testing :
Le rĂ©sultat des tests semble trĂšs visuel d’aprĂšs la documentation et prometteur.
Pour commencer, vous devez créer une nouvelle ressource Azure Load Testing.
Attention elle n’eest pas disponible dans toutes les rĂ©gions :
Ensuite il faut donner les bons droits dans l’IAM (Access Control) comme suit :
Assignez ce rĂŽle Ă votre utilisateur sur le portail Azure.
Pour la suite il vous faudra créer un script JMeter pour tester votre application.
J’en avais deja donc je vais l’utiliser mais si vous en avez besoin , copiez le contenu ci-dessous dans un fichier test.jmx
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.4.1">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
<stringProp name="TestPlan.comments"></stringProp>
<boolProp name="TestPlan.functional_mode">false</boolProp>
<boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="TestPlan.user_define_classpath"></stringProp>
</TestPlan>
<hashTree>
<kg.apc.jmeter.threads.UltimateThreadGroup guiclass="kg.apc.jmeter.threads.UltimateThreadGroupGui" testclass="kg.apc.jmeter.threads.UltimateThreadGroup" testname="jp@gc - Ultimate Thread Group" enabled="true">
<collectionProp name="ultimatethreadgroupdata">
<collectionProp name="1400604752">
<stringProp name="1567">5</stringProp>
<stringProp name="0">0</stringProp>
<stringProp name="48873">30</stringProp>
<stringProp name="49710">60</stringProp>
<stringProp name="10">10</stringProp>
</collectionProp>
</collectionProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<intProp name="LoopController.loops">-1</intProp>
</elementProp>
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
</kg.apc.jmeter.threads.UltimateThreadGroup>
<hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="homepage" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="HTTPSampler.domain">{your-endpoint-url}</stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.protocol">https</stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path"></stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
<stringProp name="HTTPSampler.implementation">HttpClient4</stringProp>
<stringProp name="HTTPSampler.connect_timeout">60000</stringProp>
<stringProp name="HTTPSampler.response_timeout">60000</stringProp>
</HTTPSamplerProxy>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>
</jmeterTestPlan>
Remplacez {your-endpoint-url}
par l’url Ă tester.
Nous allons pouvoir créer le test maintenant sur la ressource.
Et la vous allez mettre votre fichier jmx créé précedemment.
Rien dans l’onglet « Parameters »‘
On passe Ă l’onglet « Load »
Puis « Review + Create » pour finir.
Le test devrait se lancer automatiquement aprÚs la création.
Allons voir les résultats maintenant !
Si tout s’est bien Ă©xĂ©cute, vous devriez avoir quelque chose qui ressemble Ă cela :
Vous pouvez exploiter diffĂ©rentes mĂ©triques Ă l’intĂ©rieur du test pour avoir des graphiques pertinents.
Avouez que ça a quand mĂȘme plus de classe que de prĂ©senter des tests de charge exportĂ©s par JMeter sur Excel đđ€Ł
Pour une preview c’est assez prometteur et cela va bien plus loin que la simple utilisation de JMeter. On nous vend des analytiques bien plus pertinents, visuels et comprĂ©hensible pour ceux dont ce n’est pas le mĂ©tier.
Dites moi ce que vous en pensez et si cela vous a motivé à faire des tests de charge / stress.
Have fun coding !
Articles similaires