Publié
vendredi 1 août 2008 08:30
par
Etienne Margraff
Est-ce qu’il vous est déjà arrivé, lors de l’exécution d’un test web, de ne pas voir la totalité du code HTML normalement retourné par la page, celle-ci étant carrément coupée arbitrairement au milieu d’une balise ?
Oui ? Et bien c’est normal ! Comme on peut s’en douter, il existe une taille maximum de code récupéré et stocké pour la réponse (et la requête aussi, d’ailleurs). Cela pose deux problèmes :
- Le premier est qu’on ne peut pas consulter la totalité du code qu’aurait récupérer l’utilisateur.
- Le deuxième fait qu’une règle d’extraction destinée à récupérer du texte située dans la partie tronquée ne le trouvera pas!
Plutôt gênant n’est-ce pas ? Et bien : oui et non.
Pour le « Oui » je viens de dire pourquoi. Pour le « Non » : tout simplement parce que la limite par défaut est de 1 500 000 caractères, soit environ 1.5Mo. On est donc le plus généralement à l’abri car il est difficile d’atteindre une telle quantité de caractères. Ceci dit, si le code est généré ou s’il n’est pas super propre et un peu trop verbeux, on peut se retrouver dans ce cas. Et si cela vous arrive, j’ai la solution : le plugin de test web.
NB : J’ai déjà abordé la création d’un test web dans ce post, je ne reviendrais donc pas sur les bases.
Lorsqu’on créé un plugin de test, on peut surcharger la méthode « PreRequest ». Cette méthode sera exécutée avant chacune des requêtes du test web. On retrouve dans ses arguments un EventArgs de type PreRequestEventArgs qui contient une propriété « WebTest » dans laquelle on retrouve la propriété « ResponseBodyCaptureLimit » qui correspond la quantité maximum de caractères récupérés lors de l’éxécution d’une requête du test, c'est-à-dire exactement ce dont nous avons besoin !
Rien de plus simple de modifier ce comportement, vous l’aurez compris, et voici un exemple « d’implémentation » :
public class HtmlSizeLimitWebTestPlugin:WebTestPlugin
{
public int CaptureLimit { get; set; }
public override void PreRequest(object sender, PreRequestEventArgs e)
{
e.WebTest.ResponseBodyCaptureLimit = CaptureLimit;
}
}
Notez l’utilisation de la propriété, que l’on pourra automatiquement éditer dans Visual Studio via un petit « Clic Droit > Propriétés » sur le plugin.
Ici je me place dans le cadre d’un plugin de test donc chaque requête se verra affectée des mêmes paramètres. On peut bien entendu effectuer la même opération dans n’importe quel endroit à partir duquel on a accès à l’objet « WebTest », comme par exemple dans un WebTestRequestPlugin. On pourra alors modifier la valeur de la propriété pour chaque « instance » du plugin, et donc pour chaque requête ! J
.Dispose() ;
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 :