Partilhar via


Corrigir parâmetros dinâmicos não detectáveis em um teste de desempenho para Web

 

Publicado: abril de 2016

Alguns sites usam parâmetros dinâmicos para processar algumas de suas solicitações da Web. Um parâmetro dinâmico é um parâmetro cujo valor é gerado novamente, sempre que um usuário executa o aplicativo. Um exemplo de um parâmetro dinâmico é uma ID de sessão. A ID de sessão normalmente muda a cada 5 a 30 minutos. O registrador de teste de desempenho da Web e o mecanismo da reprodução tratam automaticamente aos tipos mais comuns de parâmetros dinâmicos:

  • Valores de parâmetro dinâmicos que são definidos em um valor de cookie. O mecanismo de teste de desempenho da Web automaticamente trata esses durante a reprodução.

  • Valores de parâmetro dinâmicos que são definidos nos campos ocultos em páginas HTML, como o estado de exibição do ASP.NET. Esses são tratados automaticamente pelo registrador, que adiciona regras ocultas de extração de campo ao teste.

  • Valores de parâmetro dinâmicos que são definidos como cadeias de caracteres de consulta ou parâmetros de postagem de formulário Eles são tratados pela detecção de parâmetro dinâmico depois que você registra um teste de desempenho na Web.

Alguns tipos de parâmetros dinâmicos não são detectados. Um parâmetro dinâmico não detectado irá fazer com que seu teste de desempenho na Web falhe porque o valor dinâmico provavelmente será diferente sempre que o teste for executado. Para manipular corretamente esses parâmetros, você pode adicionar regras de extração aos parâmetros dinâmicos em seu teste de desempenho da Web manualmente.

Criar e executar um aplicativo Web com parâmetros dinâmicos

Para demonstrar um parâmetro dinâmico perceptível e um não perceptível, nós criaremos um aplicativo web ASP.NET simples que tenha três formulários da Web com alguns controles e alguns códigos personalizados. Nós saberemos como isolar os parâmetros dinâmicos e como tratá-los.

  1. Crie um novo projeto ASP.NET chamado DynamicParamaterSample.

    Create an empty ASP.NET web application project

  2. Adicionar um formulário de Web chamado Querystring.aspx.

  3. No modo design, arraste um HiddenField para a página e em seguida altere o valor da propriedade (ID) para HiddenFieldSessionID.

    Add a HiddenField

  4. Altere para a exibição de origem para a página Querystring e adicione o seguinte código ASP.NET e JavaScript realçado usado para gerar os parâmetros dinâmicos de identificação de sessão fictícios:

    <head runat="server">
    <title>JavaScript dynamic property correlation sample</title>
    <script type="text/javascript" language="javascript">
        <!--
            function jScriptQueryString() 
            {
                var Hidden = document.getElementById("HiddenFieldSessionID");
                var sessionId = Hidden.value;
                window.location = 'JScriptQuery.aspx?CustomQueryString=jScriptQueryString___' + sessionId; 
            }
        //-->
    </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
             <a name="QuerystringHyperlink" href="ASPQuery.aspx?CustomQueryString=ASPQueryString___<%= Session.SessionID %>">Dynamic querystring generated by ASP.net</a>
             <br/>
             <br/>
             <a href="javascript:jScriptQueryString()">Dynamic querystring generated by javascript </a>
        </div>
        <asp:HiddenField ID="HiddenFieldSessionID" runat="server" />
        </form>
    </body>
    </html>
    
  5. Abra o arquivo Querystring.aspx.c e adicione o seguinte código realçado ao método Page_Load:

    public partial class Querystring : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Session.Add("Key", "Value");
            HiddenFieldSessionID.Value = Session.SessionID;
        }
    }
    
  6. Adicionar um segundo formulário chamado Web ASPQuery.aspx.

  7. No modo design, arraste um Rótulo para a página e altere o valor de sua propriedade (ID) para IndexLabel.

    Add a label to the web form

  8. Arraste um hiperlink para a página e altere o valor da propriedade Texto para Voltar.

    Add a hyperlink to the web form

  9. Escolha (…) para a propriedade NavigationURL.

    Edit the NavigateURL property

    Selecione Querystring.aspx.

    Choose the URL to be Querystring.aspx

  10. Abra o arquivo ASPQuery.aspx.c e adicione o seguinte código realçado ao método Page_Load:

    protected void Page_Load(object sender, EventArgs e)
            {
                int index;
                string qstring;
                string dateportion;
                string sessionidportion;
    
                qstring = Request.QueryString["CustomQueryString"];
                index = qstring.IndexOf("___");
                dateportion = qstring.Substring(0, index);
                index += 3;
                sessionidportion = qstring.Substring(index, qstring.Length - index);
    
                if (sessionidportion != Session.SessionID)
                {
                    Response.StatusCode = 401;
                    IndexLabel.Text = "Failure!  Invalid querystring parameter found.";
                }
                else
                {
                    IndexLabel.Text = "Success.  Dynamic querystring parameter was found.";
                }
                IndexLabel.Text += "<br>\r\n";
            }
    
  11. Adicionar um terceiro formulário de Web chamado JScriptQuery.aspx.

    Assim como nós fizemos para a segunda página, arraste um rótulo para o formulário, definindo sua propriedade (ID) como IndexLabel e arraste um hiperlink para o formulário, definindo sua propriedade text como Voltar e sua propriedade NavigationURL como Querystring.aspx.

    Add and configure the third web form

  12. Abra o arquivo JScriptQuery.aspx.c e adicione o seguinte código realçado ao método Page_Load:

    protected void Page_Load(object sender, EventArgs e)
            {
                int index;
                string qstring;
                string dateportion;
                string sessionidportion;
    
                qstring = Request.QueryString["CustomQueryString"];
                index = qstring.IndexOf("___");
                dateportion = qstring.Substring(0, index);
                index += 3;
                sessionidportion = qstring.Substring(index, qstring.Length - index);
    
                if (sessionidportion != Session.SessionID)
                {
                    Response.StatusCode = 401;
                    IndexLabel.Text = "Failure!  Invalid querystring parameter found.";
                }
                else
                {
                    IndexLabel.Text = "Success.  Dynamic querystring parameter was found.";
                }
                IndexLabel.Text += "<br>\r\n";
            }
    
  13. Salvar o projeto.

  14. No Gerenciador de Soluções, defina Querystring.aspx como a página inicial.

    Set the start page on Querystring.aspx

  15. Pressione CTRL+F5 para executar o aplicativo Web no navegador. Copie a URL. Você precisará disso quando registrar seu teste.

  16. Tente ambos os links. Todos eles devem exibir a mensagem “Sucesso. Parâmetro querystring dinâmico encontrado."

    Run the web app

    Success!

Criar um teste de desempenho na Web

  1. Adicione um projeto de teste de carregamento e de desempenho na Web à sua solução.

    Add a web perfromance and load test project

  2. Renomeie WebTest1.webtest para DynamicParameterSampleApp.webtest.

    Rename the web performance test

  3. Grave o teste.

    Record the web performance test

  4. Copie e cole a URL do site que você está testando no navegador.

    Paste the URL from the web site being tested

  5. Procurar no aplicativo web. Escolha o link ASP.NET, o link Voltar e no link javascript, seguido pelo link voltar.

    O gravador de testes na Web exibe as URLs de solicitação e resposta HTTP conforme você navega pelo aplicativo Web.

  6. Escolha o botão parar no gravador de teste.

    A caixa de diálogo para detectar parâmetros dinâmicos exibe uma barra de progresso que mostra o status de detecção de parâmetro nas respostas HTTP que foram recebidas.

  7. O parâmetro dinâmico para CustomQueryString na página ASPQuery é detectado automaticamente. Entretanto, o parâmetro dinâmico para CustomQueryString na página JScriptQuery não é detectado.

    Escolha OK para adicionar uma regra de extração a Querystring.aspx, associando-a à página ASPQuery.

    Promote the detected dynamic parameter

    A regra de extração é adicionada à primeira solicitação de Querystring.aspx.

    Extraction rule added to request

    Expanda a segunda solicitação na árvore de solicitação para ASPQuery.aspx e observe que o valor de CustomQueryString foi associado à regra de extração.

    CustomQueryString bound to extraction rule

  8. Salve o teste.

Executar o teste para isolar o parâmetro dinâmico não detectado

  1. Executar o teste.

    Run the web performance test

  2. A quarta solicitação para a página JScriptQuery.aspx falha. Vá para o teste de web.

    Dynamic parameter error in test results

    O nó de solicitação JScriptQuery.aspx é realçado no editor. Expanda o nó e observe que a parte “1v0yhyiyr0raa2w4j4pwf5zl” de CustomQueryString parece ser dinâmica.

    Suspected dynamic parameter in CustomQueryString

  3. Retorne ao Visualizador dos Resultados de Teste de Desempenho na Web e selecione a página JScriptQuery.aspx que falhou. Em seguida, escolha a guia de solicitação, verifique se a caixa de seleção de dados brutos de apresentação está desmarcada, role para baixo e escolha a localização rápida no CustomQueryString.

    Use quick find to isolate the dynamic paramter

  4. Nós sabemos ao examinar o editor de teste, que a solicitação JScriptQuery.aspx do CustomQueryString foi atribuída um valor de: jScriptQueryString___1v0yhyiyr0raa2w4j4pwf5zl e que a parte dinâmica suspeita é “1v0yhyiyr0raa2w4j4pwf5zl”. Na lista suspensa localizar, remova a parte suspeita da cadeia de caracteres de pesquisa. A cadeia de caracteres deve ser "CustomQueryString=jScriptQueryString___".

    Os parâmetros dinâmicos obtêm seus valores de uma das solicitações que precedem a solicitação com o erro. Portanto, marque a caixa de seleção de pesquisa anterior e escolha Localizar próximo até você vir a solicitação anterior para Querystring.aspx realçado no painel de solicitação. Isso deve ocorrer depois que você escolhe localizar nas próximas três vezes.

    Use quick find to isolate the dynamic parameter

    Conforme mostrado no guia de resposta, e no JavaScript implementado anteriormente mostrado abaixo, um valor de “jScriptQueryString_” é atribuído ao parâmetro CustomQueryString de cadeia de caracteres de consulta que também é concatenado com o valor retornado da variável sessionId.

                      function jScriptQueryString() 
    {
        var Hidden = document.getElementById("HiddenFieldSessionID");
        var sessionId = Hidden.value;
        window.location = 'JScriptQuery.aspx?CustomQueryString=jScriptQueryString___' + sessionId; 
    }
    

    Agora que nós sabemos onde o erro está ocorrendo, e o que nós precisamos para extrair o valor para o sessionId. No entanto, o valor de extração é somente texto, então precisamos isolar ainda mais o erro tentando localizar uma cadeia de caracteres onde o valor real de sessionId é exibido. Ao examinar o código, você pode ver que o sessionId é igual ao valor retornado por HiddenFieldSessionID.

  5. Use a localização rápida em HiddenFieldSessionID, limpando a pesquisa anterior da caixa de seleção e selecionando a solicitação atual.

    Use quick find on HiddenFieldSession

    Observe que o valor retornado não seja a mesma cadeia de caracteres que a da gravação original do teste de desempenho na Web. Para esta execução de teste, o valor retornado é "5w4v3yrse4wa4axrafykqksq" e, na gravação original, o valor é "1v0yhyiyr0raa2w4j4pwf5zl". Como o valor não coincide com o da gravação original, o erro é gerado.

  6. Como é necessário corrigir o parâmetro dinâmico na escrita original, escolha o resultado gravado na barra de ferramentas.

    Choose recorded result

  7. Nos resultados gravados, selecione a terceira solicitação, que é a mesma solicitação de Querystringrequest.aspx que você isolou nos resultados da execução do teste.

    Choose the same request in the recorded results

    Escolha o guia de resposta, role para baixo e escolha o valor do parâmetro dinâmico original de “1v0yhyiyr0raa2w4j4pwf5zl” que você isolou anteriormente e adicione uma regra de extração.

    Add an extraction rule for the dynamic parameter

    A nova regra de extração é adicionada à solicitação Querystring.aspx e recebe o valor de “Param0”.

    Se a caixa de diálogo nos informar que correspondências foram encontradas para o texto extraído ao qual o parâmetro será associado, escolha sim.

    Extraction rule created

  8. Escolha localizar próximo. A primeira correspondência é aquela que nós precisamos alterar, que é o parâmetro para CustomQueryString na página JScriptQuery.

    Find and replace the text for the parameter

  9. Escolha substituir.

    Replace the text with the parameter

    O parâmetro QueryString na solicitação JScriptQuery.aspx é atualizado usando o novo parâmetro de contexto: CustomQueryString=jScriptQueryString___{{Param0}}.

    Parameter applied to querystring

  10. Feche a caixa de diálogo localizar e substituir. Observe a estrutura semelhante da árvore de solicitação entre o parâmetro dinâmico detectado e o parâmetro dinâmico não detectado que você correlacionou.

    Detected and correlated dynamic parameters

  11. Executar o teste. Agora é executado sem falhas.

Perguntas e Respostas

P: Posso executar novamente a detecção de parâmetro dinâmico se meu aplicativo Web for modificado?

A: Sim, use o seguinte procedimento:

  1. Na barra de ferramentas, escolha o botão Promover parâmetros dinâmicos a parâmetros de teste na Web.

    Após o processo de detecção ser concluído, se qualquer parâmetro dinâmico for detectado, a caixa de diálogo Promover parâmetros dinâmicos a parâmetros de teste na Web é exibida.

    Os parâmetros dinâmicos são listados na coluna Parâmetros dinâmicos. As solicitações das quais o parâmetro dinâmico será extraído e às quais será associado são listadas nas colunas da Extrair Parâmetro da Resposta e Vincular à Solicitação.

    Se você escolher um parâmetro dinâmico na caixa de diálogo Promover parâmetros dinâmicos a parâmetros de teste na Web, duas solicitações estarão realçadas na árvore de solicitação do Editor de teste de desempenho na Web. A primeira solicitação será aquela para a qual a regra de extração será adicionada. A segunda solicitação é onde o valor extraído será associado.

  2. Marque ou desmarque a caixa de seleção ao lado dos parâmetros dinâmicos que você gostaria de correlacionar automaticamente. Por padrão, todos os parâmetros dinâmicos são verificados.

P: Eu preciso de configurar o Visual Studio para detectar parâmetros dinâmicos?

R: a configuração padrão do Visual Studio é detectar parâmetros dinâmicos quando você grava um teste de desempenho na web. No entanto, se você tiver opções do Visual Studio configurado para não detectar parâmetros dinâmicos ou aplicativo da web que está sendo testado for modificado com parâmetros dinâmicos adicionais; Você ainda pode executar a detecção de parâmetro dinâmico do Editor de teste de desempenho na Web.