Voici l’essentiel de l’épisode 145 du Cloud Cover Show paru il y a quelques semaines.

Dans cet épisode, Nick Harris et Chuck Sterling (Program Manager dans l’équipe Visual Studio) nous présentent comment le service Visual Studio Online d’Azure peut vous aider à réaliser vos tests de charge.

 

Chuck commence à nous présenter l’une des caractéristiques de son équipe, considérée comme une équipe Dev Ops, déployant des nouvelles fonctionnalités toutes les semaines.
Ces fonctionnalités sont développées notamment en fonction des retours des utilisateurs. Il invite donc tout le monde à utiliser les différents canaux disponibles pour donner un avis, faire une suggestion, ou remonter un problème :

Ces outils sont réellement utilisés pour prioriser le travail de l’équipe, donc n’hésitez pas.

 

A 02:32, Nick mentionne le fait que les méthodes traditionnelles pour réaliser des tests de charge sont relativement complexes et donne la parole à Chuck pour expliquer en quoi ceci appartient au passé.
En effet, la définition du test de charge n’est pas le plus compliqué. Mais déployer les ressources nécessaires pour l’exécuter à une échelle suffisante est une autre histoire.
C’est en cela que Visual Studio Online peut aider, en exécutant les tests de charge dans le cloud Microsoft Azure, pour pouvoir scaler autant que nécessaire.

A 03:41, les choses sérieuses commencent et le projet Visual Studio consacré aux tests de performance web et au test de charge est créé. Chuck profite de ce moment pour annoncer le fait qu’il est maintenant possible de tester des solutions Silverlight 5.
Une fois le projet créé, un enregistreur web apparait. Celui-ci permet d’enregistrer tout le trafic web résultant des différentes actions que vous allez effectuer dans Internet Explorer.

Le premier scénario de test évoqué grâce à cette fonctionnalité est la possibilité de se servir de ce genre de test pour vérifier que son site est bien présent dans les résultats d’un moteur de recherche pour tel mot clé, en rejouant les requêtes nécessaires à une recherche Bing ou Google de manière régulière par exemple.
Le deuxième scénario évoqué consiste à vérifier régulièrement qu’il n’y a pas eu de régression sur les performances d’une page. 
A noter qu’à chaque enregistrement avec l’enregistreur web, Visual Studio recherche les différents paramètres possibles, afin de vous proposer de les rendre dynamiques, en utilisant un fichier .csv par exemple contenant les différentes valeurs à utiliser.

Un projet de type test a pour vocation de contenir plusieurs scénarios différents (ajouter un article au panier, faire une recherche, s’enregistrer, afficher la page d’aide, …), pour pouvoir les rejouer indépendamment ou en parallèle lors d’un test de charge.
A 06:48, Chuck dispose de plusieurs scénarios (des tests webs dans Visual Studio), et il souhaite les utiliser pour simuler une charge importante sur son site. Il est nécessaire pour cela d’ajouter un élément "Load Test" au projet Visual Studio, pour lancer l’assistant de création. Que ceux qui ont déjà enregistré des tests webs ou créé des tests de charge avec Visual Studio dans le passé se rassurent, cet assistant est le même et ne contient rien de spécifique à Azure.

  • L’une des pages principales de l’assistant vous demande si vous souhaitez simuler une charge constante ou si vous préférez augmenter petit à petit le nombre d’utilisateurs sur votre site.
  • La page suivante vous permet de choisir les différents tests webs que vous souhaitez exécuter dans votre test de charge, et selon quelles proportions.
  • A noter qu’une des spécificités de l’exécution dans Azure du test de charge est l’impossibilité de simuler d’autres types de connexion que LAN.
  • La possibilité de simuler plusieurs navigateurs différents est par contre bien supportée. Mais il est important de comprendre qu’il ne s’agit que de la simulation du "User-agent". Aucun des navigateurs de la liste n’est réellement utilisé pour le test, ce qui exclue donc l’exécution du code Javascript.
  • L’autre fonctionnalité non supportée dans Azure est la récupération des compteurs de performance. A la place, une intégration avec Application Insight est possible pour corréler les résultats du test avec les métriques de l’application, comme nous le verrons plus tard.
  • Enfin, la dernière étape consiste à déterminer la durée du test

A 10:22, Chuck rappelle que l’étape d’après a traditionnellement été d’installer un agent sur un certain nombre de machines pour pouvoir simuler la charge souhaitée. Mais cela est maintenant terminé grâce à la possibilité de sélectionner une option permettant d’utiliser des ressources dans Azure pour exécuter votre test, grâce au service Visual Studio Online.

Par défaut, tous les 250 utilisateurs virtuels, Visual Studio Online va ainsi provisionner automatiquement une machine dans Azure, déployer les ressources nécessaires au test (comme le fichier .csv contenant les paramètres par exemple), exécuter le test, puis supprimer définitivement cette machine et son contenu à la fin du test. Vous avez ainsi la garantie que vos données ne restent pas dans Azure et ne sont pas accessibles à d’autres utilisateurs du service.

Une fois la création du test terminée, celui-ci est lancé à 12:34 et Chuck profite des quelques minutes nécessaires au déploiement des ressources pour nous montrer le Load Test Manager, permettant d’accéder à l’historique des tests de son équipe, partageant le même compte Visual Studio Online. C’est un vrai bénéfice par rapport à l’utilisation des tests de charge de manière indépendante.

A 15:09, les premiers résultats du test apparaissent, sous forme d’un graphique permettant de suivre l’évolution du nombre de visiteurs, le temps moyen des différents tests, le temps de réponse moyen des requêtes, etc. Ces métriques sont celles dont dispose Visual Studio qui pilote l’environnement de test, mais il est également possible d’aller plus loin, en indiquant que le test de charge est lié à une application configurée pour utiliser Application Insight.
Le but est ainsi de pouvoir corréler les résultats du test avec des métriques provenant directement de l’environnement testé, comme la charge CPU, la présence d’Exceptions, etc., afin de vérifier que l’application continue de bien se comporter sous une forte charge.
Il est nécessaire pour cela d’utiliser le même compte Visual Studio Online pour l’exécution du test et pour la configuration Application Insight.

Grâce à cette liaison, il est ainsi possible de consulter les résultats du test, de suivre les métriques de l’application, puis d’approfondir en allant investiguer sur une page trop lente, jusqu’à la visualisation de la requête SQL en cause par exemple.
Pour aller plus loin, il est également possible de connaitre le "Changset" Visual Studio Online et la ligne de code concerné, puis de terminer par une session de debug à posteriori grâce à Intellitrace !
C’est réellement une vue à 360° qui est rendu possible grâce à ces technologies.

Entre 18:12 et 22:30, pour patienter pendant la création d’un nouveau test cette fois lié à Application Insight, le portail Application Insight est présenté pour ceux n’ayant pas eu l’opportunité de regarder le Cloud Cover Show dédié à ce sujet.

A 22:30, Chuck propose à tout le monde de tester les tests de charge dans Azure en utilisant leur propre instance de Visual Studio Ultimate (ou en téléchargeant la version d’essai de Visual Studio sur http://www.visualstudio.com) et en profitant des 15 000 virtual user minutes par mois disponibles gratuitement dans chaque compte Visual Studio Online.

Petite parenthèse mathématique : pour calculer le nombre de virtual user minutes nécessaires pour un test, il suffit de multiplier le nombre d’utilisateurs que vous souhaitez simuler par la durée du test en minutes (1 500 virtual users minutes pour un test de 10 minutes avec 150 utilisateurs simultanés par exemple).

A noter que vous pouvez tester n’importe quelle ressource web, qu’elle soit hébergée sur Azure ou non. Bien sûr, utiliser le service pour des attaques de type denial of service n’est pas encouragé…

A 25:40, les limites du service sont évoquées (20 agents maximum), et Chuck explique comment tirer au mieux partie des agents pour simuler le maximum d’utilisateurs simultanés, sans arriver à saturation pour ne pas fausser le test.

 

Vous trouverez des ressources supplémentaires sur les pages suivantes :

 

Vous trouverez ci-après quelques images de l’épisode.

Benjamin (@benjiiim)

image

Début de l’épisode, avec Chuck Sterling, Program Manager dans l’équipe Visual Studio

image

Présentation de l’application de démonstration

image

Création du projet de test dans Visual Studio

image

L’enregistreur web du projet de test

image

L’enregistreur web en action

image

Affichage d’un test web dans Visual Studio

image

L’assistant de création d’un test de charge

image

L’option magique permettant d’indiquer à Visual Studio d’utiliser Visual Studio Online plutôt qu’un contrôleur et des agents locaux.

image

Lancement du test de charge dans Azure

image

Utilisation du Load Test Manager pour visualiser l’historique des tests

image

Affichage des résultats du test en direct

image

Liaison du test de charge avec Application Insights pour récolter les métriques de performance

image

Portail Application Insight

image

Visualisation d’une page lente, avec Stack Trace et requête SQL concernée

image

Téléchargement du fichier IntelliTrace concerné

image

Page d’accueil de Visual Studio Online, où le quota du nombre de virtual user minutes gratuites est indiqué.

image

Changement du nombre d’agents utilisés pour votre test (0 = 250 utilisateurs par agent)