Cómo: Crear un complemento de grabación
Este tema se aplica a:
Visual Studio Ultimate |
Visual Studio Premium |
Visual Studio Professional |
Visual Studio Express |
---|---|---|---|
WebTestRecorderPlugin permite modificar una prueba de rendimiento web grabada. La modificación se produce después de hacer clic en Detener en la barra de herramientas de la grabadora de prueba de rendimiento web, pero antes de que la prueba se guarde y presente en el Editor de prueba 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.
Crear un complemento de grabadora
Para crear un complemento de grabadora
Abra una solución que contenga el proyecto de prueba con la prueba de rendimiento web para la que desee crear un complemento de grabadora.
En el Explorador de soluciones, haga clic con el botón secundario en la solución, seleccione Agregar y, a continuación, haga clic en Nuevo proyecto.
Aparecerá el cuadro de diálogo Agregar nuevo proyecto.
En Plantillas instaladas, seleccione Visual C#.
En la lista de plantillas, seleccione Biblioteca de clases.
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.
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.
Sugerencia Un ejemplo de carpeta de proyecto de una nueva biblioteca de clases es RecorderPlugins.
Aparecerá el cuadro de diálogo Agregar referencia.
Seleccione la pestaña .NET.
Desplácese hacia abajo y seleccione Microsoft.VisualStudio.QualityTools.WebTestFramework y, a continuación, haga clic en Aceptar.
Microsoft.VisualStudio.QualityTools.WebTestFramework se agregará a la carpeta Referencias en el Explorador de soluciones.
Escriba el código del complemento de grabadora. En primer lugar, cree una clase pública derivada de WebTestRecorderPlugin.
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;
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.
En el menú Generar, haga clic en Generar <nombre de proyecto de la biblioteca de clases>.
Después, debe implementar el complemento de grabadora para que se registre con Visual Studio 2010 Ultimate.
Implementar el complemento de grabadora
Después de compilar el complemento de grabadora, necesitará colocar el archivo .dll resultante en una de dos ubicaciones:
%ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\WebTestPlugins
%USERPROFILE%\Mis documentos\Visual Studio 10\WebTestPlugins
Precaución |
---|
Después de copiar el complemento de grabadora a una de las dos ubicaciones, debe reiniciar Visual Studio 2010 Ultimate para que el complemento de grabadora se registre. |
Ejecutar 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
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.
Active la casilla correspondiente al complemento de grabadora y haga clic en Aceptar.
Una vez que la prueba de rendimiento web complete la grabación, se ejecutará el nuevo complemento de grabadora.
Precaució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:
En el proyecto de prueba verá una advertencia en las referencias. Quite y vuelva a agregar la referencia al archivo DLL del complemento.
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
Otros recursos
Crear y usar complementos personalizados para las pruebas de carga y de rendimiento web