Procedura: creare un editor del corpo HTTP personalizzato per l'Editor test prestazioni Web
È possibile creare un editor dei contenuti personalizzato per 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:
Editor di contenuto stringa Questo editor viene implementato utilizzando l'interfaccia IStringHttpBodyEditorPlugin.
Editor di contenuto binario Questo editor viene implementato utilizzando l'interfaccia IBinaryHttpBodyEditorPlugin.
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
In Visual Studio Ultimate scegliere Nuovo dal menu File, quindi selezionare Progetto.
Verrà visualizzata la finestra di dialogo Nuovo progetto.
In Modelli installati selezionare Visual Basic o Visual C# secondo le esigenze di programmazione, quindi selezionare Windows.
Nota
Nell'esempio viene utilizzato C#.
Nell'elenco dei modelli selezionare Libreria di controlli Windows Form.
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.
Dalla casella degli strumenti, sotto la categoria Controlli comuni trascinare un oggetto RichTextBox sulla superficie di UserControl1.
Scegliere il glifo del tag azioni (
) nell'angolo superiore destro del controllo RichTextBox, quindi selezionare Ancora nel contenitore padre.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto Libreria di controlli Windows Form e scegliere Proprietà.
Nella pagina Proprietà selezionare la scheda Applicazione.
Nell'elenco Framework di destinazione selezionare .NET Framework 4.
Viene visualizzata la finestra di dialogo Modifica versione .NET Framework di destinazione.
Scegliere Sì.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo Riferimenti e scegliere Aggiungi riferimento.
Verrà visualizzata la finestra di dialogo Aggiungi riferimento.
Scegliere la scheda .NET, scorrere verso il basso, quindi selezionare Microsoft.VisualStudio.QualityTools.WebTestFramework e scegliere OK.
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.
Fare clic con il pulsante destro del mouse sull'area di progettazione e selezionare Visualizza codice.
(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(); } } }
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
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto Libreria di controlli Windows Form e scegliere Aggiungi nuovo elemento.
Verrà visualizzata la finestra di dialogo Aggiungi nuovo elemento.
Selezionare Classe.
Nella casella di testo Nome, digitare un nome significativo, ad esempio MessageEditorPlugins.
Scegliere Aggiungi.
L'oggetto Class1 viene aggiunto al progetto e presentato nell'editor di codice.
Nell'editor di codice aggiungere la seguente istruzione Using:
using Microsoft.VisualStudio.TestTools.WebTesting;
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
Dal menu Compila scegliere Compila <nome progetto Libreria di controlli Windows Form>.
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.
Copiare il file dll risultante dalla cartella di progetto bin\debug a %Programmi%\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies\WebTestPlugins.
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
Creare un progetto di test.
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.
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.
Nella finestra Proprietà selezionare Corpo stringa o Corpo binario e scegliere i puntini di sospensione (…).
Viene visualizzata la finestra di dialogo Modifica dati del corpo HTTP.
È ora possibile modificare i dati e scegliere 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 di libreria di controlli Windows sia .NET Framework 4.5. Per impostazione predefinita, i progetti di libreria di controlli Windows sono destinati al framework client .NET Framework 4.5, che impedisce l'inclusione del 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
Codifica di una regola di estrazione personalizzata per un test delle prestazioni Web
Codifica di una regola di convalida personalizzata per un test delle prestazioni Web
Procedura: creare un plug-in test di carico
[ritirato] Procedura: creare un test delle prestazioni Web codificato