Procedura: creare un editor del corpo HTTP personalizzato per l'Editor test prestazioni Web

È possibile creare un editor dei contenuti personalizzato che consenta di modificare il contenuto del corpo delle stringhe o del corpo binario di una richiesta di servizio Web, ad esempio SOAP, REST, asmx, wcf, RIA e altri tipi di richieste di servizio Web.

Sono disponibili due tipi di editor che è possibile implementare:

Queste interfacce sono contenute nello spazio dei nomi Microsoft.VisualStudio.TestTools.WebTesting.

Requisiti

  • Visual Studio Ultimate

Creazione di un progetto di libreria di controlli Windows

Creare un controllo utente utilizzando un progetto di libreria di controlli Windows

  1. In Visual Studio Ultimate scegliere Nuovo dal menu File, quindi selezionare Progetto.

    Verrà visualizzata la finestra di dialogo Nuovo progetto.

  2. In Modelli installati selezionare Visual Basic o Visual C# secondo le esigenze di programmazione, quindi selezionare Windows.

    [!NOTA]

    Nell'esempio viene utilizzato C#.

  3. Nell'elenco dei modelli selezionare Libreria di controlli Windows Form.

  4. Nella casella di testo Nome, digitare un nome, ad esempio MessageEditors e scegliere OK.

    [!NOTA]

    Nell'esempio viene utilizzato MessageEditors.

    Il progetto viene aggiunto alla nuova soluzione e un oggetto UserControl denominato UserControl1.cs viene presentato nella finestra di progettazione.

  5. Dalla casella degli strumenti, sotto la categoria Controlli comuni trascinare un oggetto RichTextBox sulla superficie di UserControl1.

  6. Scegliere il glifo del tag azioni (Glifo Smart Tag) nell'angolo superiore destro del controllo RichTextBox, quindi selezionare Ancora nel contenitore padre.

  7. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto Libreria di controlli Windows Form e scegliere Proprietà.

  8. Nella pagina Proprietà selezionare la scheda Applicazione.

  9. Nell'elenco Framework di destinazione selezionare .NET Framework 4.

  10. Viene visualizzata la finestra di dialogo Modifica versione .NET Framework di destinazione.

  11. Scegliere .

  12. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo Riferimenti e scegliere Aggiungi riferimento.

  13. Verrà visualizzata la finestra di dialogo Aggiungi riferimento.

  14. Scegliere la scheda .NET, scorrere verso il basso, quindi selezionare Microsoft.VisualStudio.QualityTools.WebTestFramework e fare clic su OK.

  15. Se la finestra di progettazione non è ancora aperta, in Esplora soluzioni, fare clic con il pulsante destro del mouse su UserControl1.cs, quindi selezionare Visualizza finestra di progettazione.

  16. Fare clic con il pulsante destro del mouse sull'area di progettazione e selezionare Visualizza codice.

  17. (Facoltativo) Assegnare alla classe e al costruttore denominati UserControl1 un altro nome significativo, ad esempio MessageEditorControl:

    [!NOTA]

    Nell'esempio viene utilizzato MessageEditorControl.

    namespace MessageEditors
    {
        public partial class MessageEditorControl : UserControl
        {
            public MessageEditorControl()
            {
                InitializeComponent();
            }
        }
    }
    
  18. Aggiungere le proprietà seguenti per abilitare l'ottenimento e l'impostazione del testo in RichTextBox1.L'interfaccia IStringHttpBodyEditorPlugin utilizzerà EditString e IBinaryHttpBodyEditorPlugin utilizzerà 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);
                }
            }
    

Aggiunta di una classe per il progetto di libreria di controlli Windows

Aggiungere una classe al progetto.Verrà utilizzata per implementare le interfacce IStringHttpBodyEditorPlugin e IBinaryHttpBodyEditorPlugin.

Panoramica del codice in questa procedura

Viene creata un'istanza dell'oggetto MessageEditorControl UserControl creato nella procedura precedente come messageEditorControl:

private MessageEditorControl messageEditorControl

L'istanza dell'oggetto messageEditorControl è ospitata all'interno della finestra di dialogo del plug-in creata dal metodo CreateEditor.Inoltre, l'oggetto RichTextBox di messageEditorControl viene popolato con il contenuto in IHttpBody.Tuttavia, la creazione del plug-in non può aver luogo a meno che SupportsContentType non restituisca true.Nel caso di questo editor, SupportsContentType restituisce true se ContentType in IHttpBody contiene "xml".

Quando viene completata la modifica del corpo della stringa e l'utente fa clic su OK nella casella della finestra di dialogo del plug-in, viene chiamato GetNewValue per ottenere il testo modificato come stringa e aggiornare il Corpo stringa nella richiesta nell'Editor test prestazioni Web.

Per creare una classe e implementare il codice di interfaccia di IStringHttpBodyEditorPlugin

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto Libreria di controlli Windows Form e scegliere Aggiungi nuovo elemento.

  2. Verrà visualizzata la finestra di dialogo Aggiungi nuovo elemento.

  3. Selezionare Classe.

  4. Nella casella di testo Nome, digitare un nome significativo, ad esempio MessageEditorPlugins.

  5. Scegliere Aggiungi.

    L'oggetto Class1 viene aggiunto al progetto e presentato nell'editor di codice.

  6. Nell'editor di codice aggiungere la seguente istruzione Using:

    using Microsoft.VisualStudio.TestTools.WebTesting;
    
  7. Scrivere o copiare il codice seguente per creare un'istanza della classe XmlMessageEditor dell'interfaccia IStringHttpBodyEditorPlugin e implementare i metodi richiesti:

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

Aggiunta di un oggetto IBinaryHttpBodyEditorPlugin alla classe

Implementare l'interfaccia IBinaryHttpBodyEditorPlugin.

Panoramica del codice in questa procedura

L'implementazione del codice per l'interfaccia IBinaryHttpBodyEditorPlugin è simile a quella dell'oggetto IStringHttpBodyEditorPlugin illustrato nella procedura precedente.Tuttavia, la versione binaria utilizza una matrice di byte per gestire i dati binari anziché una stringa.

Viene creata un'istanza dell'oggetto MessageEditorControl UserControl creato nella prima procedura come messageEditorControl:

private MessageEditorControl messageEditorControl

L'istanza dell'oggetto messageEditorControl è ospitata all'interno della finestra di dialogo del plug-in creata dal metodo CreateEditor.Inoltre, l'oggetto RichTextBox di messageEditorControl viene popolato con il contenuto in IHttpBody.Tuttavia, la creazione del plug-in non può aver luogo a meno che SupportsContentType non restituisca true.Nel caso di questo editor, SupportsContentType restituisce true se ContentType in IHttpBody contiene "msbin1".

Quando viene completata la modifica del corpo della stringa e l'utente fa clic su OK nella casella della finestra di dialogo del plug-in, viene chiamato GetNewValue per ottenere il testo modificato come stringa e aggiornare l'oggetto BinaryHttpBody.Data nella richiesta nell'Editor test prestazioni Web.

Per aggiungere un oggetto IBinaryHttpBodyEditorPlugin alla classe

  • Scrivere o copiare il codice seguente sotto la classe XmlMessageEditor aggiunta nella procedura precedente per creare un'istanza della classe Msbin1MessageEditor dall'interfaccia IBinaryHttpBodyEditorPlugin e implementare i metodi richiesti:

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

Compilazione e distribuzione dei plug-in

Per compilare e distribuire il file dll risultante per IStringHttpBodyEditorPlugin e IBinaryHttpBodyEditorPlugin

  1. Dal menu Compila, scegliere Compila <nome progetto Libreria di controlli Windows Form>.

  2. Chiudere Visual Studio Ultimate.

    [!NOTA]

    È necessario uscire da tutte le istanze di Visual Studio Ultimate per assicurarsi che il file dll non sia bloccato, prima di tentare di copiarlo.

  3. Copiare il file dll risultante dalla cartella di progetto bin\debug a %Programmi%\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies\WebTestPlugins.

  4. Avviare Visual Studio Ultimate.

    I file dll devono essere registrati in Visual Studio Ultimate.

Verifica dei plug-in utilizzando un test delle prestazioni Web

Per eseguire il test dei plug-in

  1. Creare un progetto di test.

  2. Creare un test delle prestazioni Web e immettere un URL di servizio Web nel browser, ad esempio http://dev.virtualearth.net/webservices/v1/metadata/searchservice/dev.virtualearth.net.webservices.v1.search.wsdl.

  3. Quando si termina la registrazione, nell'Editor test prestazioni Web espandere la richiesta per il servizio Web e selezionare un Corpo stringa o un Corpo binario.

  4. Nella finestra Proprietà selezionare Corpo stringa o Corpo binario e fare clic sui puntini di sospensione (…).

    Viene visualizzata la finestra di dialogo Modifica dati del corpo HTTP.

  5. È ora possibile modificare i dati e fare clic su OK.In questo modo viene richiamato il metodo GetNewValue per aggiornare il contenuto nell'oggetto IHttpBody.

Compilazione del codice

  • Verificare che il framework di destinazione per il progetto Libreria di controlli Windows sia .NET Framework 4,5.Per impostazione predefinita, i progetti di Libreria di controlli Windows utilizzano il framework del client .NET Framework 4,5 che non consentirà l'inclusione di riferimento Microsoft.VisualStudio.QualityTools.WebTestFramework.

    Per ulteriori informazioni, vedere Pagina Applicazione, Progettazione progetti (C#).

Vedere anche

Attività

Procedura: creare un plug-in a livello di richiesta

Procedura: creare una regola di estrazione personalizzata per un test delle prestazioni Web

Procedura: creare una regola di convalida personalizzata per un test delle prestazioni Web

Procedura: creare un plug-in test di carico

Procedura: creare un test Web codificato

Procedura: creare un componente aggiuntivo di Visual Studio per il Visualizzatore risultati test prestazioni Web

Riferimenti

IStringHttpBodyEditorPlugin

CreateEditor

SupportsContentType

GetNewValue

IBinaryHttpBodyEditorPlugin

CreateEditor

SupportsContentType

GetNewValue

IHttpBody

ContentType

UserControl

RichTextBox

Altre risorse

Creazione e utilizzo di plug-in personalizzati per i test di carico e delle prestazioni Web