Compartir a través de


Cómo: Crear una regla de extracción personalizada

Actualización: noviembre 2007

Puede crear sus propias reglas de extracción. Para ello, derive sus propias reglas de una clase de regla de extracción. Las reglas de extracción derivan de la clase base ExtractionRule.

Visual Studio Team System Test proporciona algunas reglas de extracción predefinidas. Para obtener más información, vea Reglas de extracción.

Nota:

También puede crear reglas de validación personalizadas. Para obtener más información, vea Reglas de validación.

Para crear una regla de extracción personalizada

  1. Abra un proyecto de prueba que contenga una prueba Web.

  2. (Opcional) Cree un proyecto de bibliotecas de clase independiente para almacenar su regla de extracción.

    Nota importante:

    Puede crear la clase en el mismo proyecto donde se encuentran las pruebas. Sin embargo, si desea reutilizar la regla, es mejor que cree un proyecto de bibliotecas de clase independiente donde almacenar la regla. Si crea un proyecto independiente, debe completar los pasos opcionales de este procedimiento.

  3. (Opcional) En el proyecto de bibliotecas de clase, agregue una referencia a Microsoft.VisualStudio.QualityTools.WebTestFramework dll.

  4. Cree una clase que se derive de la clase ExtractionRule. Implemente los miembros Extract y RuleName.

  5. (Opcional) Genere el nuevo proyecto de bibliotecas de clase.

  6. (Opcional) En el Proyecto de prueba, agregue una referencia al proyecto de bibliotecas de clase que contiene la regla de extracción personalizada.

  7. En el Proyecto de prueba, abra una prueba Web en el Editor de prueba Web.

  8. Para agregar la regla de extracción personalizada, haga clic con el botón secundario en una solicitud de prueba Web y seleccione Agregar regla de extracción.

    Aparecerá el cuadro de diálogo Agregar regla de extracción. Verá su regla de validación personalizada en la lista Seleccione una regla, junto con las reglas de validación predefinidas. Seleccione su regla de extracción personalizada y, a continuación, haga clic en Aceptar.

  9. Ejecute su prueba Web.

Ejemplo

El siguiente código muestra la implementación de una regla de extracción personalizada. Esta regla de extracción extrae el valor de un campo de entrada especificado. Utilice este ejemplo como punto de partida para sus propias reglas de extracción personalizadas.

using System;
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.WebTesting;
using System.Globalization;

namespace ClassLibrary2
{
    //-------------------------------------------------------------------------
    // This class creates a custom extraction rule named "Custom Extract Input"
    // The user of the rule specifies the name of an input field, and the
    // rule attempts to extract the value of that input field.
    //-------------------------------------------------------------------------
    public class CustomExtractInput : ExtractionRule
    {
        /// Specify a name for use in the user interface.
        /// The user sees this name in the Add Extraction dialog box.
        //---------------------------------------------------------------------
        public override string RuleName
        {
            get { return "Custom Extract Input"; }
        }

        /// Specify a description for use in the user interface.
        /// The user sees this description in the Add Extraction dialog box.
        //---------------------------------------------------------------------
        public override string RuleDescription
        {
            get { return "Extracts the value from a specified input field"; }
        }

        // The name of the desired input field
        private string NameValue;
        public string Name
        {
            get { return NameValue; }
            set { NameValue = value; }
        }

        // The Extract method.  The parameter e contains the Web test context.
        //---------------------------------------------------------------------
        public override void Extract(object sender, ExtractionEventArgs e)
        {
            if (e.Response.HtmlDocument != null)
            {
                foreach (HtmlTag tag in e.Response.HtmlDocument.GetFilteredHtmlTags(new string[] { "input" }))
                {
                    if (String.Equals(tag.GetAttributeValueAsString("name"), Name, StringComparison.InvariantCultureIgnoreCase))
                    {
                        string formFieldValue = tag.GetAttributeValueAsString("value");
                        if (formFieldValue == null)
                        {
                            formFieldValue = String.Empty;
                        }

                        // add the extracted value to the Web test context
                        e.WebTest.Context.Add(this.ContextParameterName, formFieldValue);
                        e.Success = true;
                        return;
                    }
                }
            }
            // If the extraction fails, set the error text that the user sees
            e.Success = false;
            e.Message = String.Format(CultureInfo.CurrentCulture, "Not Found: {0}", Name);
        }
    }
}
Imports System
Imports System.Collections.Generic
Imports Microsoft.VisualStudio.TestTools.WebTesting
Imports System.Globalization

Namespace ClassLibrary2

    '-------------------------------------------------------------------------
    ' This class creates a custom extraction rule named "Custom Extract Input"
    ' The user of the rule specifies the name of an input field, and the
    ' rule attempts to extract the value of that input field.
    '-------------------------------------------------------------------------
    Public Class CustomExtractInput
        Inherits ExtractionRule

        ' Specify a name for use in the user interface.
        ' The user sees this name in the Add Extraction dialog box.
        '---------------------------------------------------------------------
        Public Overrides ReadOnly Property RuleName() As String
            Get
                Return "Custom Extract Input"
            End Get
        End Property

        ' Specify a description for use in the user interface.
        ' The user sees this description in the Add Extraction dialog box.
        '---------------------------------------------------------------------
        Public Overrides ReadOnly Property RuleDescription() As String
            Get
                Return "Extracts the value from a specified input field"
            End Get
        End Property

        ' The name of the desired input field
        Private NameValue As String
        Public Property Name() As String
            Get
                Return NameValue
            End Get
            Set(ByVal value As String)
                NameValue = value
            End Set
        End Property

        ' The Extract method.  The parameter e contains the Web test context.
        '---------------------------------------------------------------------
        Public Overrides Sub Extract(ByVal sender As Object, ByVal e As ExtractionEventArgs)

            If Not e.Response.HtmlDocument Is Nothing Then

                For Each tag As HtmlTag In e.Response.HtmlDocument.GetFilteredHtmlTags(New String() {"input"})

                    If String.Equals(tag.GetAttributeValueAsString("name"), Name, StringComparison.InvariantCultureIgnoreCase) Then

                        Dim formFieldValue As String = tag.GetAttributeValueAsString("value")
                        If formFieldValue Is Nothing Then

                            formFieldValue = String.Empty
                        End If

                        ' add the extracted value to the Web test context
                        e.WebTest.Context.Add(Me.ContextParameterName, formFieldValue)
                        e.Success = True
                        Return
                    End If
                Next
            End If
            ' If the extraction fails, set the error text that the user sees
            e.Success = False
            e.Message = String.Format(CultureInfo.CurrentCulture, "Not Found: {0}", Name)
        End Sub
    End Class
end namespace

El método Extract contiene la funcionalidad básica de una regla de extracción. El método Extract del ejemplo anterior acepta ExtractionEventArgs, que proporciona la respuesta generada por la solicitud que cubre esta regla de extracción. La respuesta contiene un HtmlDocument que contiene todas las etiquetas de la respuesta. Las etiquetas de entrada se filtran de HtmlDocument. Se examina cada etiqueta de entrada para ver si tiene un atributo llamado nombre cuyo valor equivale al valor de la propiedad Nombre proporcionado por el usuario. Si se encuentra una etiqueta con este atributo, se intenta extraer un valor incluido en el atributo valor, si existe un atributo de valor. En ese caso, se extraen el nombre y el valor de la etiqueta y se agregan al contexto de la prueba Web. La regla de extracción pasa.

Vea también

Tareas

Cómo: Agregar una regla de extracción a una prueba Web

Tutorial: Agregar reglas de validación y extracción a una prueba Web

Cómo: Crear una regla de validación personalizada

Referencia

ExtractionRule

Microsoft.VisualStudio.TestTools.WebTesting.Rules

ExtractAttributeValue

ExtractFormField

ExtractHttpHeader

ExtractRegularExpression

ExtractText

ExtractHiddenFields