Azure Load Testing Preview

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 :

Azure Load Testing architecture overview

Le rĂ©sultat des tests semble trĂšs visuel d’aprĂšs la documentation et prometteur.

Get your performance insights across client and server with the Load Testing dashboard

Comment l’utiliser ?

Pour commencer, vous devez créer une nouvelle ressource Azure Load Testing.

Screenshot showing + Create a resource.
Screenshot that shows the Azure Load Testing creation page.

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 :

Screenshot that shows how to configure access control.
Screenshot that shows the role assignment screen.

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.

Screenshot that shows the Azure Load Testing page and + create new test.
Screenshot that shows the Basics tab when creating a new test.

Et la vous allez mettre votre fichier jmx créé précedemment.

Screenshot that shows the Test plan tab when creating a new test.

Rien dans l’onglet « Parameters »‘

On passe Ă  l’onglet « Load »

Puis « Review + Create » pour finir.

Screenshot that shows the Review + create tab when creating a new test.

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 :

Screenshot that shows the load test results.

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 !