Como criar um plug-in de gravador
Publicado: abril de 2016
O WebTestRecorderPlugin permite que você altere um teste de desempenho gravado da Web. A modificação ocorre depois que você escolhe Parar na barra de ferramentas do registrador de teste de desempenho da Web, mas antes de o teste ser salvo e apresentado no editor de teste de desempenho da 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 interna de correlação, o teste de desempenho da Web detecta os parâmetros dinâmicos na Web registrando na conclusão, ou quando você usar Promover parâmetros dinâmicos a parâmetros de teste na Web na barra de ferramentas do editor de teste de desempenho da 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 interna de detecção 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 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.
Algumas outras maneiras pelas quais um plug-in de registrador pode ser usado são: 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 registrador, 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 personalizado do gravador de correlação de parâmetros dinâmicos.
Requisitos
- O Visual Studio Enterprise
Criando um plug-in de gravação
Para criar um plug-in de gravação
Abra uma solução que contém o projeto de teste de carga e o desempenho da Web com o teste de desempenho da Web para o qual você deseja criar um plug-in de registrador.
No Gerenciador de Soluções, clique com o botão direito na solução, clique em Adicionar e, em seguida, clique em Novo Projeto.
A caixa de diálogo Adicionar Novo Projeto é exibida.
Em Modelos Instalados, clique em Visual C#.
Na lista de modelos de projeto, selecione Biblioteca de Classes.
Na caixa de texto Name, digite um nome para o plug-in do gravador.
A biblioteca de classes é adicionada ao Gerenciador de Soluções e a nova classe é aberta no editor de códigos.
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.
Selecione a guia .NET.
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.
Escreva o código para o plug-in de gravação. Primeiro, crie uma nova classe pública que derive de WebTestRecorderPlugin.
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 lhe darão dois objetos para trabalhar: o resultado gravado e o teste de desempenho da 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 alterar apenas o teste de desempenho da Web se quiser adicionar um parâmetro de contexto ou parametrizar partes da URL.
Dica
Se você modificar o teste de desempenho da Web, também precisará definir a propriedade RecordedWebTestModified como verdadeira: e.RecordedWebTestModified = true;
Adiciona mais código de acordo com o que você deseja que o plug-in do registrador execute após a gravação de Web ocorrer. Por exemplo, você pode adicionar código para manipular a correlação personalizada, conforme mostrado no exemplo abaixo. Você também pode criar um plug-in de registro para itens, como converter comentários em transações ou adicionar regras de validação ao teste de desempenho da Web.
No menu Compilação, escolha Compilar <nome do projeto de biblioteca de classes>.
Em seguida, você deve implantar o gravador de plug-in para que ele seja registrado com o Visual Studio.
Implantar o plug-in de gravador
Após você criar o plug-in de registrador, será necessário colocar a DLL resultante em um dos dois locais:
%ProgramFiles%\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies\WebTestPlugins
%USERPROFILE%\My Documentos\Visual Studio <versão> \WebTestPlugins
Aviso
Depois de copiar o plug-in de gravação para um dos dois locais, você deve reiniciar o Visual Studio para o gravador de plug-in a ser registrado.
Executar o plug-in de gravação
Quando você cria um novo teste de desempenho da Web, você verá a caixa de diálogo Ativar WebTestRecordPlugins . A caixa de diálogo Ativar WebTestRecordPlugins exibe todos os plug-ins disponíveis que podem ser executados.
Para executar o plug-in de registrador
Crie um novo teste de desempenho na Web. Para obter mais informações, consulte Record and run a web performance test.
A caixa de diálogo Ativar WebTestRecordPlugins é exibida.
Marque a caixa de seleção para o plug-in de registrador e escolha OK.
Após o teste de desempenho na Web concluir a gravação, o novo plug-in do registrador será executado.
Aviso
Você pode obter um erro semelhante ao seguinte quando você executa um teste de desempenho da Web ou o teste de carregamento que usa o 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 de código em 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 fazendo referência à versão do plug-in original.Para corrigir esse problema, siga estas etapas:
-
Em seu projeto de desempenho na Web e de teste de carga, você verá um aviso em referências.Remova e adicione novamente a referência à DLL do plug-in.
-
Remova o plug-in do seu teste ou do local apropriado e adicione-o de volta.
-
Exemplo
Este exemplo demonstra como criar um plug-in personalizado de registrador 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 inferior 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 itera por meio de cada objeto gravado e pesquisa o corpo da resposta para 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 da 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 mudam o valor para {{SessionId}} como mostrado nesta parte do 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
WebTestRequestPlugin
PostWebTestRecording
ExtractionRuleReference
PostWebTestRecording
Criar código personalizado e plug-ins para testes de carga
[obsoleto] Como criar um teste de desempenho na Web codificado
como: editar um teste de desempenho na Web existente