How to: Create a Recorder Plug-In
Dieses Thema gilt für folgende Anwendungsbereiche:
Visual Studio Ultimate |
Visual Studio Premium |
Visual Studio Professional |
Visual Studio Express |
---|---|---|---|
Das WebTestRecorderPlugin ermöglicht das Ändern eines aufgezeichneten Webleistungstests. Die Änderung wird vorgenommen, nachdem Sie auf der Symbolleiste der Webleistungstest-Aufzeichnung auf Beenden klicken (jedoch vor dem Speichern und Anzeigen des Tests im Webleistungstest-Editor).
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.
Erstellen eines Aufzeichnungs-Plug-Ins
So erstellen Sie ein Aufzeichnungs-Plug-In
Öffnen Sie eine Projektmappe, die das Testprojekt mit dem Webleistungstest enthält, für den Sie ein Aufzeichnungs-Plug-In erstellen möchten.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Projektmappe, wählen Sie Hinzufügen aus, und klicken Sie anschließend auf Neues Projekt.
Das Dialogfeld Neues Projekt hinzufügen wird angezeigt.
Wählen Sie unter Installierte Vorlagen den Eintrag Visual C# aus.
Wählen Sie in der Liste der Vorlagen den Eintrag Klassenbibliothek aus.
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.
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.
Tipp
Ein Beispiel für den Ordner eines neuen Klassenbibliothekprojekts ist RecorderPlugins.
Das Dialogfeld Verweis hinzufügen wird angezeigt.
Wählen Sie die Registerkarte .NET aus.
Führen Sie einen Bildlauf nach unten durch, wählen Sie Microsoft.VisualStudio.QualityTools.WebTestFramework aus, und klicken Sie dann auf OK.
Dem Ordner Verweise im Projektmappen-Explorer wird Microsoft.VisualStudio.QualityTools.WebTestFramework hinzugefügt.
Schreiben Sie den Code für das Aufzeichnungs-Plug-In. Erstellen Sie zunächst eine neue öffentliche Klasse, die von WebTestRecorderPlugin abgeleitet wird.
Ü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.
Tipp
Wenn Sie den Webleistungstest ändern, müssen Sie auch die RecordedWebTestModified-Eigenschaft auf "true" festlegen: e.RecordedWebTestModified = true;
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.
Klicken Sie im Menü Erstellen auf "<Name des Klassenbibliothekprojekts> erstellen".
Als Nächstes müssen Sie das Aufzeichnungs-Plug-In bereitstellen, um es in Visual Studio 2010 Ultimate zu registrieren.
Bereitstellen des Aufzeichnungs-Plug-Ins
Nachdem Sie das Aufzeichnungs-Plug-In kompiliert haben, müssen Sie die resultierende DLL-Datei an einem von zwei Speicherorten speichern:
%Programme%\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\WebTestPlugins
%USERPROFILE%\Eigene Dateien\Visual Studio 10\WebTestPlugins
Warnung
Nachdem Sie das Aufzeichnungs-Plug-In an einen dieser Speicherorte kopiert haben, müssen Sie Visual Studio 2010 Ultimate neu starten, damit das Aufzeichnungs-Plug-In registriert wird.
Ausfü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
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.
Aktivieren Sie das Kontrollkästchen für das Aufzeichnungs-Plug-In, und klicken Sie auf "OK".
Nachdem der Webleistungstest die Aufzeichnung abgeschlossen hat, wird das neue Aufzeichnungs-Plug-In ausgeführt.
Warnung
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:
-
Im Testprojekt wird in Verweisen eine Warnung angezeigt. Entfernen Sie den Verweis auf die Plug-In-DLL, und fügen Sie ihn wieder hinzu.
-
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.
Tipp
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
Weitere Ressourcen
Erstellen und Verwenden von benutzerdefinierten Plug-Ins für Auslastungs- und Webleistungstests