Partager via


Comment : créer un plug-in d'enregistreur

 

Publication: juillet 2016

Le WebTestRecorderPlugin permet de modifier un test de performances de site Web enregistré.  Le changement se produit une fois que vous choisissez Arrêter dans la barre d'outils de l'enregistreur du test de performances de site Web, mais avant l'enregistrement et la présentation du test dans l'éditeur de tests de performances de site Web.  

Le principal problème que permet de résoudre un plug-in d'enregistreur est l'exécution d'une corrélation personnalisée avec des paramètres dynamiques.  Avec la fonctionnalité de corrélation intégrée, les tests de performances de site Web détectent les paramètres dynamiques dans l'enregistrement Web une fois l'opération terminée, ou lorsque vous utilisez l'option Promouvoir les paramètres dynamiques en paramètres de test Web sur la barre d'outils de l'éditeur de tests de performances de site Web.  Pour plus d'informations, voir [retirée] Comment : résoudre les problèmes de lecture des tests de performances de site Web causés par des paramètres dynamiques.  Toutefois, la fonctionnalité de détection intégrée ne trouve pas toujours tous les paramètres dynamiques.  Par exemple, il ne trouve pas d'ID de session, qui obtient généralement sa valeur modifiée entre 5 à 30 minutes.  Par conséquent, vous devez exécuter le processus de corrélation manuellement.  Pour plus d'informations, voir [retirée] Comment : promouvoir les paramètres dynamiques en paramètres de test de performances de site Web.  

Le WebTestRecorderPlugin permet d'écrire le code de votre plug-in personnalisé.  Ce plug-in peut exécuter une corrélation ou modifier le test de performances de site Web de plusieurs manières avant d'être enregistré et présenté dans l'éditeur de tests de performances de site Web.  Par conséquent, si vous déterminez qu'une variable dynamique spécifique doit être mise en corrélation pour de nombreux enregistrements, vous pouvez automatiser le processus.  

Vous pouvez également utiliser un plug-in d'enregistreur pour ajouter des règles d'extraction et de validation, ajouter des paramètres de contexte ou convertir les commentaires en transactions dans un test de performances de site Web.

Les procédures suivantes décrivent le mode de création du code rudimentaire pour un plug-in d'enregistreur, déployez le plug-in et exécutez-le.  L'exemple de code qui suit les procédures montre comment utiliser Visual C# pour créer un plug-in d'enregistreur de la corrélation avec des paramètres dynamiques personnalisés.  

Spécifications

  • Visual Studio Enterprise

Création d'un plug-in d'enregistreur

Pour créer un plug-in d'enregistreur

  1. Ouvrez une solution qui contient le projet de test de performances de site Web et de charge avec le test de performances de site Web pour lequel vous souhaitez créer un plug-in d'enregistreur.

  2. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur la solution, sélectionnez Ajouter, puis choisissez Nouveau projet.

    La boîte de dialogue Ajouter un nouveau projet s'affiche.

  3. Sous Modèles installés, sélectionnez Visual C#.

  4. Dans la liste des modèles, sélectionnez Bibliothèque de classes.

  5. Dans la zone de texte Nom, tapez un nom pour le plug-in d'enregistreur.

    La nouvelle bibliothèque de classes est ajouté à l'Explorateur de solutions et la nouvelle classe s'ouvre dans l'éditeur de code.

  6. Dans l'Explorateur de solutions, dans le dossier de projet de la nouvelle bibliothèque de classes, cliquez avec le bouton droit sur le dossier Références et sélectionnez Ajouter une référence.

    Conseil

    RecorderPlugins est un exemple de dossier de projet de la nouvelle bibliothèque de classes.

    La boîte de dialogue Ajouter une référence s'affiche.

  7. Sélectionnez l'onglet .NET.

  8. Faites défiler la liste vers le bas et sélectionnez Microsoft.VisualStudio.QualityTools.WebTestFramework, puis choisissez OK.

    Microsoft.VisualStudio.QualityTools.WebTestFramework est ajouté dans le dossier Références dans l'Explorateur de solutions.

  9. Écrivez le code de votre plug-in d'enregistreur.  Commencez par créer une classe publique qui dérive de WebTestRecorderPlugin.  

  10. Remplacez la méthode PostWebTestRecording.

    public class Class1 : WebTestRecorderPlugin
        {
            public override void PostWebTestRecording(object sender, PostWebTestRecordingEventArgs e)
            {
                base.PostWebTestRecording(sender, e);
            }
        }
    

    Les arguments de l'événement fournissent deux objets à utiliser : le résultat enregistré et le test de performances de site Web enregistré.  Cela vous permettra d'itérer au sein du résultat à la recherche de certaines valeurs, puis d'accéder à la même requête dans le test de performances de site Web pour effectuer des modifications.  Vous pouvez également modifier juste le test de performances de site Web pour ajouter un paramètre de contexte ou pour paramétrer des parties de l'URL.  

    Notes

    Si vous modifiez le test de performances de site Web, vous devez également définir la propriété RecordedWebTestModified avec la valeur True : e.RecordedWebTestModified = true;

  11. Ajoutez d'autres lignes de code en fonction de la nature des opérations à exécuter par le plug-in d'enregistreur à l'issue de l'enregistrement Web.  Par exemple, vous pouvez ajouter le code pour gérer la corrélation personnalisée comme l'illustre l'exemple ci-dessous.  Vous pouvez également créer un plug-in d'enregistreur pour notamment convertir les commentaires en transactions ou ajouter des règles de validation au test de performances de site Web.  

  12. Dans le menu Générer, choisissez Générer <nom du projet de la bibliothèque de classes>.

  13. Ensuite, vous devez déployer le plug-in d'enregistreur pour l'enregistrer avec Visual Studio.

Déployer le plug-in d'enregistreur

Après avoir compilé le plug-in d'enregistreur, vous devrez placer la DLL créée dans un des deux emplacements :

  • %ProgramFiles%\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies\WebTestPlugins

  • %USERPROFILE%\My Documents\Visual Studio <version>\WebTestPlugins

Avertissement

Après avoir copié le plug-in d'enregistreur dans l'un des deux emplacements, vous devez redémarrer Visual Studio pour enregistrer le plug-in d'enregistreur.

Exécuter le plug-in d'enregistreur

Lorsque vous créez un test de performances de site Web, la boîte de dialogue Activer WebTestRecordPlugins s'affiche.  La boîte de dialogue Activer WebTestRecordPlugins affiche tous les plug-in disponibles qui peuvent être exécutés.  

Pour exécuter le plug-in d'enregistreur

  1. Créer un test de performances de site web.  Pour plus d'informations, voir Record and run a web performance test.  

    La boîte de dialogue Activer WebTestRecordPlugins s'affiche.

  2. Activez la case à cocher du plug-in d'enregistreur et choisissez OK.

    À l'issue de l'enregistrement du test de performances de site Web, le nouveau plug-in d'enregistreur sera exécuté.

    Avertissement

    Vous pouvez obtenir une erreur semblable au cas suivant lorsque vous exécutez un test de performances de site web ou un test de charge qui utilise votre plug-in :

    Request failed: Exception in <plug-in> event: Could not load file or assembly '<"Plug-in name".dll file>, Version=<n.  n.  n.  n>, Culture=neutral, PublicKeyToken=null' or one of its dependencies.  The system cannot find the file specified.  

    Cela est provoqué par les modifications de code apportées à chacun de vos plug-ins et la création d'une nouvelle version de la DLL (Version=0.0.0.0), mais le plug-in référence encore la version du plug-in d'origine.  Pour résoudre ce problème, procédez comme suit :  

    1. Dans votre projet de test de performances de site web et de charge, un message d'avertissement s'affiche dans les références.  Supprimez et rajoutez la référence à la DLL de votre plug-in.  

    2. Supprimez le plug-in de votre test ou de l'emplacement approprié, puis rajoutez-le.

Exemple

Cet exemple montre comment créer un plug-in d'enregistreur pour le test de performances de site Web personnalisé afin d'exécuter la corrélation personnalisée des paramètres dynamiques.

Notes

Une liste complète de l'exemple de code se trouve à la fin de cette rubrique.

Examen de l'exemple de code

Effectue une itération au sein du résultat pour rechercher la première page avec ReportSession

Cette partie de l'exemple de code effectue une itération au sein de chaque objet enregistré et recherche le corps de la réponse de ReportSession.

foreach (WebTestResultUnit unit in e.RecordedWebTestResult.Children)
 {
     WebTestResultPage page = unit as WebTestResultPage; 
     if (page != null)
     {
         if (!foundId)
         {
             int indexOfReportSession = page.RequestResult.Response.BodyString.IndexOf("ReportSession");
             if (indexOfReportSession > -1)
             {

Ajouter une règle d'extraction

Maintenant qu'une réponse a été trouvée, vous devez ajouter une règle d'extraction.  Cette partie de l'exemple de code crée la règle d'extraction à l'aide de la classe ExtractionRuleReference, puis recherche la requête correcte dans le test de performances de site Web pour y ajouter la règle d'extraction.  Chaque objet résultat a une nouvelle propriété ajoutée nommée DeclarativeWebTestItemId qui est utilisée dans le code pour obtenir la requête appropriée du test de performances de site Web.  

ExtractionRuleReference ruleReference = new ExtractionRuleReference();
ruleReference.Type = typeof(ExtractText);
ruleReference.ContextParameterName = "SessionId";
ruleReference.Properties.Add(new PluginOrRuleProperty("EndsWith", "&ControlID="));
ruleReference.Properties.Add(new PluginOrRuleProperty("HtmlDecode", "True"));
ruleReference.Properties.Add(new PluginOrRuleProperty("IgnoreCase", "True"));
ruleReference.Properties.Add(new PluginOrRuleProperty("Index", "0"));
ruleReference.Properties.Add(new PluginOrRuleProperty("Required", "True"));
ruleReference.Properties.Add(new PluginOrRuleProperty("StartsWith", "ReportSession="));
ruleReference.Properties.Add(new PluginOrRuleProperty("UseRegularExpression", "False"));

WebTestRequest requestInWebTest = e.RecordedWebTest.GetItem(page.DeclarativeWebTestItemId) as WebTestRequest;
if (requestInWebTest != null)
{
    requestInWebTest.ExtractionRuleReferences.Add(ruleReference);
    e.RecordedWebTestModified = true;
}

Remplacer les paramètres de chaîne de requête

Maintenant, le code recherche tous les paramètres de chaîne de requête dont le nom ReportSession et remplacez la valeur par {{SessionId}} comme indiqué dans cette partie de l'exemple de code :

WebTestRequest requestInWebTest = e.RecordedWebTest.GetItem(page.DeclarativeWebTestItemId) as WebTestRequest;
if (requestInWebTest != null)
{
    foreach (QueryStringParameter param in requestInWebTest.QueryStringParameters)
    {
         if (param.Name.Equals("ReportSession"))
         {
             param.Value = "{{SessionId}}";
         }
     }
 }

using System.ComponentModel;
using Microsoft.VisualStudio.TestTools.WebTesting;
using Microsoft.VisualStudio.TestTools.WebTesting.Rules;

namespace RecorderPlugin
{
    [DisplayName("Correlate ReportSession")]
    [Description("Adds extraction rule for Report Session and binds this to querystring parameters that use ReportSession")]
    public class CorrelateSessionId : WebTestRecorderPlugin
    {
        public override void PostWebTestRecording(object sender, PostWebTestRecordingEventArgs e)
        {
            //first find the session id
            bool foundId = false;
            foreach (WebTestResultUnit unit in e.RecordedWebTestResult.Children)
            {
                WebTestResultPage page = unit as WebTestResultPage;
                if (page != null)
                {
                    if (!foundId)
                    {
                        int indexOfReportSession = page.RequestResult.Response.BodyString.IndexOf("ReportSession");
                        if (indexOfReportSession > -1)
                        {
                            //add an extraction rule to this request
                            // Get the corresponding request in the Declarative Web performance test
                            ExtractionRuleReference ruleReference = new ExtractionRuleReference();

                            ruleReference.Type = typeof(ExtractText);
                            ruleReference.ContextParameterName = "SessionId";
                            ruleReference.Properties.Add(new PluginOrRuleProperty("EndsWith", "&ControlID="));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("HtmlDecode", "True"));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("IgnoreCase", "True"));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("Index", "0"));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("Required", "True"));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("StartsWith", "ReportSession="));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("UseRegularExpression", "False"));

                            WebTestRequest requestInWebTest = e.RecordedWebTest.GetItem(page.DeclarativeWebTestItemId) as WebTestRequest;
                            if (requestInWebTest != null)
                            {
                                requestInWebTest.ExtractionRuleReferences.Add(ruleReference);
                                e.RecordedWebTestModified = true;
                            }
                            foundId = true;

                        }
                    }
                    else
                    {
                        //now update query string parameters
                        WebTestRequest requestInWebTest = e.RecordedWebTest.GetItem(page.DeclarativeWebTestItemId) as WebTestRequest;
                        if (requestInWebTest != null)
                        {
                            foreach (QueryStringParameter param in requestInWebTest.QueryStringParameters)
                            {
                                if (param.Name.Equals("ReportSession"))
                                {
                                    param.Value = "{{SessionId}}";
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

Voir aussi

WebTestRequestPlugin
PostWebTestRecording
ExtractionRuleReference
PostWebTestRecording
Créer un code et des plug-ins personnalisés pour les tests de charge
(retirée) Comment : créer un test des performances de site Web codé
Comment : modifier un test des performances de site web existant