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.
Crie um novo projeto ASP.NET chamado DynamicParamaterSample.
Adicionar um formulário de Web chamado Querystring.aspx.
No modo design, arraste um HiddenField para a página e em seguida altere o valor da propriedade (ID) para HiddenFieldSessionID.
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>
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; } }
Adicionar um segundo formulário chamado Web ASPQuery.aspx.
No modo design, arraste um Rótulo para a página e altere o valor de sua propriedade (ID) para IndexLabel.
Arraste um hiperlink para a página e altere o valor da propriedade Texto para Voltar.
Escolha (…) para a propriedade NavigationURL.
Selecione Querystring.aspx.
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"; }
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.
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"; }
Salvar o projeto.
No Gerenciador de Soluções, defina Querystring.aspx como a página inicial.
Pressione CTRL+F5 para executar o aplicativo Web no navegador. Copie a URL. Você precisará disso quando registrar seu teste.
Tente ambos os links. Todos eles devem exibir a mensagem “Sucesso. Parâmetro querystring dinâmico encontrado."
Criar um teste de desempenho na Web
Adicione um projeto de teste de carregamento e de desempenho na Web à sua solução.
Renomeie WebTest1.webtest para DynamicParameterSampleApp.webtest.
Grave o teste.
Copie e cole a URL do site que você está testando no navegador.
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.
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.
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.
A regra de extração é adicionada à primeira solicitação de Querystring.aspx.
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.
Salve o teste.
Executar o teste para isolar o parâmetro dinâmico não detectado
Executar o teste.
A quarta solicitação para a página JScriptQuery.aspx falha. Vá para o teste de web.
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.
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.
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.
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.
Use a localização rápida em HiddenFieldSessionID, limpando a pesquisa anterior da caixa de seleção e selecionando a solicitação atual.
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.
Como é necessário corrigir o parâmetro dinâmico na escrita original, escolha o resultado gravado na barra de ferramentas.
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.
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.
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.
Escolha localizar próximo. A primeira correspondência é aquela que nós precisamos alterar, que é o parâmetro para CustomQueryString na página JScriptQuery.
Escolha substituir.
O parâmetro QueryString na solicitação JScriptQuery.aspx é atualizado usando o novo parâmetro de contexto: CustomQueryString=jScriptQueryString___{{Param0}}.
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.
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:
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.
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.