Freigeben über


How to: Create a Recorder Plug-In

Das WebTestRecorderPlugin ermöglicht das Ändern eines aufgezeichneten Webleistungstests.Die Änderung tritt auf, nachdem Sie Beenden in der Webleistungstestaufzeichnungssymbolleiste jedoch vor dem Test auswählen, der im Webleistungstest-Editor Speichern und Anzeigen ist.

Das primäre Problem, zu dessen Lösung ein Aufzeichnungs-Plug-In beiträgt, ist das Ausführen einer eigenen benutzerdefinierten Korrelation für dynamische Parameter.Durch die integrierte Korrelationsfunktion erkennen Webleistungstests die dynamischen Parameter in der Webaufzeichnung nach ihrer Ausführung oder bei Auswahl der Option Dynamische Parameter auf Webtestparameter hochstufen auf der Symbolleiste des Webleistungstest-Editors.Weitere Informationen finden Sie unter How to: Resolve Web Performance Test Playback Issues Caused by Dynamic Parameters.Die integrierte Erkennungsfunktion findet jedoch nicht immer alle dynamischen Parameter.Eine Sitzungs-ID, deren Wert normalerweise innerhalb von 5 bis 30 Minuten geändert wird, wird z. B. nicht gefunden.Daher müssen Sie den Korrelationsprozess manuell ausführen.Weitere Informationen finden Sie unter How to: Promote Dynamic Parameters to Web Performance Test Parameters.

Das WebTestRecorderPlugin ermöglicht das Schreiben von Code für ein eigenes benutzerdefiniertes Plug-In.Dieses Plug-In kann eine Korrelation ausführen oder den Webleistungstest in unterschiedlicher Weise ändern, bevor er gespeichert und im Webleistungstest-Editor angezeigt wird.Wenn Sie feststellen, dass eine bestimmte dynamische Variable für viele Aufzeichnungen korreliert werden muss, können Sie den Prozess daher automatisieren.

Ein Aufzeichnungs-Plug-In kann in einem Webleistungstest auch zum Hinzufügen von Extraktions- und Validierungsregeln, Hinzufügen von Kontextparametern oder Konvertieren von Kommentaren in Transaktionen verwendet werden.

In den folgenden Prozeduren wird beschrieben, wie Sie den rudimentären Code für ein Aufzeichnungs-Plug-In erstellen und das Plug-In bereitstellen und ausführen.Im Beispielcode im Anschluss an die Prozeduren wird veranschaulicht, wie ein benutzerdefiniertes Aufzeichnungs-Plug-In für die Korrelation dynamischer Parameter mit Visual C# erstellt wird.

Anforderungen

  • Visual Studio Ultimate

Erstellen eines Aufzeichnungs-Plug-Ins

So erstellen Sie ein Aufzeichnungs-Plug-In

  1. Öffnen Sie eine Projektmappe, die das Mischung der Webleistungs- und -Auslastungstestprojekt mit dem Webleistungstest enthält, für den Sie ein Aufzeichnungs-Plug-In erstellen möchten.

  2. Klicken Sie im Projektmappen-Explorer auf die Projektmappe, Hinzufügen, wählen Sie mit der rechten Maustaste und wählen dann Neues Projekt aus.

    Das Dialogfeld Neues Projekt hinzufügen wird angezeigt.

  3. Wählen Sie unter Installierte Vorlagen den Eintrag Visual C# aus.

  4. Wählen Sie in der Liste der Vorlagen den Eintrag Klassenbibliothek aus.

  5. Geben Sie im Textfeld Name einen Namen für das Aufzeichnungs-Plug-In ein.

    Die Klassenbibliothek wird dem Projektmappen-Explorer hinzugefügt, und die neue Klasse wird im Code-Editor geöffnet.

  6. Klicken Sie im Projektmappen-Explorer im Ordner des neuen Klassenbibliothekprojekts mit der rechten Maustaste auf den Ordner Verweise, und wählen Sie Verweis hinzufügen aus.

    TippTipp

    Ein Beispiel für den Ordner eines neuen Klassenbibliothekprojekts ist RecorderPlugins.

    Das Dialogfeld Verweis hinzufügen wird angezeigt.

  7. Wählen Sie die Registerkarte .NET aus.

  8. Führen Sie unten und ausgewähltes Microsoft.VisualStudio.QualityTools.WebTestFramework nach und wählen Sie dann OK aus.

    Dem Ordner Verweise im Projektmappen-Explorer wird Microsoft.VisualStudio.QualityTools.WebTestFramework hinzugefügt.

  9. Schreiben Sie den Code für das Aufzeichnungs-Plug-In.Erstellen Sie zunächst eine neue öffentliche Klasse, die von WebTestRecorderPlugin abgeleitet wird.

  10. Überschreiben Sie die PostWebTestRecording-Methode.

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

    Die Ereignisargumente liefern zwei Objekte, mit denen Sie arbeiten können: das aufgezeichnete Ergebnis und den aufgezeichneten Webleistungstest.So können Sie das Ergebnis durchlaufen und nach bestimmten Werten suchen und anschließend im Webleistungstest zur gleichen Anforderung springen, um Änderungen vorzunehmen.Sie können auch nur den Webleistungstest ändern, wenn Sie einen Kontextparameter hinzufügen oder Teile der URL parametrisieren möchten.

    HinweisHinweis

    Wenn Sie den Webleistungstest ändern, müssen Sie auch die RecordedWebTestModified-Eigenschaft auf "true" festlegen: e.RecordedWebTestModified = true;

  11. Fügen Sie entsprechend den Aktionen, die das Aufzeichnungs-Plug-In nach der Webaufzeichnung ausführen soll, weiteren Code hinzu.Sie können z. B. Code hinzufügen, um die benutzerdefinierte Korrelation wie im folgenden Beispiel dargestellt zu behandeln.Ein Aufzeichnungs-Plug-In kann auch für Aufgaben wie das Konvertieren von Kommentaren in Transaktionen oder Hinzufügen von Validierungsregeln zum Webleistungstest erstellt werden.

  12. Klicken Sie im Menü Build wählen Sie <class library project name>Build aus.

  13. Als Nächstes müssen Sie das Aufzeichnungs-Plug-In bereitstellen, um es in Visual Studio Ultimate zu registrieren.

Ff400224.collapse_all(de-de,VS.110).gifBereitstellen des Aufzeichnungs-Plug-Ins

Nachdem Sie das Aufzeichnungs-Plug-In kompilieren, müssen Sie die resultierende DLL in einem von zwei Speicherorten speichern:

  • %Programme%\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies\WebTestPlugins

  • %USERPROFILE%\Eigene Dateien\Visual Studio 2012\WebTestPlugins

WarnhinweisVorsicht

Nachdem Sie das Aufzeichnungs-Plug-In an einen dieser Speicherorte kopiert haben, müssen Sie Visual Studio Ultimate neu starten, damit das Aufzeichnungs-Plug-In registriert wird.

Ff400224.collapse_all(de-de,VS.110).gifAusführen des Aufzeichnungs-Plug-Ins

Wenn Sie einen neuen Webleistungstest erstellen, wird das Dialogfeld WebTestRecordPlugins aktivieren angezeigt.Im Dialogfeld WebTestRecordPlugins aktivieren werden alle verfügbaren Plug-Ins angezeigt, die ausgeführt werden können.

So führen Sie das Aufzeichnungs-Plug-In aus

  1. Erstellen Sie einen neuen Webleistungstest.Weitere Informationen finden Sie unter How to: Create a New Web Performance Test Using the Web Performance Test Recorder.

    Das Dialogfeld WebTestRecordPlugins aktivieren wird angezeigt.

  2. Aktivieren Sie das Kontrollkästchen für das Aufzeichnungs-Plug-Ins OK und wählen Sie aus.

    Nachdem der Webleistungstest die Aufzeichnung abgeschlossen hat, wird das neue Aufzeichnungs-Plug-In ausgeführt.

    WarnhinweisVorsicht

    Möglicherweise erhalten Sie einen Fehler wie den folgenden, wenn Sie einen Webleistungstest oder einen Auslastungstest ausführen, der das Plug-In verwendet:

    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.

    Ein solcher Fehler wird verursacht, wenn Sie an einem der Plug-Ins Codeänderungen vornehmen und eine neue DLL-Version (Version=0.0.0.0) erstellen, während das Plug-In weiterhin auf die ursprüngliche Plug-In-Version verweist.Um dieses Problem zu beheben, führen Sie folgende Schritte aus:

    1. In dem Mischung der Webleistungs- und -Auslastungstestprojekt wird in Verweisen eine Warnung.Entfernen Sie den Verweis auf die Plug-In-DLL, und fügen Sie ihn wieder hinzu.

    2. Entfernen Sie das Plug-In aus dem Test oder vom entsprechenden Speicherort, und fügen Sie es dann wieder hinzu.

Beispiel

In diesem Beispiel wird veranschaulicht, wie ein benutzerdefiniertes Aufzeichnungs-Plug-In für Webleistungstests erstellt wird, um eine benutzerdefinierte Korrelation dynamischer Parameter auszuführen.

HinweisHinweis

Eine vollständige Auflistung des Beispielcodes finden Sie am Ende dieses Themas.

Überprüfen des Beispielcodes

Durchlaufen des Ergebnisses, um nach der ersten Seite mit "ReportSession" zu suchen

In diesem Teil des Codebeispiels wird jedes aufgezeichnete Objekt durchlaufen und im Antworttext nach "ReportSession" gesucht.

           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)
                        {

Hinzufügen einer Extraktionsregel

Nachdem eine Antwort gefunden wurde, müssen Sie eine Extraktionsregel hinzufügen.In diesem Teil des Codebeispiels wird die Extraktionsregel mithilfe der ExtractionRuleReference-Klasse erstellt, und anschließend wird im Webleistungstest nach der Anforderung gesucht, der die Extraktionsregel hinzugefügt werden soll.Jedem Ergebnisobjekt wird eine neue Eigenschaft mit dem Namen "DeclarativeWebTestItemId" hinzugefügt. Diese Eigenschaft wird im Code verwendet, um die richtige Anforderung aus dem Webleistungstest abzurufen.

           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;
           }

Ersetzen von Abfragezeichenfolgen-Parametern

In diesem Teil des Codebeispiels wird nach allen Abfragezeichenfolgen-Parametern mit dem Namen "ReportSession" gesucht und der Wert in {{SessionId}} geändert:

           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}}";
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

Siehe auch

Aufgaben

Gewusst wie: Erstellen eines codierten Webleistungstests

How to: Edit an Existing Web Performance Test Using the Web Performance Test Editor

Referenz

WebTestRequestPlugin

PostWebTestRecording

ExtractionRuleReference

PostWebTestRecording

Weitere Ressourcen

Erstellen und Verwenden von benutzerdefinierten Plug-Ins für Auslastungs- und Webleistungstests