Como: criar um gravador de plug-in
WebTestRecorderPlugin permite que você altere um teste de desempenho escrita da Web.A mudança ocorre depois que você escolher Parar na barra de ferramentas registrador de teste de desempenho da Web mas antes de teste que está sendo salvo e apresentado no editor de teste de desempenho da Web.
O problema primária uma resolução de encaixe de ajuda de registrador está executando a própria correlação personalizado em parâmetros dinâmicos.A funcionalidade interna de correlação, o teste de desempenho da Web detecte os parâmetros dinâmicos na Web que registra em cima de 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 Como: resolver problemas de reprodução de teste da Web desempenho causados por parâmetros dinâmicos.No entanto, a funcionalidade interna de detecção não encontrar sempre todos os parâmetros dinâmicos.Por exemplo, não encontrar uma identificação de sessão, que normalmente obtém seu valor alterado entre 5 a 30 minutos.Como consequência, você precisa executar manualmente o processo de correlação.Para obter mais informações, consulte Como: promover parâmetros dinâmicos aos parâmetros de teste de desempenho de Web.
WebTestRecorderPlugin permite que você escrever código para seu próprio plug-in personalizado.Este plug-in pode executar correlação ou alterar o teste de desempenho da Web de várias maneiras antes dele está sendo salvo e apresentado no editor de teste de desempenho da Web.Como consequência, se você determinar que uma variável dinâmico específico tem que ser correlacionado para muitas suas grava, você pode automatizar o processo.
Algumas outras maneiras que um plug-in de registrador pode ser usado são adicionando regras de extração e de validação, adicionando parâmetros de contexto, ou convertendo comentários nas transações em um teste de desempenho da Web.
Os seguintes procedimentos descrevem como criar o código de modo rudimentar para um plug-in de registrador, distribuir o plug-in e executam o plug-in.O exemplo de código depois dos procedimentos demonstra como usar o Visual C# para criar um plug-in personalizado de registrador de correlação de parâmetro dinâmico.
Requisitos
- Visual Studio Ultimate
Abra uma solução que contém o projeto da Web e de teste de carregamento com o teste de desempenho da Web que você deseja criar um plug-in de registrador.
No solution Explorer, clique com o botão direito do mouse na solução Adicionar, selecione, e escolha Novo Projeto.
A caixa de diálogo de Adicionar novo projeto é exibida.
Em Modelos Instalados, selecione Visual C#.
Na lista de modelos, Biblioteca de Classesselecione.
Na caixa de texto de Nome , digite um nome para o plug-in de registrador.
A biblioteca de classes é adicionada ao solution Explorer e a nova classe é aberta no editor de códigos.
No solution Explorer, na nova pasta de projeto de biblioteca de classes, clique com o botão direito do mouse na pasta de Referências e selecione Adicionar Referência.
Dica Um exemplo de uma nova pasta de projeto de biblioteca de classes é RecorderPlugins.
A caixa de diálogo Add Reference é exibida.
Selecione a guia do .NET .
Role para baixo e Microsoft.VisualStudio.QualityTools.WebTestFramework selecione e escolha OK.
Microsoft.VisualStudio.QualityTools.WebTestFramework é adicionado na pasta de Referências no solution Explorer.
Escreva o código para o plug-in de registrador.Primeiro, crie uma nova classe pública que deriva de WebTestRecorderPlugin.
Substitua o método PostWebTestRecording.
public class Class1 : WebTestRecorderPlugin { public override void PostWebTestRecording(object sender, PostWebTestRecordingEventArgs e) { base.PostWebTestRecording(sender, e); } }
Argumentos de evento d-lhe-ão dois objetos para trabalhar: o resultado escrita e o teste de desempenho escrita da Web.Isso permitirá que você faz iterações através do resultado que parece com alguns valores e ignorar à mesma solicitação no teste de desempenho da Web para fazer alterações.Você também pode alterar apenas o teste de desempenho da Web se você quiser adicionar um parâmetro de contexto ou para parametrizar partes da URL.
Observação Se você alterar o teste de desempenho da Web, você também precisará definir a propriedade de RecordedWebTestModified como true: e.RecordedWebTestModified = true;
Adicionar mais código de acordo com o que você deseja que o plug-in de registrador para executar após registrar Web ocorre.Por exemplo, você pode adicionar código para correlação personalizado de forma como mostrado no exemplo abaixo.Você também pode criar um plug-in de registrador para itens como converter comentários nas transações ou adicionando regras de validação ao teste de desempenho da Web.
No menu, escolha Compilar da compilação <class library project name>.
Em seguida, você deve implantar o plug-in de registrador para registrar com que Visual Studio Ultimate.
Após você criar o plug-in de registrador, você precisará colocar o DLL resultante em um dos dois locais:
%ProgramFiles% \ Microsoft Visual Studio 11,0 \ Common7 \ IDE \ \ WebTestPlugins PrivateAssemblies
%USERPROFILE% \ my documents \ Visual Studio 2012 \ WebTestPlugins
Cuidado |
---|
Após copiar o plug-in de registrador para um dos dois locais, você deve reiniciar Visual Studio Ultimate para que o plug-in de registrador está registrado. |
Quando você cria um novo teste de desempenho da Web, você verá a caixa de diálogo de Ativar WebTestRecordPlugins .A caixa de diálogo de Ativar WebTestRecordPlugins exibe todos os plug-ins disponíveis que podem ser executados.
Crie um novo teste de desempenho da Web.Para obter mais informações, consulte Como: criar um novo teste de desempenho da Web usando o gravador de teste de desempenho de Web.
Exibe a caixa de diálogo de Ativar WebTestRecordPlugins .
Selecione a caixa de seleção para o plug-in de registrador OK e escolha.
Depois que o teste de desempenho da Web conclua a gravação, o novo plug-in de registrador será executado.
Cuidado Você pode obter um erro semelhante ao seguinte quando você executa um teste de desempenho da Web ou o teste de carga que usam 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 é causado se você fizer alterações de código para alguns dos plug-ins e cria uma nova versão (Version=0.0.0.0)de DLL, mas o plug-in ainda está fazendo referência a versão do plug-in original.Para corrigir esse problema, siga estas etapas:
No projeto da Web e de teste de carga, você verá um aviso em referências.Remova e re-adicionar referência ao DLL da plataforma.
Remova o plug-in do seu teste ou local apropriado e adicioná-lo novamente em.
Este exemplo demonstra como criar um plug-in personalizado de registrador de teste de desempenho da Web para executar correlação personalizado de parâmetro dinâmico.
Observação |
---|
Uma listagem de código completo do exemplo está localizada na parte inferior deste tópico. |
Examinando o código de exemplo
Essa parte do código de exemplo efetua iterações através de cada objeto escrita e procura o corpo de resposta por 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)
{
Agora que uma resposta foi encontrada, você precisa adicionar uma regra de extração.Essa parte do código de exemplo cria a regra de extração usando a classe de ExtractionRuleReference e localiza a solicitação correta no teste de desempenho da Web adicionar a regra de extração a.Cada objeto de resultado tem um DeclarativeWebTestItemId chamado adicionado nova propriedade que é o que está sendo usado no código para obter a solicitação correta de 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;
}
Agora o código localiza os parâmetros da cadeia de caracteres de consulta que têm ReportSession como o nome e mude o valor SessionId {{}} como mostrado nesta parte do código de exemplo:
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}}";
}
}
}
}
}
}
}
}
}
Como: criar um teste de desempenho da Web codificado
Como: editar um teste de desempenho de Web existente usando o Editor de teste de desempenho de Web
Criar e usar o Custom Plug-ins para carga e testes de desempenho da Web