Freigeben über


How to: Create a Custom HTTP Body Editor for the Web Performance Test Editor

Dieses Thema gilt für folgende Anwendungsbereiche:

Visual Studio Ultimate

Visual Studio Premium

Visual Studio Professional 

Visual Studio Express

Thema ist vorhanden Thema ist nicht vorhanden Thema ist nicht vorhanden Thema ist nicht vorhanden

Sie können einen benutzerdefinierten Inhalts-Editor erstellen, der Ihnen ermöglicht, den Zeichenfolgentextinhalt oder den binären Textinhalt einer Webdienstanforderung zu bearbeiten (z. B. SOAP, REST, asmx, wcf, RIA und andere Webdienstanforderungstypen).

Es gibt zwei Typen von Editoren, die Sie implementieren können:

Diese Schnittstellen sind im Microsoft.VisualStudio.TestTools.WebTesting-Namespace enthalten.

Erstellen eines Windows-Steuerelementbibliothek-Projekts

Erstellen eines Benutzersteuerelements mithilfe eines Windows-Steuerelementbibliothek-Projekts

  1. Klicken Sie in Visual Studio Ultimate im Menü Datei auf Neu, und wählen Sie Projekt aus.

    Das Dialogfeld Neues Projekt wird angezeigt.

  2. Wählen Sie unter Installierte Vorlagen je nach Programmieranforderungen entweder Visual Basic oder Visual C# aus, und wählen Sie dann Windows aus.

    Tipp

    In diesem Beispiel wird Visual C# verwendet.

  3. Wählen Sie in der Liste der Vorlagen den Eintrag Windows Forms-Steuerelementbibliothek aus.

  4. Geben Sie im Textfeld "Name" einen Namen ein, etwa MessageEditors, und klicken Sie auf OK.

    Tipp

    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.

  5. Ziehen Sie von der Toolbox unter der Kategorie Allgemeine Steuerelemente ein RichTextBox auf die Oberfläche von "UserControl1".

  6. Klicken Sie auf das Aktionstagsymbol (Smarttag-Glyphe) in der oberen rechten Ecke des RichTextBox-Steuerelements, und wählen Sie dann In übergeordnetem Container andocken aus.

  7. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf das Windows Forms-Bibliotheksprojekt, und wählen Sie Eigenschaften aus.

  8. Wählen Sie unter "Eigenschaften" die Registerkarte Anwendung aus.

  9. Wählen Sie in der Dropdownliste Zielframework den Eintrag .NET Framework 4 aus.

  10. Das Dialogfeld "Änderung des Zielframeworks" wird angezeigt.

  11. Klicken Sie auf Ja.

  12. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf den Knoten Verweise, und wählen Sie dann Verweis hinzufügen aus.

  13. Das Dialogfeld Verweis hinzufügen wird angezeigt.

  14. Klicken Sie auf die Registerkarte .NET, führen Sie einen Bildlauf nach unten durch, und wählen Sie Microsoft.VisualStudio.QualityTools.WebTestFramework aus. Klicken Sie dann auf OK.

  15. 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.

  16. Klicken Sie auf der Designoberfläche mit der rechten Maustaste, und wählen Sie Code anzeigen aus.

  17. (Optional) Ändern Sie den Namen der Klasse und des Konstruktors von "UserControl1" in einen aussagekräftigen Namen, z. B. "MessageEditorControl":

    Tipp

    Im Beispiel wird "MessageEditorControl" verwendet.

    namespace MessageEditors
    {
        public partial class MessageEditorControl : UserControl
        {
            public MessageEditorControl()
            {
                InitializeComponent();
            }
        }
    }
    
  18. 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 SupportsContentType true zurückgibt. Bei diesem Editor gibt SupportsContentType true 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

  1. 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.

  2. Das Dialogfeld Neues Element hinzufügen wird angezeigt.

  3. Wählen Sie Klasse aus.

  4. Geben Sie im Textfeld Name einen aussagekräftigen Namen für die Klasse ein (z. B. MessageEditorPlugins).

  5. Klicken Sie auf Hinzufügen.

    "Class1" wird dem Projekt hinzugefügt und im Code-Editor präsentiert.

  6. Fügen Sie im Code-Editor folgende using-Anweisung hinzu:

    using Microsoft.VisualStudio.TestTools.WebTesting;
    
  7. 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 SupportsContentType true zurückgibt. Bei diesem Editor gibt SupportsContentType true 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

  1. Klicken Sie im Menü "Erstellen" auf "<Name des Windows Form-Steuerelementbibliothek-Projekts> erstellen".

  2. Beenden Sie Visual Studio Ultimate.

    Tipp

    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.

  3. Kopieren Sie die resultierende DLL-Datei (z. B. "MessageEditors.dll") aus dem Bin\Debug-Ordner des Projekts nach "%ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\WebTestPlugins".

  4. 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

  1. Erstellen Sie ein Testprojekt.

  2. 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.

  3. 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.

  4. Wählen Sie im Eigenschaftenfenster "Zeichenfolgentext" oder "Binärer Text" aus, und klicken Sie auf die Auslassungspunkte (…).

    Das Dialogfeld HTTP-Textdaten bearbeiten wird angezeigt.

  5. Sie können die Daten jetzt bearbeiten und auf "OK" klicken. 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 ist. Standardmäßig verwenden Windows-Steuerelementbibliothek-Projekte das .NET Framework 4-Clientframework als Ziel, sodass 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

Referenz

IStringHttpBodyEditorPlugin

CreateEditor

SupportsContentType

GetNewValue

IBinaryHttpBodyEditorPlugin

CreateEditor

SupportsContentType

GetNewValue

IHttpBody

ContentType

UserControl

RichTextBox

Weitere Ressourcen

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

Gewusst wie: Erstellen eines Visual Studio Add-Ins für die Webleistungstest-Ergebnisansicht