Ajouter des headers HTTP dans l’enregistrement d’un test sous Visual Studio

12436943915_dd9f34a696_z

J’ai récemment eu à mettre en place des tests de charge sur une application ASP.Net dont une bonne partie des appels se faisait avec de l’Ajax.
Lors de l’enregistrement tout se passait bien mais à l’exécution j’avais systématiquement une erreur d’exécution ASP.Net incompréhensible.

J’ai d’abord mis en cause un paramètre étrange sur mes URLs : elles contenaient tous un paramètre “_” dont la valeur était égale au nombre de millisecondes écoulées depuis le 1er janvier 1970. Après quelques recherches, je me suis rendu compte que ce paramètre était uniquement rajouté par jQuery pour forcer certaines versions d’Internet Explorer à ne pas mettre en cache la requête (Cf. http://stackoverflow.com/questions/2749560/why-does-jquery-ajax-add-a-parameter-to-the-url)

Après comparaison via ce fabuleux outil qu’est fiddler ( et que j’essaierai de présenter un jour …), je me suis rendu compte que les requêtes rejouées ne présentaient pas le header X-Requested-With valorisé à XMLHttpRequest. Une fois ce header rajouté sur toutes les requêtes qui le nécessitait, tout à tourné comme sur des roulettes.

Pour ceux et celles qui ne souhaiteraient pas rajouter ce header sur toutes les requêtes, il existe la possibilité de forcer l’enregistrement via une clé de registre de certains headers lors de l’enregistrement d’un test par Visual Studio.

Tout est décrit (en anglais) sur cette page : http://blogs.microsoft.co.il/shair/2011/02/02/how-to-include-http-headers-in-web-test-recording/

En résumé, voici les points à retenir :

  1. L’outil d’enregistrement des tests web considère uniquement les headers suivants par défaut :
    * SOAPAction
    *  Pragma
    * x-microsoftajax
    * Content-Type
  2. Il est possible de forcer l’enregistrement de n’importe quel header via la clé de registre “HKEY_CURRENT_USERSoftwareMicrosoftVisualStudio10.0EnterpriseToolsQualityToolsWebLoadTest” et la modification de la valeur de « RequestHeadersToRecord(par défaut : SOAPAction;Pragma;x-microsoftajax;Content-Type;Referrer;Accept-Encoding;Accept-Language;User-Agent »)