Compartilhar via


Como: Criar um gravador de plug-in

Este tópico se aplica a:

Visual Studio Ultimate

Visual Studio Premium

Visual Studio Professional 

Visual StudioExpress

O tópico é aplicável O tópico não é aplicável O tópico não é aplicável O tópico não é aplicável

O WebTestRecorderPlugin permite que você modificar um Test de desempenho da Web gravado. A modificação ocorre após clicar em Parar o desempenho de Web testar barra de ferramentas do gravador, mas antes do teste que estão sendo salvos e apresentados no Editor de teste de desempenho de Web.

O principal problema em um gravador de plug-in ajuda a resolver está realizando o seu próprio correlação personalizada em parâmetros dinâmicos. Com a funcionalidade interna de correlação, testes de desempenho de Web detectarem os parâmetros dinâmicos na gravação da Web após a conclusão, ou quando você usar o Promover parâmetros dinâmicos para os parâmetros de teste da Web na barra de ferramentas do Editor de teste de desempenho de 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 interna na detecção de funcionalidade não sempre localizar todos os parâmetros dinâmicos. Por exemplo, ele não localizar uma identificação de sessão normalmente obtém seu valor alterado entre 5 a 30 minutos. Portanto, é necessário que 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.

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

É de algumas outras maneiras que um gravador de plug-in pode ser usado para adição de extração e regras de validação, adicionando parâmetros de contexto ou comentários sobre a conversão para transações em um desempenho de Web de teste.

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

Criando um gravador de plug-in

Para criar um gravador de plug-in

  1. Abra uma solução que contém o projeto de teste com o teste de desempenho de Web para o qual você deseja criar um gravador de plug-in.

  2. No Solution Explorer, clique com o botão direito a solução, selecione Adde em seguida, clique em Novo projeto.

    A caixa de diálogo Add New Project é exibida.

  3. Em Modelos instalados, selecione Visual C#.

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

  5. No nome caixa de texto, digite um nome para o gravador de plug-in.

    A biblioteca de classes é adicionada ao Solution Explorer e a nova classe é aberta no Editor de código.

  6. No Solution Explorer, em que a nova pasta de projeto de biblioteca classe, clique com o botão direito do referências pasta e selecione Adicionar referência de.

    Dica

    Um exemplo de uma nova pasta de projeto de biblioteca de classe é RecorderPlugins.

    A caixa de diálogo Add Reference é exibida.

  7. Selecione o .NET guia.

  8. Rolar para baixo e selecione Microsoft.VisualStudio.QualityTools.WebTestFramework e, em seguida, clique em OK.

    O Microsoft.VisualStudio.QualityTools.WebTestFramework é adicionado a referências pasta no Solution Explorer.

  9. Escreva o código para o gravador de plug-in. Primeiro, crie uma nova classe pública que deriva do 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 do evento fornecem dois objetos para trabalhar com: o resultado gravado e o teste de desempenho da Web gravado. Isso permitirá que você percorrer o resultado procurando para certos valores e, em seguida, o salto para a mesma solicitação no teste de desempenho da Web para fazer modificações. Também acabou, você pode modificar o teste de desempenho da Web se você quisesse adicionar um parâmetro de contexto ou parametrizar partes do URL.

    ObservaçãoObservação

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

  11. Adicione o código mais de acordo com o que você deseja o gravador de plug-in para executar após a gravação da Web. Por exemplo, você pode adicionar código para manipular a correlação personalizada conforme mostrado no exemplo abaixo. Você também pode criar um gravador de plug-in para coisas como comentários de conversão às transações ou adicionando regras de validação para o desempenho do Web test.

  12. Sobre o Build menu, clique em Build < nome de projeto de biblioteca de classe >.

  13. Em seguida, você deve implantar o gravador de plug-in para que ele registre com Visual Studio 2010 Ultimate.

Implantar o gravador de plug-in

Após compilar o gravador de plug-in, você precisará colocar o arquivo. dll resultante em um dos dois locais:

  • %ProgramFiles%\Microsoft 10.0\Common7\IDE\PrivateAssemblies\WebTestPlugins de Visual Studio

  • %USERPROFILE%\Meus Documentos\Visual Studio 10\WebTestPlugins

Aviso

Após copiar o gravador de plug-in para um dos dois locais, você deve reiniciar Visual Studio 2010 Ultimate para o gravador de plug-in para ser registrado.

Executar o gravador de plug-in

Quando você cria um novo teste de desempenho de Web, você verá o WebTestRecordPlugins habilitar caixa de diálogo. O WebTestRecordPlugins habilitar caixa de diálogo exibe todos os plug-ins disponíveis que podem ser executados.

Para executar o gravador de plug-in

  1. Crie um novo teste de desempenho de Web. Para obter mais informações, consulte Como: Criar um novo teste de desempenho de Web usando o gravador de teste de desempenho de Web.

    O WebTestRecordPlugins habilitar exibe a caixa de diálogo.

  2. Marque a caixa de seleção para o gravador de plug-in e clique em OK.

    Após o teste de desempenho de Web gravação, o gravador de novo plug-in será executado.

    Aviso

    Você pode receber um erro semelhante à seguinte quando você executa um teste de desempenho da Web ou um teste de carga que usa 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 no código de seus plug-ins e cria uma nova versão da DLL (Version=0.0.0.0), mas o plug-in ainda faz referência a versão original plug-in. Para corrigir esse problema, siga estas etapas:

    1. Seu projeto de teste, você verá um aviso de referências. Remover e adicionar novamente a referência à sua DLL de plug-in.

    2. Remover o plug-in de seu teste ou o local apropriado e, em seguida, adicione-o novamente.

Exemplo

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

ObservaçãoObservação

Uma listagem completa dos códigos de exemplo está localizada na parte inferior deste tópico.

Revisar o código de exemplo

Percorrer o resultado para encontrar a primeira página com ReportSession

Esta parte do código de exemplo itera através de cada objeto gravado e procura o corpo da resposta 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 encontrou uma resposta, você precisará adicionar uma regra de extração. Esta parte do código de exemplo que cria a regra de extração usando o ExtractionRuleReference de classe e localiza a solicitação correta no teste de desempenho da Web para adicionar a regra de extração para. Cada objeto de resultado tem uma nova propriedade adicionada chamado DeclarativeWebTestItemId que é o que está sendo usado no código para obter solicitações correta do 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 os parâmetros de seqüência de caracteres de consulta

Agora o código localiza todas as consulta os parâmetros de seqüência de caracteres que ReportSession como nome e altere o valor para {{Identificação_da_sessão}}, conforme 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}}";
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

Consulte também

Tarefas

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

Referência

WebTestRequestPlugin

PostWebTestRecording

ExtractionRuleReference

PostWebTestRecording

Outros recursos

Criar e usar o Custom Plug-ins para carga e testes de desempenho de Web