How to: Create a Custom HTTP Body Editor for the Web Performance Test Editor
Sie können einen benutzerdefinierten Inhalts-Editor erstellen, der Ihnen ermöglicht, den Zeichenfolgentextinhalt zu bearbeiten, oder der binären Textinhalt einer Webdienstanforderung beispielsweise SOAP, REST, asmx, wcf, RIA und andere Webdienstanforderung eingibt.
Es gibt zwei Typen von Editoren, die Sie implementieren können:
Zufriedener Editor der Zeichenfolge dieses wird mithilfe der IStringHttpBodyEditorPlugin-Schnittstelle implementiert.
Zufriedener Editor der Binärdatei dieses wird mithilfe der IBinaryHttpBodyEditorPlugin-Schnittstelle implementiert.
Diese Schnittstellen sind im Microsoft.VisualStudio.TestTools.WebTesting-Namespace enthalten.
Anforderungen
- Visual Studio Ultimate
Erstellen eines Windows-Steuerelementbibliothek-Projekts
Erstellen eines Benutzersteuerelements mithilfe eines Windows-Steuerelementbibliothek-Projekts
In Visual Studio Ultimate auf dem Menü Datei, wählen Sie Neu aus und wählen dann Projekt aus.
Das Dialogfeld Neues Projekt wird angezeigt.
Wählen Sie unter Installierte Vorlagen je nach Programmieranforderungen entweder Visual Basic oder Visual C# aus, und wählen Sie dann Windows aus.
Hinweis In diesem Beispiel wird Visual C# verwendet.
Wählen Sie in der Liste der Vorlagen den Eintrag Windows Forms-Steuerelementbibliothek aus.
Geben Sie im Textfeld "Name" einen Namen beispielsweise MessageEditors ein, und wählen Sie OK aus.
Hinweis In diesem Beispiel wird "MessageEditors" verwendet.
Das Projekt wird der neuen Projektmappe hinzugefügt, und im Designer wird ein UserControl-Objekt mit dem Namen "UserControl1.cs" präsentiert.
Ziehen Sie von der Toolbox unter der Kategorie Allgemeine Steuerelemente ein RichTextBox auf die Oberfläche von "UserControl1".
Wählen Sie das Aktionstagsymbol () in der oberen rechten Ecke des - Steuerelements RichTextBox aus, und wählen Sie dann und In übergeordnetem Container andocken aus.
Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf das Windows Forms-Bibliotheksprojekt, und wählen Sie Eigenschaften aus.
Wählen Sie unter "Eigenschaften" die Registerkarte Anwendung aus.
Wählen Sie in der Dropdownliste Zielframework den Eintrag .NET Framework 4 aus.
Das Dialogfeld "Änderung des Zielframeworks" wird angezeigt.
Klicken Sie auf Ja.
Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf den Knoten Verweise, und wählen Sie dann Verweis hinzufügen aus.
Das Dialogfeld Verweis hinzufügen wird angezeigt.
Wählen Sie aus.Registerkarte NET, führen unten und ausgewähltes Microsoft.VisualStudio.QualityTools.WebTestFramework Bildlauf durch und wählen dann OK aus.
Wenn der Ansicht-Designer nicht mehr geöffnet ist, klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf UserControl1.cs, und wählen Sie dann Ansicht-Designer aus.
Klicken Sie auf der Designoberfläche mit der rechten Maustaste, und wählen Sie Code anzeigen aus.
(Optional) Ändern Sie den Namen der Klasse und des Konstruktors von "UserControl1" in einen aussagekräftigen Namen, z. B. "MessageEditorControl":
Hinweis Im Beispiel wird "MessageEditorControl" verwendet.
namespace MessageEditors { public partial class MessageEditorControl : UserControl { public MessageEditorControl() { InitializeComponent(); } } }
Fügen Sie die folgenden Eigenschaften hinzu, um das Abrufen und Festlegen des Texts in "RichTextBox1" zu aktivieren.Die IStringHttpBodyEditorPlugin-Schnittstelle verwendet EditString, und IBinaryHttpBodyEditorPlugin verwendet EditByteArray:
public String EditString { get { return this.richTextBox1.Text; } set { this.richTextBox1.Text = value; } } public byte[] EditByteArray { get { return System.Convert.FromBase64String(richTextBox1.Text); } set { richTextBox1.Text = System.Convert.ToBase64String(value, 0, value.Length); } }
Hinzufügen einer Klasse zum Windows-Steuerelementbibliothek-Projekt
Fügen Sie dem Projekt eine Klasse hinzu.Diese wird verwendet, um die IStringHttpBodyEditorPlugin-Schnittstelle und die IBinaryHttpBodyEditorPlugin-Schnittstelle zu implementieren.
Übersicht über den Code in dieser Prozedur
Das UserControl "MessageEditorControl", das in der vorherigen Prozedur erstellt wurde, wird als "messageEditorControl" instanziiert:
private MessageEditorControl messageEditorControl
Die messageEditorControl-Instanz wird innerhalb des Plug-In-Dialogfelds gehostet, das von der CreateEditor-Methode erstellt wird.Darüber hinaus wird das RichTextBox von "messageEditorControl" mit dem Inhalt von IHttpBody aufgefüllt.Das Plug-In kann jedoch nur erstellt werden, wenn SupportsContentTypetrue zurückgibt.Bei diesem Editor gibt SupportsContentTypetrue zurück, wenn der ContentType im IHttpBody "xml" enthält.
Wenn die Bearbeitung des Zeichenfolgentexts abgeschlossen ist und der Benutzer im Plug-In-Dialogfeld auf OK klickt, wird GetNewValue aufgerufen, um den bearbeiteten Text als Zeichenfolge abzurufen und den Zeichenfolgentext in der Anforderung im Webleistungstest-Editor zu aktualisieren.
So erstellen Sie eine Klasse und implementieren Sie den IStringHttpBodyEditorPlugin-Schnittstellencode
Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf das Windows Forms-Steuerelementbibliothek-Projekt, und wählen Sie dann Neues Element hinzufügen aus.
Das Dialogfeld Neues Element hinzufügen wird angezeigt.
Wählen Sie Klasse aus.
Geben Sie im Textfeld Name einen aussagekräftigen Namen für die Klasse ein (z. B. MessageEditorPlugins).
Wählen Sie Hinzufügen aus.
"Class1" wird dem Projekt hinzugefügt und im Code-Editor präsentiert.
Fügen Sie im Code-Editor folgende using-Anweisung hinzu:
using Microsoft.VisualStudio.TestTools.WebTesting;
Schreiben oder kopieren Sie den folgenden Code, um die XmlMessageEditor-Klasse von der IStringHttpBodyEditorPlugin-Schnittstelle zu instanziieren und die erforderlichen Methoden zu implementieren:
/// <summary> /// Editor for generic text based hierarchical messages such as XML and JSON. /// </summary> public class XmlMessageEditor : IStringHttpBodyEditorPlugin { public XmlMessageEditor() { } /// <summary> /// Determine if this plugin supports the content type. /// </summary> /// <param name="contentType">The content type to test.</param> /// <returns>Returns true if the plugin supports the specified content type.</returns> public bool SupportsContentType(string contentType) { return contentType.ToLower().Contains("xml"); } /// <summary> /// Create a UserControl to edit the specified bytes. /// This control will be hosted in the /// plugin dialog which provides OK and Cancel buttons. /// </summary> /// <param name="contentType">The content type of the BinaryHttpBody.</param> /// <param name="initialValue">The bytes to edit. The bytes are the payload of a BinaryHttpBody.</param> /// <returns>A UserControl capable of displaying and editing the byte array value of the specified content type.</returns> public object CreateEditor(string contentType, string initialValue) { messageEditorControl = new MessageEditorControl(); messageEditorControl.EditString = initialValue; return this.messageEditorControl; } /// <summary> /// Gets the edited bytes after the OK button is clicked on the plugin dialog. /// </summary> public string GetNewValue() { return messageEditorControl.EditString; } private MessageEditorControl messageEditorControl; }
Hinzufügen eines IBinaryHttpBodyEditorPlugin zur Klasse
Implementieren Sie die IBinaryHttpBodyEditorPlugin-Schnittstelle.
Übersicht über den Code in dieser Prozedur
Die Codeimplementierung für die IBinaryHttpBodyEditorPlugin-Schnittstelle ähnelt der für IStringHttpBodyEditorPlugin (siehe vorherige Prozedur).Die binäre Version behandelt die Binärdaten jedoch nicht mit einer Zeichenfolge, sondern mithilfe eines Bytearrays.
Das in der ersten Prozedur erstellte UserControl "MessageEditorControl" wird als "messageEditorControl" instanziiert:
private MessageEditorControl messageEditorControl
Die messageEditorControl-Instanz wird innerhalb des Plug-In-Dialogfelds gehostet, das von der CreateEditor-Methode erstellt wird.Darüber hinaus wird das RichTextBox von "messageEditorControl" mit dem Inhalt von IHttpBody aufgefüllt.Das Plug-In kann jedoch nur erstellt werden, wenn SupportsContentTypetrue zurückgibt.Bei diesem Editor gibt SupportsContentTypetrue zurück, wenn der ContentType im IHttpBody "msbin1" enthält.
Wenn die Bearbeitung des Zeichenfolgentexts abgeschlossen ist und der Benutzer im Plug-In-Dialogfeld auf OK klickt, wird GetNewValue aufgerufen, um den bearbeiteten Text als Zeichenfolge abzurufen und die BinaryHttpBody.Data in der Anforderung im Webleistungstest-Editor zu aktualisieren.
So fügen Sie ein IBinaryHttpBodyEditorPlugin zur Klasse hinzu
Schreiben oder kopieren Sie den folgenden Code unter der XmlMessageEditor-Klasse, die in der vorherigen Prozedur hinzugefügt wurde, um die Msbin1MessageEditor-Klasse von der IBinaryHttpBodyEditorPlugin-Schnittstelle zu instanziieren und die erforderlichen Methoden zu implementieren:
/// <summary> /// Editor for MSBin1 content type (WCF messages) /// </summary> public class Msbin1MessageEditor : IBinaryHttpBodyEditorPlugin { /// <summary> /// /// </summary> public Msbin1MessageEditor() { } /// <summary> /// Determine if this plugin supports a content type. /// </summary> /// <param name="contentType">The content type to test.</param> /// <returns>Returns true if the plugin supports the specified content type.</returns> public bool SupportsContentType(string contentType) { return contentType.ToLower().Contains("msbin1"); } /// <summary> /// Create a UserControl to edit the specified bytes. This control will be hosted in the /// plugin dialog which provides OK and Cancel buttons. /// </summary> /// <param name="contentType">The content type of the BinaryHttpBody.</param> /// <param name="initialValue">The bytes to edit. The bytes are the payload of a BinaryHttpBody.</param> /// <returns>A UserControl capable of displaying and editing the byte array value of the specified content type.</returns> public object CreateEditor(string contentType, byte[] initialValue) { messageEditorControl = new MessageEditorControl(); messageEditorControl.EditByteArray = initialValue; return messageEditorControl; } /// <summary> /// Gets the edited bytes after the OK button is clicked on the plugin dialog. /// </summary> public byte[] GetNewValue() { return messageEditorControl.EditByteArray; } private MessageEditorControl messageEditorControl; private object originalMessage; }
Erstellen und Bereitstellen der Plug-Ins
So erstellen Sie das IStringHttpBodyEditorPlugin und IBinaryHttpBodyEditorPlugin und stellen Sie die resultierende DLL bereit
Klicken Sie im Menü Erstellen wählen Sie <Windows Form Control Library project name>Build aus.
Beenden Sie Visual Studio Ultimate.
Hinweis Bevor Sie versuchen, die DLL-Datei zu kopieren, müssen Sie alle Instanzen von Visual Studio Ultimate beenden, um sicherzustellen, dass die Datei nicht gesperrt ist.
Kopieren Sie die resultierende DLL-Datei aus dem bin\debug-Ordner des Projekts (beispielsweise, MessageEditors.dll) in %ProgramFiles%\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies\WebTestPlugins.
Starten Sie Visual Studio Ultimate.
Die DLL-Datei sollte jetzt in Visual Studio Ultimate registriert sein.
Überprüfen der Plug-Ins mithilfe eines Webleistungstests
So testen Sie die Plug-Ins
Erstellen Sie ein Testprojekt.
Erstellen Sie einen Webleistungstest, und geben Sie im Browser die URL eines Webdiensts ein (z. B. http://dev.virtualearth).net/webservices/v1/metadata/searchservice/dev.virtualearth.net.webservices.v1.search.wsdl.
Wenn Sie die Aufzeichnung beenden, erweitern Sie im Webleistungstest-Editor die Anforderung für den Webdienst, und wählen Sie die Option Zeichenfolgentext oder Binärer Text aus.
Wählen Sie im Eigenschaftenfenster "Zeichenfolgentext" oder "Binärer Text" aus und wählen Sie die Auslassungszeichen (…).
Das Dialogfeld HTTP-Textdaten bearbeiten wird angezeigt.
Sie können die Daten jetzt bearbeiten und OK auswählen.Hierdurch wird die anwendbare GetNewValue-Methode aufgerufen, die den Inhalt im IHttpBody aktualisiert.
Kompilieren des Codes
Überprüfen Sie, ob das Zielframework für das Windows-Steuerelementbibliothek-Projekt .NET Framework 4.5 ist.Standardmäßig verwenden Windows-Steuerelementbibliothek-Projekte das .NET Framework 4.5-Clientframework an, das der Microsoft.VisualStudio.QualityTools.WebTestFramework-Verweis nicht eingeschlossen werden kann.
Weitere Informationen finden Sie unter Seite "Anwendung", Projekt-Designer (C#).
Siehe auch
Aufgaben
Gewusst wie: Erstellen eines Anforderungsebenen-Plug-Ins
How to: Create a Custom Extraction Rule for a Web Performance Test
How to: Create a Custom Validation Rule for a Web Performance Test
Gewusst wie: Erstellen eines Auslastungstest-Plug-Ins
Gewusst wie: Erstellen eines codierten Webleistungstests
Gewusst wie: Erstellen eines Visual Studio Add-Ins für die Webleistungstest-Ergebnisansicht
Referenz
Weitere Ressourcen
Erstellen und Verwenden von benutzerdefinierten Plug-Ins für Auslastungs- und Webleistungstests