Filtrer les requêtes d’un test web

Lorsqu'on créé un test web, il y a parfois des requêtes qui font partie de l'application en production et qu'on aimerait ne pas exécuter lors d'un test. C'est par exemple le cas des pages de partenaires, des pages de publicités, etc.

Pour éviter cela, on créé en général le test et on passe ensuite en revue l'ensemble des requêtes de celui-ci pour supprimer le superflu.

Dans ma quête perpétuelle de simplification de ma vie quotidienne, je me suis dis qu'on pouvait faire plus simple et surtout moins manuel. La solution que je vous propose est de créer un plugin de test web pour intercepter les requêtes indésirables et ne pas les exécuter.

La création d'un plugin de test web est très simple. Il suffit de créer une classe qui dérive de Microsoft.VisualStudio.TestTools.WebTesting.WebTestPlugin.

On a alors la possibilité d'interagir à plusieurs moments de l'exécution d'un test :

  • Avant et après l'exécution du test (redéfinir les méthodes PreWebTest et PostWebTest)
  • Avant et après l'exécution de chaque requête du test (redéfinir les méthodes PreRequest et PostRequest)

Une fois ces méthodes redéfinies, on créé une instance du plugin de test dans le test qui doit l'utiliser et on abonne une ou plusieurs de ces méthodes aux événements correspondant dans ce dernier.

Commençons par créer le squelette de notre plugin de test (de préférence dans une belle librairie de classes, pour pouvoir la réutiliser facilement dans toutes nos solutions de tests).

using Microsoft.VisualStudio.TestTools.WebTesting;

public class WebTestFilterPlugin : WebTestPlugin

{

   public override void PreRequest(object sender, PreRequestEventArgs e)

   {

//Here will be the filtering code base.PreRequest(sender, e);

   }

}

Pour ce plugin, nous avons besoin d'interagir avant chaque requête, nous avons donc besoin de ne redéfinir que la méthode PreRequest.

La classe PreRequestEventArgs offre un certain nombre de moyen d'intervenir sur la requête qui est sur le point de s'exécuter. On peut modifier la méthode HTTP utilisée, le thinktime simulé, le temps d'exécution avant de lever un timeout, etc. Ce qui nous intéresse pour notre filtre est la propriété Instruction. C'est une énumération qui permet d'indiquer si on doit exécuter ou abandonner la requête.

Voici la version complète du plugin :

public class WebTestFilterPlugin : WebTestPlugin

{

   private List<string> _filters = new List<string>();

   public List<string> Filters

   {

get { return this._filters; }

set { this._filters = value; }

}

 

   public override void PreRequest(object sender, PreRequestEventArgs e)

   {

foreach (string filter in this.Filters)

{

if (e.Request.Url.Contains(filter))

{

           e.WebTest.AddCommentToResult(string.Format("Request {0} has been skipped", e.Request.Url));       

         //Skip the request

e.Instruction = WebTestExecutionInstruction.Skip;

}

}

base.PreRequest(sender, e);

      }

}

Le fonctionnement du plugin est très simple. Il possède une liste de chaînes de caractères et annule l'exécution des requêtes dont l'url contient un des filtres.

L'utilisation dans un test web est la suivante :

using System;

using System.Collections.Generic;

using System.Text;

using Microsoft.VisualStudio.TestTools.WebTesting;

using Microsoft.VisualStudio.TestTools.WebTesting.Rules;

using WebTestPlugins; //The plugin library we created

 

public class FilterPluginDemoCoded : WebTest

{

   private WebTestFilterPlugin filterplugin = new WebTestFilterPlugin();

 

   public FilterPluginDemoCoded()

   {

this.PreAuthenticate = true;

 

//Register the plugin to the web test event(s)

this.PreRequest += new EventHandler<PreRequestEventArgs>(filterplugin.PreRequest);

      filterplugin.Filters.Add("prodserver");

   }

 

   public override IEnumerator<WebTestRequest> GetRequestEnumerator()

   {

      WebTestRequest request1 = new WebTestRequest("http://prodserver/index.html");

yield return request1;

request1 = null;

 

WebTestRequest request1 = new WebTestRequest("http://testserver/index.html");

yield return request1;

request1 = null;

   }

}

Vous l'avez deviné, ici seule la requête http://testserver/index.html sera exécutée.

On peut ensuite imaginer plusieurs améliorations, comme par exemple ne filtrer que sur les noms de domaines plutôt que sur l'intégralité de l'url ou encore de permettre l'utilisation d'expressions régulières.

Pour plus d'informations sur les plugins de test web et sur les tests dans Visual Studio en général, je vous invite à consulter la documentation de la MSDN : http://msdn2.microsoft.com/en-us/library/ms182409(VS.80).aspx

Edit : Désolé pour la mise en page bizzare pour le code, j'ai voulu tester la fonction publish de Word 2007 et on dirait bien que je ne maîtrise pas encore toutes les subtilités ;-)

Publié mardi 26 février 2008 00:29 par Etienne Margraff
Classé sous
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires


Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01