Cómo: Crear un editor de cuerpo HTTP personalizado para el Editor de prueba de rendimiento web
Este tema se aplica a:
Visual Studio Ultimate |
Visual Studio Premium |
Visual Studio Professional |
Visual Studio Express |
---|---|---|---|
Puede crear un editor de contenido personalizado que le permite editar el contenido del texto de la cadena o el contenido del texto binario de una solicitud de servicio Web, por ejemplo, SOAP, REST, asmx, wcf, RIA y otros tipos de solicitud de servicio Web.
Hay dos tipos de editores que puede implementar:
Editor de contenido de cadena Se implementa usando la interfaz IStringHttpBodyEditorPlugin.
Editor de contenido binario Se implementa usando la interfaz IBinaryHttpBodyEditorPlugin.
Estas interfaces están contenidas en el espacio de nombres Microsoft.VisualStudio.TestTools.WebTesting.
Crear un proyecto de Biblioteca de controles de Windows
Crear un control de usuario mediante un proyecto de Biblioteca de controles de Windows
En Visual Studio Ultimate, en el menú Archivo, haga clic en Nuevo y, a continuación, seleccione Proyecto.
Aparecerá el cuadro de diálogo Nuevo proyecto.
En Plantillas instaladas, seleccione Visual Basic o Visual C# dependiendo de su preferencia de programación y, a continuación, seleccione Windows.
Nota
En este ejemplo se usa Visual C#.
En la lista de plantillas, seleccione Biblioteca de controles de Windows Forms.
En el cuadro de texto Nombre, escriba un nombre, por ejemplo MessageEditors y, a continuación, haga clic en Aceptar.
Nota
En este ejemplo se usa MessageEditors.
El proyecto se agregará a la nueva solución y aparecerá un UserControl denominado UserControl1.cs en el diseñador.
En el Cuadro de herramientas, bajo la categoría Controles comunes, arrastre un RichTextBox hasta la superficie de UserControl1.
Haga clic en el glifo de la etiqueta de acción () situado en la esquina superior derecha del control RichTextBox y seleccione Acoplar en contenedor primario.
En el Explorador de soluciones, haga clic con el botón secundario en el proyecto Biblioteca de controles de Windows Forms y seleccione Propiedades.
En Propiedades, seleccione la pestaña Aplicación.
En la lista desplegable Versión de .NET Framework de destino, seleccione .NET Framework 4.
Aparecerá el cuadro de diálogo Cambio de versión de .NET Framework de destino.
Haga clic en Sí.
En el Explorador de soluciones, haga clic con el botón secundario en el nodo Referencias y seleccione Agregar referencia.
Aparecerá el cuadro de diálogo Agregar referencia.
Haga clic en la pestaña .NET, desplácese hacia abajo y seleccione Microsoft.VisualStudio.QualityTools.WebTestFramework y, a continuación, haga clic en Aceptar.
Si el Diseñador de vistas todavía no está abierto, en el Explorador de soluciones, haga clic con el botón secundario en UserControl1.cs y, a continuación, seleccione Diseñador de vistas.
En la superficie de diseño, haga clic con el botón secundario y seleccione Ver código.
(Opcional) Cambie el nombre de la clase y el constructor de UserControl1 a un nombre significativo, por ejemplo MessageEditorControl:
Nota
En el ejemplo se usa MessageEditorControl.
namespace MessageEditors { public partial class MessageEditorControl : UserControl { public MessageEditorControl() { InitializeComponent(); } } }
Agregue las siguientes propiedades para habilitar la obtención y el establecimiento del texto en RichTextBox1. La interfaz IStringHttpBodyEditorPlugin usará EditString y IBinaryHttpBodyEditorPlugin usará 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); } }
Agregue una clase para el proyecto Biblioteca de controles de Windows Forms.
Agregue una clase al proyecto. Se usará para implementar las interfaces IBinaryHttpBodyEditorPlugin y IStringHttpBodyEditorPlugin.
Información general del código de este procedimiento
Se crea una instancia del UserControl MessageEditorControl creado en el procedimiento anterior como messageEditorControl:
private MessageEditorControl messageEditorControl
La instancia de messageEditorControl se hospeda dentro del cuadro de diálogo de complemento creado por el método CreateEditor. Además, el RichTextBox de messageEditorControl se rellena con el contenido de IHttpBody. Sin embargo, la creación del complemento no se puede producir a menos que SupportsContentType devuelva true. En el caso de este editor, SupportsContentType devuelve true si ContentType en IHttpBody contiene "xml".
Cuando se completa la edición del texto de la cadena y el usuario hace clic en Aceptar en el cuadro de diálogo del complemento, se llama a GetNewValue para obtener el texto editado como una cadena y actualizar el Texto de la cadena de la solicitud en el Editor de prueba de rendimiento web.
Para crear una clase e implementar el código de la interfaz IStringHttpBodyEditorPlugin
En el Explorador de soluciones, haga clic con el botón secundario en el proyecto Biblioteca de controles de Windows Forms y seleccione Agregar nuevo elemento.
Se abrirá el cuadro de diálogo Agregar nuevo elemento.
Seleccione Clase.
En el cuadro de texto Nombre, escriba un nombre significativo para la clase, por ejemplo MessageEditorPlugins.
Haga clic en Agregar.
Class1 se agregará al proyecto y se presentará en el Editor de código.
En el Editor de código, agregue la siguiente instrucción using:
using Microsoft.VisualStudio.TestTools.WebTesting;
Escriba o copie el siguiente código para crear una instancia de la clase XmlMessageEditor de la interfaz IStringHttpBodyEditorPlugin e implementar los métodos necesarios:
/// <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; }
Agregar IBinaryHttpBodyEditorPlugin a la clase
Implementar la interfaz IBinaryHttpBodyEditorPlugin.
Información general del código de este procedimiento
La implementación del código para la interfaz IBinaryHttpBodyEditorPlugin es similar a la IStringHttpBodyEditorPlugin tratada en el procedimiento anterior. Sin embargo, la versión binaria usa una matriz de bytes para administrar los datos binarios en lugar de una cadena.
Se crea una instancia del UserControl MessageEditorControl creado en el primer procedimiento como messageEditorControl:
private MessageEditorControl messageEditorControl
La instancia de messageEditorControl se hospeda dentro del cuadro de diálogo de complemento creado por el método CreateEditor. Además, el RichTextBox de messageEditorControl se rellena con el contenido de IHttpBody. Sin embargo, la creación del complemento no se puede producir a menos que SupportsContentType devuelva true. En el caso de este editor, SupportsContentType devuelve true si ContentType en IHttpBody contiene "msbin1".
Cuando se completa la edición del texto de la cadena y el usuario hace clic en Aceptar en el cuadro de diálogo del complemento, se llama a GetNewValue para obtener el texto editado como una cadena y actualizar BinaryHttpBody.Data de la solicitud en el Editor de prueba de rendimiento web.
Para agregar IBinaryHttpBodyEditorPlugin a la clase
Escriba o copie el siguiente código bajo la clase XmlMessageEditor agregada en el procedimiento anterior para crear una instancia de la clase Msbin1MessageEditor de la interfaz IBinaryHttpBodyEditorPlugin e implementar los métodos necesarios:
/// <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; }
Compilar e implementar los complementos
Para compilar e implementar el archivo dll resultante para IStringHttpBodyEditorPlugin e IBinaryHttpBodyEditorPlugin
En el menú Generar, haga clic en Generar <nombre del proyecto Biblioteca de controles de Windows Forms>.
Salga de Visual Studio Ultimate.
Nota
Debe salir de todas las instancias de Visual Studio Ultimate para asegurarse de que no se bloquea el archivo dll antes de intentar copiarlo.
Copie el archivo .dll resultante de la carpeta bin\debug del proyecto (por ejemplo, MessageEditors.dll) en %ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\WebTestPlugins.
Inicie Visual Studio Ultimate.
El archivo .dll se debe registrar con Visual Studio Ultimate.
Comprobar los complementos usando una prueba de rendimiento web
Para probar los complementos
Cree un proyecto de prueba.
Cree una prueba de rendimiento web y escriba una dirección URL en el explorador para un servicio Web, por ejemplo http://dev.virtualearth. net/webservices/v1/metadata/searchservice/dev.virtualearth. net.webservices.v1.search.wsdl.
Al finalizar la grabación, en el Editor de prueba de rendimiento web, expanda la solicitud para el servicio Web y seleccione Texto de la cadena o Cuerpo binario.
En la ventana Propiedades, seleccione Texto de la cadena o Cuerpo binario y haga clic en los puntos suspensivos (.).
Aparecerá el cuadro de diálogo Editar datos del cuerpo HTTP.
Ahora puede editar los datos y hacer doble clic en Aceptar. Esto invoca el método GetNewValue aplicable para actualizar el contenido de IHttpBody.
Compilar el código
Compruebe que la versión de .NET Framework de destino para el proyecto Biblioteca de controles de Windows Forms es .NET Framework 4. De forma predeterminada, los proyectos Biblioteca de controles de Windows Forms tienen como destino el marco de cliente .NET Framework 4, que no permitirá la inclusión de la referencia de Microsoft.VisualStudio.QualityTools.WebTestFramework.
Para obtener más información, vea Página de aplicación, Diseñador de proyectos (C#).
Vea también
Tareas
Cómo: Crear un complemento de nivel de solicitud
Cómo: Crear una regla de extracción personalizada para una prueba de rendimiento web
Cómo: Crear una regla de validación personalizada para una prueba de rendimiento web
Cómo: Crear un complemento de pruebas de carga
Cómo: Crear una prueba de rendimiento web codificada
Referencia
Otros recursos
Crear y usar complementos personalizados para las pruebas de carga y de rendimiento web