Compartir a través de


Cómo: Crear un complemento de grabación

WebTestRecorderPlugin permite modificar una prueba de rendimiento web grabada.La modificación se produce después de elegir Detener en la barra de herramientas de la grabadora de pruebas de rendimiento web, pero antes de que la prueba se guarde y se presente en el Editor de pruebas de rendimiento web.

El principal problema que un complemento de grabadora ayuda a resolver es la realización de su propia correlación personalizada de parámetros dinámicos.Con la funcionalidad de correlación integrada, las pruebas de rendimiento web detectan los parámetros dinámicos de la grabación web al finalizar o cuando se usa Promocionar parámetros dinámicos a parámetros de pruebas web en la barra de herramientas del Editor de prueba de rendimiento web.Para obtener más información, vea Cómo: Resolver problemas de reproducción de pruebas de rendimiento web causados por parámetros dinámicos.Sin embargo, la funcionalidad de detección integrada no encuentra siempre todos los parámetros dinámicos.Por ejemplo, no encuentra un id. de sesión, que normalmente obtiene su valor cambiado entre 5 y 30 minutos.Por tanto, tiene que realizar el proceso de correlación manualmente.Para obtener más información, vea Cómo: Promover los parámetros dinámicos a parámetros de prueba de rendimiento web.

WebTestRecorderPlugin le permite escribir código para su propio complemento personalizado.Este complemento puede realizar la correlación o modificar la prueba de rendimiento web de muchas maneras antes de que se guarde y presente en el Editor de prueba de rendimiento web.Por tanto, si determina que hay que correlacionar una variable dinámica concreta para muchas de sus grabaciones, puede automatizar el proceso.

Un complemento de grabadora también se puede usar para muchos otros fines, como agregar reglas de extracción y de validación, agregar parámetros de contexto o convertir comentarios en transacciones en una prueba de rendimiento web.

En los procedimientos siguientes se describe cómo crear el código rudimentario para un complemento de grabadora, implementar el complemento y ejecutarlo.En el código de ejemplo que sigue a los procedimientos se muestra cómo usar Visual C# con el fin de crear un complemento de grabadora para la correlación personalizada de parámetros dinámicos.

Requisitos

  • Visual Studio Ultimate

Crear un complemento de grabadora

Para crear un complemento de grabadora

  1. Abra una solución que contenga el proyecto de prueba de carga y de rendimiento web con la prueba de rendimiento web para la que desee crear un complemento de grabadora.

  2. En el Explorador de soluciones, haga clic con el botón secundario en la solución, seleccione Agregar y, a continuación, elija Nuevo proyecto.

    Aparecerá el cuadro de diálogo Agregar nuevo proyecto.

  3. En Plantillas instaladas, seleccione Visual C#.

  4. En la lista de plantillas, seleccione Biblioteca de clases.

  5. En el cuadro de texto Nombre, escriba un nombre para el complemento de grabadora.

    La biblioteca de clases se agregará al Explorador de soluciones y la nueva clase se abrirá en el editor de código.

  6. En el Explorador de soluciones, en la carpeta de proyecto de la nueva biblioteca de clases, haga clic con el botón secundario en la carpeta Referencias y seleccione Agregar referencia.

    SugerenciaSugerencia

    Un ejemplo de carpeta de proyecto de una nueva biblioteca de clases es RecorderPlugins.

    Aparecerá el cuadro de diálogo Agregar referencia.

  7. Seleccione la pestaña .NET.

  8. Desplácese hacia abajo y seleccione Microsoft.VisualStudio.QualityTools.WebTestFramework y, a continuación, elija Aceptar.

    Microsoft.VisualStudio.QualityTools.WebTestFramework se agregará a la carpeta Referencias en el Explorador de soluciones.

  9. Escriba el código del complemento de grabadora.En primer lugar, cree una clase pública derivada de WebTestRecorderPlugin.

  10. Invalide el método PostWebTestRecording.

    public class Class1 : WebTestRecorderPlugin
        {
            public override void PostWebTestRecording(object sender, PostWebTestRecordingEventArgs e)
            {
                base.PostWebTestRecording(sender, e);
            }
        }
    

    Los argumentos de evento le darán dos objetos con los que trabajar: el resultado grabado y la prueba de rendimiento web grabada.Esto le permitirá recorrer en iteración el resultado en busca de ciertos valores y, a continuación, ir a la misma solicitud en la prueba de rendimiento web para realizar modificaciones.También puede modificar simplemente la prueba de rendimiento web si desea agregar un parámetro de contexto o parametrizar partes de la dirección URL.

    [!NOTA]

    Si modifica la prueba de rendimiento web, también necesitará establecer la propiedad RecordedWebTestModified en true: e.RecordedWebTestModified = true;

  11. Agregue más código según lo que desee que el complemento de grabadora ejecute después de que se produzca la grabación web.Por ejemplo, puede agregar código para administrar la correlación personalizada como se muestra en el ejemplo siguiente.También puede crear un complemento de grabadora para tareas como convertir comentarios en transacciones o agregar reglas de validación a la prueba de rendimiento web.

  12. En el menú Compilar, seleccione Compilar <nombre de proyecto de la biblioteca de clases>.

  13. Después, debe implementar el complemento de grabadora para que se registre con Visual Studio Ultimate.

Ff400224.collapse_all(es-es,VS.110).gifImplementar el complemento de grabadora

Después de compilar el complemento de la grabadora, necesitará colocar el archivo DLL resultante en una de las dos ubicaciones:

  • %ProgramFiles%\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies\WebTestPlugins

  • %USERPROFILE%\Mis documentos\Visual Studio 2012\WebTestPlugins

Nota de precauciónPrecaución

Después de copiar el complemento de grabadora a una de las dos ubicaciones, debe reiniciar Visual Studio Ultimate para que el complemento de grabadora se registre.

Ff400224.collapse_all(es-es,VS.110).gifEjecutar el complemento de grabadora

Al crear una nueva prueba de rendimiento web, verá el cuadro de diálogo Habilitar WebTestRecordPlugins.El cuadro de diálogo Habilitar WebTestRecordPlugins muestra todos los complementos disponibles que se pueden ejecutar.

Para ejecutar el complemento de grabadora

  1. Cree una nueva prueba de rendimiento web.Para obtener más información, vea Cómo: Crear nuevas pruebas de rendimiento web con la grabadora de pruebas de rendimiento web.

    Aparecerá el cuadro de diálogo Habilitar WebTestRecordPlugins.

  2. Active la casilla correspondiente al complemento de grabadora y seleccione Aceptar.

    Una vez que la prueba de rendimiento web complete la grabación, se ejecutará el nuevo complemento de grabadora.

    Nota de precauciónPrecaución

    Puede obtener un error similar al siguiente al ejecutar una prueba de rendimiento web o una prueba de carga que use su complemento:

    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.

    Esto ocurre si realiza cambios en el código de cualquier complemento y crea una nueva versión de DLL (Version=0.0.0.0), pero el complemento sigue haciendo referencia a la versión original del complemento.Para corregir este problema, siga estos pasos:

    1. En el proyecto de prueba de carga y rendimiento web, aparecerá una advertencia en referencias.Quite y vuelva a agregar la referencia al archivo DLL del complemento.

    2. Quite el complemento de la prueba o de la ubicación apropiada y, a continuación, agréguelo de nuevo.

Ejemplo

En este ejemplo se muestra cómo crear un complemento de grabadora personalizado de prueba de rendimiento web para realizar una correlación personalizada de parámetros dinámicos.

[!NOTA]

Al final de este tema se muestra una lista completa del código de ejemplo.

Examinar el código de ejemplo

Recorrer en iteración el resultado para encontrar la primera página con ReportSession

En esta parte del ejemplo de código se recorre en iteración cada objeto grabado y se busca el cuerpo de la respuesta 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)
                        {

Agregar una regla de extracción

Ahora que se ha encontrado una respuesta, necesita agregar una regla de extracción.En esta parte del ejemplo de código se crea la regla de extracción mediante la clase ExtractionRuleReference y, a continuación, se busca la solicitud correcta de la prueba de rendimiento web a la que se va a agregar la regla de extracción.A cada objeto de resultado se le ha agregado una nueva propiedad denominada DeclarativeWebTestItemId que se usa en el código para obtener la solicitud correcta de la prueba de rendimiento 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;
           }

Reemplazar parámetros de la cadena de consulta

Ahora el código busca todos los parámetros de cadena de consulta que tienen ReportSession como nombre y cambia el valor a {{SessionId}} como se muestra en esta parte del ejemplo de 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}}";
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

Vea también

Tareas

Cómo: Crear una prueba de rendimiento web codificada

Cómo: Modificar las pruebas de rendimiento web con el Editor de prueba de rendimiento web

Referencia

WebTestRequestPlugin

PostWebTestRecording

ExtractionRuleReference

PostWebTestRecording

Otros recursos

Crear y usar complementos personalizados para las pruebas de carga y de rendimiento web