Partilhar via


Como criar um Editor de Corpo HTTP Personalizado para o Editor de Teste de Desempenho na Web

 

Publicado: abril de 2016

Você pode criar um editor de conteúdo personalizado que permite que você edite o conteúdo do corpo da cadeia de caracteres ou o conteúdo binário do corpo de uma solicitação de serviço Web, por exemplo, SOAP, REST, asmx, wcf, RIA e outros tipos de solicitação de Web Service.

Requisitos

  • O Visual Studio Enterprise

Você pode implementar esses tipos de editores:

Essas interfaces estão contidas no namespace Microsoft.VisualStudio.TestTools.WebTesting.

Criar um projeto de biblioteca de controle do Windows

Crie um controle de usuário usando um projeto de Biblioteca de Controle do Windows

  1. No Visual Studio, no arquivo menu, escolha novo e, em seguida, selecione projeto.

    A caixa de diálogo Novo Projeto é exibida.

  2. Em Modelos Instalados, selecione Visual Basic ou Visual C# dependendo de sua preferência de programação, selecione Windows.

    Dica

    Este exemplo usa o Visual C#.

  3. Na lista de modelos de projeto, selecione Biblioteca de Controle do Windows Forms.

  4. Na caixa de texto Nome, por exemplo, digite MessageEditors e escolha OK.

    Dica

    Este exemplo usa MessageEditors.

    O projeto é adicionado à nova solução e um UserControl chamado UserControl1.cs é apresentado no Designer.

  5. Da Caixa de Ferramentas, na categoria Controles Comuns , arraste uma RichTextBox para a superfície de UserControl1.

  6. Escolha o glifo de marca de ação (Glifo de marca inteligente) no canto superior direito do RichTextBox de controle e, em seguida, selecione e Encaixar no recipiente pai.

  7. No Gerenciador de Soluções, clique com o botão direito no projeto da Biblioteca do Windows Forms e selecione Propriedades.

  8. Na página Propriedades, selecione a guia Aplicativo.

  9. Na lista suspensa Target framework, selecione .NET Framework 4.

  10. A caixa de diálogo Modificação do Framework de Destino é exibida.

  11. Escolha Sim.

  12. No Gerenciador de Soluções, clique com o botão direito no nó de Referências e selecione Adicionar Referência.

  13. A caixa de diálogo Adicionar Referência é exibida.

  14. Escolha a guia .NET , rola para baixo e selecione Microsoft.VisualStudio.QualityTools.WebTestFramework e clique em OK.

  15. Se Exibir Designer ainda não estiver aberto, no Solution Explorer, clique com o botão direito do mouse em UserControl1.cs e selecione Exibir Designer.

  16. Na superfície de design, clique com o botão direito e selecione Exibir código.

  17. (Opcional) Altere o nome da classe e o construtor de UserControl1 para um nome significativo, por exemplo, MessageEditorControl:

    Dica

    O exemplo usa MessageEditorControl.

    namespace MessageEditors
    {
        public partial class MessageEditorControl : UserControl
        {
            public MessageEditorControl()
            {
                InitializeComponent();
            }
        }
    }
    
  18. Adicione as seguintes propriedades para que seja possível obter e definir o texto em RichTextBox1. A interface de IStringHttpBodyEditorPlugin usará EditString e 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);
                }
            }
    

Adicionar uma classe ao projeto de biblioteca de controle do Windows

Adicione uma classe ao projeto. Será usado para implementar as interfaces IStringHttpBodyEditorPlugin e IBinaryHttpBodyEditorPlugin.

Visão geral do código neste procedimento

O MessageEditorControl UserControl criado no primeiro procedimento anterior é instanciado como messageEditorControl:

private MessageEditorControl messageEditorControl

A instância do messageEditorControl é hospedada na caixa de diálogo de plug-in que é criada pelo método CreateEditor. Além disso, RichTextBox de messageEditorControl é preenchido com o conteúdo em IHttpBody. No entanto, a criação do plug-in não pode ocorrer a menos que SupportsContentType retorne true. No caso deste editor, SupportsContentType retorna true se ContentType em IHttpBody contiver "xml".

Quando a edição do corpo da cadeia de caracteres terminar e o usuário clicar em OK na caixa de diálogo de plug-in, GetNewValue é chamado para obter o texto editado como uma cadeia de caracteres e atualizar Corpo da String na solicitação no editor de desempenho de teste na Web.

Para criar uma classe e implementar o código de interface IStringHttpBodyEditorPlugin

  1. No Gerenciador de Soluções, clique com o botão direito no projeto Biblioteca de Controle Windows Forms e clique em Adicionar Novo Item.

  2. A caixa de diálogo Adicionar Novo Item é exibida.

  3. Selecione Classe.

  4. Na caixa de texto Nome, digite um nome significativo para a classe, por exemplo, MessageEditorPlugins.

  5. Escolha Adicionar.

    Class1 é adicionado ao projeto e aberto no editor de código.

  6. No Editor de Código, adicione as seguintes instruções de uso:

    using Microsoft.VisualStudio.TestTools.WebTesting;
    
  7. Escreva ou copie o seguinte código para criar uma instância da classe de XmlMessageEditor de interface de IStringHttpBodyEditorPlugin e para implementar métodos necessários:

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

Adicionar um IBinaryHttpBodyEditorPlugin à classe

Implementar a interface IBinaryHttpBodyEditorPlugin.

Visão geral do código neste procedimento

A implementação de código para a interface do IBinaryHttpBodyEditorPlugin é semelhante ao IStringHttpBodyEditorPlugin abrangido no procedimento anterior. No entanto, a versão binária usa uma matriz de bytes para manipular os dados binários em vez de uma cadeia de caracteres.

O MessageEditorControl UserControl criado no primeiro procedimento é instanciado como messageEditorControl:

private MessageEditorControl messageEditorControl

A instância do messageEditorControl é hospedada na caixa de diálogo de plug-in que é criada pelo método CreateEditor. Além disso, RichTextBox de messageEditorControl é preenchido com o conteúdo em IHttpBody. No entanto, a criação do plug-in não pode ocorrer a menos que SupportsContentType retorne true. No caso deste editor, SupportsContentType retorna true se ContentType em IHttpBody contiver “msbin1”.

Quando a edição do corpo da cadeia de caracteres terminar e o usuário clicar em OK na caixa de diálogo de plug-in, GetNewValue é chamado para obter o texto editado como uma cadeia de caracteres e atualizar BinaryHttpBody.Data na solicitação no editor de desempenho de teste na Web.

Para adicionar o IBinaryHttpBodyEditorPlugin à classe

  • Escreva ou copie o seguinte código sob a classe de XmlMessageEditor adicionada ao procedimento anterior para criar uma instância da classe de Msbin1MessageEditor de interface de IBinaryHttpBodyEditorPlugin e para implementar métodos necessários:

    /// <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 implantar os plug-ins

Para criar e implantar o DLL resultante para o IStringHttpBodyEditorPlugin e o IBinaryHttpBodyEditorPlugin

  1. No menu Compilação, escolha Compilação <nome do projeto de biblioteca de controle do Windows Form>.

  2. Feche todas as instâncias do Visual Studio.

    Dica

    Isso garante que o arquivo. dll não está bloqueado antes de copiá-lo.

  3. Copie o arquivo .dll resultante da pasta bin\debug de seus projetos (por exemplo, MessageEditors.dll) para %ProgramFiles%\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies\WebTestPlugins.

  4. Abra o Visual Studio.

    O arquivo. dll agora deve ser registrado com o Visual Studio.

Verifique os plug-ins usando um teste de desempenho da Web

Para testar plug-ins

  1. Criar um projeto de teste.

  2. Crie uma Web de teste de desempenho e digite uma URL no navegador para um serviço da Web, por exemplo, http://dev.virtualearth. NET/WebServices/v1/Metadata/searchservice/dev.VirtualEarth. NET.WebServices.v1.Search.WSDL.

  3. Quando terminar a gravação, no editor de teste de desempenho da Web, expanda a solicitação para o serviço Web e selecione Corpo da cadeia de caracteres ou um Corpo binário.

  4. Na janela Propriedades, selecione Corpo da Cadeia de Caracteres ou Corpo Binário e escolha as reticências (…).

    A caixa de diálogo Editar corpo de dados HTTP é exibida.

  5. Agora você pode editar os dados e escolher OK. Isso chama o método GetNewValue aplicável para atualizar o conteúdo no IHttpBody.

Compilando o código

  • Verifique se o framework de destino para o projeto da Biblioteca de Controles do Windows é o .NET Framework 4.5. Por padrão, os projetos de biblioteca de controle do Windows destinam-se à estrutura do cliente do .NET Framework 4.5, que não permitirá a inclusão de referência de Microsoft.VisualStudio.QualityTools.WebTestFramework.

    Para obter mais informações, consulte Página Aplicativo, Designer de Projeto (C#).

Consulte também

IStringHttpBodyEditorPlugin
CreateEditor
SupportsContentType
GetNewValue
IBinaryHttpBodyEditorPlugin
CreateEditor
SupportsContentType
GetNewValue
IHttpBody
ContentType
UserControl
RichTextBox
Criar código personalizado e plug-ins para testes de carga
Como criar um plug-in de nível de solicitação
Codificando uma regra de extração personalizada para um teste de desempenho para Web
Codificando uma regra de validação personalizada para um teste de desempenho para Web
Como criar um plug-in de teste de carga
[obsoleto] Como criar um teste de desempenho na Web codificado
Como criar um complemento do Visual Studio para o Visualizador de Resultados de Teste de Desempenho na Web