Поделиться через


Практическое руководство. Создание пользовательского правила извлечения

Обновлен: Ноябрь 2007

Можно создавать собственные правила извлечения. Для этого пользовательские правила необходимо наследовать от класса правил извлечения. Правила извлечения являются производными от базового класса ExtractionRule.

В Visual Studio Team System Test Edition предусмотрено несколько предварительно определенных правил извлечения. Дополнительные сведения см. в разделе Сведения о правилах извлечения.

ms243179.alert_note(ru-ru,VS.90).gifПримечание.

Можно также создавать собственные правила проверки. Дополнительные сведения см. в разделе О правилах проверки.

Создание пользовательского правила извлечения

  1. Откройте тестовый проект, содержащий веб-тест.

  2. (Необязательно) Создайте отдельный проект библиотеки классов, в котором будет храниться созданное правило извлечения.

    ms243179.alert_caution(ru-ru,VS.90).gifВажное примечание.

    Требуемый класс можно создать в том же проекте, в котором находятся тесты. Однако если предполагается повторно использовать правило, то лучше создать для хранения этого правила отдельный проект библиотеки классов. При создании отдельного проекта необходимо выполнить дополнительные действия, описанные в данной процедуре.

  3. (Необязательно) В проекте библиотеки классов добавьте ссылку на DDL-библиотеку Microsoft.VisualStudio.QualityTools.WebTestFramework.

  4. Создайте класс, производный от класса ExtractionRule. Реализуйте члены Extract и RuleName.

  5. (Необязательно) Выполните построение нового проекта библиотеки классов.

  6. (Необязательно) В тестовом проекте добавьте ссылку на проект библиотеки классов, содержащий пользовательское правило извлечения.

  7. В тестовом проекте откройте веб-тест в Редакторе веб-тестов.

  8. Чтобы добавить пользовательское правило извлечения, щелкните правой кнопкой мыши запрос веб-теста и выберите команду Добавить правило извлечения.

    Откроется диалоговое окно Добавление правила извлечения. Пользовательское правило проверки появится в списке Выбрать правило вместе с предопределенными правилами проверки. Выберите пользовательское правило извлечения и нажмите кнопку ОК.

  9. Выполните веб-тест.

Пример

В следующем коде показана реализация пользовательского правила извлечения. Это правило извлекает значение из указанного поля ввода. Данный пример можно использовать в качестве отправной точки для создания собственного правила извлечения.

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

Метод Extract содержит основные функции правила извлечения. Метод Extract из предыдущего примера принимает аргумент ExtractionEventArgs, который предоставляет ответ, созданный запросом, содержащимся в данном правиле извлечения. Ответ содержит объект HtmlDocument, в котором находятся все теги ответа. В объекте HtmlDocumentотфильтровываются теги "input". Каждый тег "input" проверяется на наличие атрибута name, значение которого равно значению свойства Имя, предоставленному пользователем. После обнаружения тега с соответствующим атрибутом выполняется попытка извлечь значение, содержащееся в атрибут value, если атрибут "value" существует. Если он существует, значения атрибутов "name" и "value" данного тега извлекаются и добавляются в контекст веб-теста. Правило извлечения завершается успехом.

См. также

Задачи

Практическое руководство. Добавление правила извлечения к веб-тесту

Пошаговое руководство. Добавление правил проверки и извлечения к веб-тесту

Практическое руководство. Создание пользовательского правила проверки

Ссылки

ExtractionRule

Microsoft.VisualStudio.TestTools.WebTesting.Rules

ExtractAttributeValue

ExtractFormField

ExtractHttpHeader

ExtractRegularExpression

ExtractText

ExtractHiddenFields