Partager via


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

Cette rubrique s'applique à :

Visual Studio Ultimate

Visual Studio Premium

Visual Studio Professional 

Visual Studio Express

La rubrique s'applique La rubrique ne s'applique pas La rubrique ne s'applique pas La rubrique ne s'applique pas

Le WebTestRecorderPlugin permet de modifier un test de performances de site Web enregistré. Le changement se produit une fois que vous cliquez sur 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, consultez 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, consultez 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.

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 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 cliquez sur 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 cliquez sur 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, cliquez sur 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 2010 Ultimate.

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 10.0\Common7\IDE\PrivateAssemblies\WebTestPlugins

  • %USERPROFILE%\Mes documents\Visual Studio 10\WebTestPlugins

Avertissement

Après avoir copié le plug-in d'enregistreur dans l'un des deux emplacements, vous devez redémarrer Visual Studio 2010 Ultimate 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, consultez Comment : créer un nouveau test de performances de site Web à l'aide de l'enregistreur de test de performances de site Web.

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

  2. Activez la case à cocher du plug-in d'enregistreur et cliquez sur 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, 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

Tâches

Comment : créer un test des performances de site Web codé

Comment : modifier un test de performances de site Web existant à l'aide de l'éditeur de test de performances de site Web

Référence

WebTestRequestPlugin

PostWebTestRecording

ExtractionRuleReference

PostWebTestRecording

Autres ressources

Création et utilisation de plug-ins personnalisés pour les tests de charge et les tests de performances de site Web