Partilhar via


Como criar um plug-in de gravador

O WebTestRecorderPlugin permite que você modifique um teste de desempenho na Web gravado. A modificação ocorre depois que você escolhe Parar na barra de ferramentas de gravação do teste de desempenho na Web, mas antes de o teste ser salvo e apresentado no Editor de Teste de Desempenho na Web.

O problema principal que o plug-in de gravação ajuda a resolver é a execução de sua própria correlação personalizada em parâmetros dinâmicos. Com a funcionalidade de correlação interna, os testes de desempenho na Web detectam os parâmetros dinâmicos na gravação da Web mediante conclusão ou quando você usa Promover parâmetros dinâmicos a parâmetros de teste na Web na barra de ferramentas do Editor de Teste de Desempenho na Web. Para obter mais informações, consulte [obsoleto] Como resolver problemas de reprodução do teste de desempenho para Web causados por parâmetros dinâmicos. No entanto, a funcionalidade de detecção interna nem sempre encontra todos os parâmetros dinâmicos. Por exemplo, ela não encontra uma ID da sessão, que normalmente tem seu valor alterado entre 5 a 30 minutos. Portanto, você precisa executar manualmente o processo de correlação. Para obter mais informações, consulte [obsoleto] Como promover parâmetros dinâmicos para parâmetros de teste de desempenho para Web.

O WebTestRecorderPlugin permite que você escreva código para seu próprio plug-in personalizado. Este plug-in pode executar a correlação ou modificar o teste de desempenho na Web de várias maneiras antes de ser salvo e apresentado no Editor de Teste de Desempenho na Web. Portanto, se você determinar que uma variável dinâmica específica deve ser correlacionada para muitas de suas gravações, será possível automatizar o processo.

Um plug-in de gravação também pode ser usado para adicionar regras de extração e de validação, adicionar parâmetros de contexto ou converter comentários em transações em um teste de desempenho na Web.

Os procedimentos a seguir descrevem como criar o código rudimentar para um plug-in de gravação, implantar o plug-in e executar o plug-in. O código de exemplo após os procedimentos demonstra como usar o Visual C# para criar um plug-in de gravação personalizado para correlação de parâmetro dinâmico.

Requisitos

  • Visual Studio Ultimate

Criando um plug-in de gravação

Para criar um plug-in de gravação

  1. Abra uma solução que contenha o projeto de teste de carga e desempenho na Web com o teste de desempenho na Web para o qual você deseja criar um plug-in de gravação.

  2. No Gerenciador de Soluções, clique com o botão direito do mouse na solução, selecione Adicionar e escolha Novo Projeto.

    A caixa de diálogo Adicionar Novo Projeto é exibida.

  3. Em Modelos Instalados, selecione Visual C#.

  4. Na lista de modelos, selecione Biblioteca de Classes.

  5. Na caixa de texto Nome, digite um nome para o plug-in de gravação.

    A biblioteca de classes é adicionada ao Gerenciador de Soluções e a nova classe é aberta no Editor de Códigos.

  6. No Gerenciador de Soluções, na nova pasta do projeto de biblioteca de classes, clique com o botão direito do mouse na pasta Referências e selecione Adicionar Referência.

    Dica

    Um exemplo de uma nova pasta do projeto de biblioteca de classes é RecorderPlugins.

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

  7. Selecione a guia .NET.

  8. Role para baixo e selecione Microsoft.VisualStudio.QualityTools.WebTestFramework e escolha OK.

    O Microsoft.VisualStudio.QualityTools.WebTestFramework é adicionado à pasta Referências do Gerenciador de Soluções.

  9. Escreva o código para o plug-in de gravação. Primeiro, crie uma nova classe pública que derive de WebTestRecorderPlugin.

  10. Substitua o método PostWebTestRecording.

    public class Class1 : WebTestRecorderPlugin
        {
            public override void PostWebTestRecording(object sender, PostWebTestRecordingEventArgs e)
            {
                base.PostWebTestRecording(sender, e);
            }
        }
    

    Os argumentos de evento fornecerão dois objetos para trabalhar: o resultado gravado e o teste de desempenho na Web gravado. Isso permitirá que você itere pelo resultados procurando determinados valores e pule para a mesma solicitação no teste de desempenho na Web para fazer modificações. Você também pode modificar apenas o teste de desempenho na Web se quiser adicionar um parâmetro de contexto ou parametrizar partes da URL.

    Dica

    Se você modificar o teste de desempenho na Web, também será preciso definir a propriedade RecordedWebTestModified como verdadeira: e.RecordedWebTestModified = true;

  11. Adicione mais código de acordo com o que você deseja que o plug-in de gravação execute depois da gravação da Web. Por exemplo, você pode adicionar código para manipular a correlação personalizada, conforme mostrado no exemplo abaixo. Também é possível criar um plug-in de gravação para tarefas como converter comentários em transações ou adicionar regras de validação ao teste de desempenho na Web.

  12. No menu Compilação, escolha Compilar <nome do projeto de biblioteca de classes>.

  13. Em seguida, implante o plug-in de gravação para que ele seja registrado com o Visual Studio Ultimate.

Implantar o plug-in de gravação

Depois de compilar o plug-in de gravação, será necessário colocar a DLL resultante em um dos dois locais:

  • %ProgramFiles%\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies\WebTestPlugins

  • %USERPROFILE%\My Documents\Visual Studio 2013\WebTestPlugins

Aviso

Depois de copiar o plug-in de gravação em um dos dois locais, você deverá reiniciar o Visual Studio Ultimate para que o plug-in de gravação seja registrado.

Executar o plug-in de gravação

Ao criar um novo teste de desempenho na Web, você verá a caixa de diálogo Habilitar WebTestRecordPlugins. A caixa de diálogo Habilitar WebTestRecordPlugins exibe todos os plug-ins disponíveis que podem ser executados.

Para executar o plug-in de gravação

  1. Crie um novo teste de desempenho na Web. Para obter mais informações, consulte Gravar e executar um teste de desempenho da web [redirecionado].

    A caixa de diálogo Habilitar WebTestRecordPlugins é exibida.

  2. Marque a caixa de seleção do plug-in de gravação e escolha OK.

    Depois que o teste de desempenho na Web concluir a gravação, o novo plug-in de gravação será executado.

    Aviso

    Você talvez receba um erro semelhante ao seguinte quando executar um teste de desempenho na Web ou um teste de carga usando seu plug-in:

    Request failed: Exception in <plug-in> event: Could not load file or assembly '<"Plug-in name".dll file>, Version=<n.n.n.n>, Culture=neutral, PublicKeyToken=null' or one of its dependencies.The system cannot find the file specified.

    Isso será causado se você fizer alterações no código de qualquer um de seus plug-ins e criar uma nova versão de DLL (Version=0.0.0.0), mas o plug-in ainda estiver referenciando a versão original do plug-in.Para corrigir esse problema, siga estas etapas:

    1. Em seu projeto de teste de carga e desempenho na Web, você verá um aviso em referências.Remova e adicione novamente a referência à DLL do plug-in.

    2. Remova o plug-in do teste ou do local apropriado e adicione-o de volta.

Exemplo

Este exemplo demonstra como criar um plug-in personalizado de gravação de teste de desempenho na Web para executar a correlação personalizada de parâmetro dinâmico.

Dica

Uma listagem completa do código de exemplo está localizada na parte final deste tópico.

Revisando o código de exemplo

Iterar pelo resultado para encontrar a primeira página com ReportSession

Esta parte do exemplo de código é iterada em cada objeto gravado e pesquisa o corpo da resposta em busca de ReportSession.

           foreach (WebTestResultUnit unit in e.RecordedWebTestResult.Children)
            {
                WebTestResultPage page = unit as WebTestResultPage; 
                if (page != null)
                {
                    if (!foundId)
                    {
                        int indexOfReportSession = page.RequestResult.Response.BodyString.IndexOf("ReportSession");
                        if (indexOfReportSession > -1)
                        {

Adicionar uma regra de extração

Agora que uma resposta foi encontrada, você precisa adicionar uma regra de extração. Esta parte do exemplo de código cria a regra de extração usando a classe ExtractionRuleReference e, em seguida, localiza a solicitação correta no teste de desempenho na Web à qual adicionar a regra de extração. Cada objeto de resultado tem uma nova propriedade DeclarativeWebTestItemId adicionada, que é a que está sendo usada no código para obtenção da solicitação correta no teste de desempenho na Web.

ExtractionRuleReference ruleReference = new ExtractionRuleReference();
           ruleReference.Type = typeof(ExtractText);
           ruleReference.ContextParameterName = "SessionId";
           ruleReference.Properties.Add(new PluginOrRuleProperty("EndsWith", "&ControlID="));
           ruleReference.Properties.Add(new PluginOrRuleProperty("HtmlDecode", "True"));
           ruleReference.Properties.Add(new PluginOrRuleProperty("IgnoreCase", "True"));
           ruleReference.Properties.Add(new PluginOrRuleProperty("Index", "0"));
           ruleReference.Properties.Add(new PluginOrRuleProperty("Required", "True"));
           ruleReference.Properties.Add(new PluginOrRuleProperty("StartsWith", "ReportSession="));
           ruleReference.Properties.Add(new PluginOrRuleProperty("UseRegularExpression", "False"));

           WebTestRequest requestInWebTest = e.RecordedWebTest.GetItem(page.DeclarativeWebTestItemId) as WebTestRequest;
           if (requestInWebTest != null)
           {
               requestInWebTest.ExtractionRuleReferences.Add(ruleReference);
               e.RecordedWebTestModified = true;
           }

Substituir parâmetros da cadeia de caracteres de consulta

Agora o código localiza os parâmetros da cadeia de caracteres de consulta que têm ReportSession como o nome e altera o valor para {{SessionId}}, conforme mostrado nesta parte do exemplo de código:

           WebTestRequest requestInWebTest = e.RecordedWebTest.GetItem(page.DeclarativeWebTestItemId) as WebTestRequest;
           if (requestInWebTest != null)
           {
               foreach (QueryStringParameter param in requestInWebTest.QueryStringParameters)
               {
                    if (param.Name.Equals("ReportSession"))
                    {
                        param.Value = "{{SessionId}}";
                    }
                }
            }
using System.ComponentModel;
using Microsoft.VisualStudio.TestTools.WebTesting;
using Microsoft.VisualStudio.TestTools.WebTesting.Rules;

namespace RecorderPlugin
{
    [DisplayName("Correlate ReportSession")]
    [Description("Adds extraction rule for Report Session and binds this to querystring parameters that use ReportSession")]
    public class CorrelateSessionId : WebTestRecorderPlugin
    {
        public override void PostWebTestRecording(object sender, PostWebTestRecordingEventArgs e)
        {
            //first find the session id
            bool foundId = false;
            foreach (WebTestResultUnit unit in e.RecordedWebTestResult.Children)
            {
                WebTestResultPage page = unit as WebTestResultPage;
                if (page != null)
                {
                    if (!foundId)
                    {
                        int indexOfReportSession = page.RequestResult.Response.BodyString.IndexOf("ReportSession");
                        if (indexOfReportSession > -1)
                        {
                            //add an extraction rule to this request
                            // Get the corresponding request in the Declarative Web performance test
                            ExtractionRuleReference ruleReference = new ExtractionRuleReference();

                            ruleReference.Type = typeof(ExtractText);
                            ruleReference.ContextParameterName = "SessionId";
                            ruleReference.Properties.Add(new PluginOrRuleProperty("EndsWith", "&ControlID="));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("HtmlDecode", "True"));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("IgnoreCase", "True"));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("Index", "0"));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("Required", "True"));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("StartsWith", "ReportSession="));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("UseRegularExpression", "False"));

                            WebTestRequest requestInWebTest = e.RecordedWebTest.GetItem(page.DeclarativeWebTestItemId) as WebTestRequest;
                            if (requestInWebTest != null)
                            {
                                requestInWebTest.ExtractionRuleReferences.Add(ruleReference);
                                e.RecordedWebTestModified = true;
                            }
                            foundId = true;

                        }
                    }
                    else
                    {
                        //now update query string parameters
                        WebTestRequest requestInWebTest = e.RecordedWebTest.GetItem(page.DeclarativeWebTestItemId) as WebTestRequest;
                        if (requestInWebTest != null)
                        {
                            foreach (QueryStringParameter param in requestInWebTest.QueryStringParameters)
                            {
                                if (param.Name.Equals("ReportSession"))
                                {
                                    param.Value = "{{SessionId}}";
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

Consulte também

Tarefas

[obsoleto] Como criar um teste de desempenho na Web codificado

Referência

WebTestRequestPlugin

PostWebTestRecording

ExtractionRuleReference

PostWebTestRecording

Outros recursos

Criar código personalizado e plug-ins para testes de carga

Como editar um teste de desempenho na Web existente usando o Editor de Testes de Desempenho na Web