如何:为 Web 性能测试创建自定义提取规则
可以创建自己的提取规则。若要执行此操作,需从提取规则类派生出自己的规则。从 ExtractionRule 基类派生提取规则。
Visual Studio 旗舰版 提供了一些预定义的提取规则。有关更多信息,请参见在 Web 性能测试中使用验证规则和提取规则。
说明 |
---|
还可以创建自定义验证规则。有关更多信息,请参见为负载和 Web 性能测试创建和使用自定义插件。 |
要求
- Visual Studio 旗舰版
创建自定义提取规则
打开一个包含 Web 性能测试的测试项目。
(可选)创建一个单独的类库项目来存储您的提取规则。
重要事项 您可以在测试所在的项目中创建类。但是,如果您希望重用规则,则最好创建一个单独的类库项目来存储规则。如果创建单独的项目,则必须完成本过程中的可选步骤。
(可选)在该类库项目中,添加一个对 Microsoft.VisualStudio.QualityTools.WebTestFramework dll 的引用。
创建一个从 ExtractionRule 类派生的类。实现 Extract 和 RuleName 成员。
(可选)生成新的类库项目。
(可选)在测试项目中添加一个对包含自定义提取规则的类库项目的引用。
在测试项目中的**“Web 性能测试编辑器”**中打开一个 Web 性能测试。
若要添加自定义提取规则,请右击某个 Web 性能测试请求并选择**“添加提取规则”**。
将出现**“添加提取规则”对话框。您将在“选择规则”**列表中看到您的自定义验证规则以及预定义的验证规则。选择自定义提取规则然后选择 确定。
运行该 Web 性能测试。
示例
下面的代码演示如何实现自定义提取规则。该提取规则从指定的输入字段中提取值。基于该示例来创建您自己的自定义提取规则。
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 performance 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 performance 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 performance 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 performance 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 筛选排除掉。会对每个输入标记的 name 特性进行检查,以确定其值是否与用户所提供的 Name 属性的值相等。如果找到具有此匹配特性的标记,便会尝试提取 value 特性所包含的值(如果存在 value 特性的话)。如果该值存在,则会提取标记的名称和值,并将它们添加到 Web 性能测试上下文中。提取规则通过。
请参见
任务
参考
Microsoft.VisualStudio.TestTools.WebTesting.Rules