Partager via


Comment : créer une règle d'extraction personnalisée

Mise à jour : novembre 2007

Vous pouvez créer vos propres règles d'extraction. Pour cela, vous dérivez vos propres règles à partir d'une classe de règles d'extraction. Les règles d'extraction dérivent de la classe de base ExtractionRule.

Visual Studio Team System Test Edition fournit des règles d'extraction prédéfinies. Pour plus d'informations, consultez À propos des règles d'extraction.

Remarque :

Il est également possible de créer vos propres règles de validation personnalisées. Pour plus d'informations, consultez À propos des règles de validation.

Pour créer une règle d'extraction personnalisée

  1. Ouvrez un projet de test qui contient un test Web.

  2. (Facultatif) Créez un projet Bibliothèque de classes distinct dans lequel stocker votre règle d'extraction.

    Remarque importante :

    Vous pouvez créer la classe dans le même projet que celui dans lequel se trouvent vos tests. Toutefois, si vous souhaitez réutiliser la règle, il est préférable de créer un projet Bibliothèque de classes séparé dans lequel stocker votre règle. Si vous créez un projet séparé, vous devez effectuer les étapes facultatives de cette procédure.

  3. (Facultatif) Dans le projet Bibliothèque de classes, ajoutez une référence à Microsoft.VisualStudio.QualityTools.WebTestFramework dll.

  4. Créez une classe qui dérive de la classe ExtractionRule. Implémentez les membres Extract et RuleName.

  5. (Facultatif) Créez le nouveau projet Bibliothèque de classes.

  6. (Facultatif) Dans le projet de test, ajoutez une référence au projet Bibliothèque de classes qui contient la règle d'extraction personnalisée.

  7. Dans le projet de test, ouvrez un test Web dans l'Éditeur de test Web.

  8. Pour ajouter la règle d'extraction personnalisée, cliquez avec le bouton droit sur une demande de test Web et sélectionnez Ajouter une règle d'extraction.

    La boîte de dialogue Ajouter une règle d'extraction s'affiche. Votre règle de validation personnalisée s'affiche dans la liste Sélectionnez une règle, avec les règles de validation prédéfinies. Sélectionnez votre règle d'extraction personnalisée, puis cliquez sur OK.

  9. Exécutez votre test Web.

Exemple

Le code suivant illustre une implémentation d'une règle d'extraction personnalisée. Cette règle d'extraction extrait la valeur d'un champ d'entrée spécifié. Utilisez cet exemple comme point de départ pour vos propres règles d'extraction personnalisées.

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

La méthode Extract contient la fonctionnalité principale d'une règle d'extraction. La méthode Extract de l'exemple précédent prend un ExtractionEventArgs qui fournit la réponse générée par la demande couverte par cette règle d'extraction. La réponse contient un HtmlDocument qui contient toutes les balises dans la réponse. Les balises d'entrées sont éliminées du HtmlDocument par filtrage. Chaque balise d'entrée est examinée afin de détecter la présence d'un attribut appelé name dont la valeur égale la valeur de la propriété Name fournie par l'utilisateur. Si une balise avec cet attribut correspondant est trouvée, une tentative d'extraction d'une valeur contenue par l'attribut value (si une valeur d'attribut existe) est effectuée. Si une valeur d'attribut existe, le nom et la valeur de la balise sont extraits et ajoutés au contexte de test Web. La règle d'extraction est passée.

Voir aussi

Tâches

Comment : ajouter une règle d'extraction à un test Web

Procédure pas à pas : ajout de règles de validation et d'extraction à un test Web

Comment : créer une règle de validation personnalisée

Référence

ExtractionRule

Microsoft.VisualStudio.TestTools.WebTesting.Rules

ExtractAttributeValue

ExtractFormField

ExtractHttpHeader

ExtractRegularExpression

ExtractText

ExtractHiddenFields