Share via


Tester des applications Web utilisant Ajax

Par Florent SANTIN, Winwise

Aujourd'hui les tests ont une place de plus en plus essentielle dans le cycle de développement applicatif. Avec l'édition Microsoft Visual Studio 2005 Team Edition for Tester, Microsoft assiste les développeurs dans la création de tests au travers de la mise à disposition d'un outillage permettant de gérer plusieurs cas:

  • Unitaires
  • Manuel
  • Génériques
  • Ordonnés
  • Procédures stockées et requête
  • Charge
  • et Web

Les deux derniers types de test fonctionnent très bien ensembles et sont vraiment optimums pour valider des scénarios d'utilisation de vos pages web et anticiper la manière dont le serveur et l'application à tester vont supporter la charge.

Pour les tests Web, VS 2005 TE For Tester propose un recorder (plugin venant s'ajouter par dessus Internet Explorer) permettant d'enregistrer un scénario de navigation au travers d'un ensemble de page Web et de capturer celui-ci afin de permettre:

  • sa réexécution
  • sa modification dynamique: pour par exemple modifier de manière aléatoire les variables envoyées en querystring
  • Définir les différents niveaux de validation du test: si il y à écrit "vous êtes connecté" dans la page, si la page est renvoyée du serveur au client en moins de 2 secondes, si tel ou tel tag html est présent dans la page renvoyée...

Ce recorder est pratique mais il souffre d'un manque majeur: il ne permet pas de capturer les requêtes Ajax (XMLHttpRequest) et se contente des "POST" et des "GET" de base.

Par exemple, un test de navigation vers la page live.com puis une petite modification du portail donne ceci:

Et sa reproduction dans un test Web visual Studio 2005 ceci:

Hors, de plus en plus de pages contiennent des appels asynchrones et il devient maintenant indispensable d'être capable de valider le bon fonctionnement de celle-ci. Dans notre cas précédant nous ne voyons par exemple pas apparaitre les appels Ajax permettant de remplir le contenu des gadgets.

Dans la version actuelle de VS 2005 TE For Tester, la seule façon de prendre en compte ces requêtes est de les capturer dans un outil tiers (Fiddler ou Web Development Helper) et de reproduire leurs appels par code sous forme de WebRequest dans le test Web. Pour ceci il suffit de générer le code relatif au scénario de test grâce à l'option "Generate Code..." présente dans le menu contextuel et d'aller compléter celui-ci en écrivant la représentation des différents appels Ajax:

 

 


'------------------------------------------------------------------------------
'<auto-generated>
'This code was generated by a tool.
'Runtime Version:2.0.50727.312
'
'Changes to this file may cause incorrect behavior and will be lost if
'the code is regenerated.
'
'</auto-generated>
'------------------------------------------------------------------------------

Option Strict Off
Option Explicit On

Imports Microsoft.VisualStudio.TestTools.WebTesting
Imports System
Imports System.Collections.Generic
Imports System.Text

Namespace TestProjectAjax

Public Class WebTest1Coded
Inherits ThreadedWebTest

Public Sub New()
MyBase.New()
Me.PreAuthenticate = True
End Sub

Public Overrides Sub Run()
Dim request1 As WebTestRequest = New WebTestRequest("http://www.live.com/")
request1.ThinkTime = 4
MyBase.Send(request1)

Dim request2 As WebTestRequest = New WebTestRequest("http://www.live.com/getstarted.aspx")
request2.ThinkTime = 2
MyBase.Send(request2)

Dim request3 As WebTestRequest = New WebTestRequest("http://www.live.com/")
request3.ThinkTime = 6
request3.QueryStringParameters.Add("addTemplate", "basics%2Cnews%2Csports%2Centertainment", False, False)
MyBase.Send(request3)

' Insertion des requêtes Ajax si besoin

Dim request4 As WebTestRequest = New WebTestRequest("http://www.live.com/")
MyBase.Send(request4)
End Sub
End Class
End Namespace

 

Cette technique fonctionne mais n'est pas forcement très rapide à mettre en œuvre car nécessite de reporter chaque appel en block de code.

La nouveauté, c'est que depuis une de ses dernières versions, l'outil Fiddler permet de générer le scénario de test par rapport à ce qu'il a enregistré, et la, le gain des temps est énorme vu que Fiddler peut maintenant être utilisé comme recorder à la place du plugin d'IE.

Pour reprendre le même scénario de test sur la page live.com, Fiddler capturera les appels suivants:

On remarque que l'information capturée est cette fois-ci complète et que tout les appels client/serveur sont matérialisés, y compris les requêtes Ajax que les gadgets utilisent.

Il ne reste plus qu'a demander a Fiddler de nous générer le scénario de test à partir de la sélection souhaitée et nous voila en présence d'un fichier .Webtest pouvant être ouvert avec Visual Studio 2005 Team Test afin d'être rejoué, validé et éventuellement pris en compte dans un test de scénario de charge. La boucle est bouclée vous revoila de nouveau dans Visual Studio 2005.

Voila, vous n'avez maintenant plus de pretextes valables pour ne pas automatiser le test de vos applications Web :)

 

Florent SANTIN (Winwise)

 

Haut de pageHaut de page