在 Visual Studio Web 负载测试中提取嵌套字段
Extract nested fields in Visual Studio Web load test
这是一个 html 代码,我想测试从
加载和提取数据
<body>
<h1>Hello Whosebug</h1>
<input type="hidden" name="Secret" value="66"/>
<input type="hidden" name="Field[66].value" value="333" />
</body>
我需要 333
值。为此,我需要从 Secret
中提取值 66
,然后使用该值推导出字段名称(此处为 Field[66].value
)。
我该怎么做?
我试过使用两个 Extract Attribute Value
提取规则,但是因为在同一个响应中,第一个值还不在上下文中。
解决方案是按照 here 的解释创建一个 Custom Extraction Rule
并使用正则表达式解析两次 html 主体
提取方法:
public override void Extract(object sender, ExtractionEventArgs e)
{
var val1 = GetInputValueByName(e.Response.BodyString, "Secret");
var val2 = GetInputValueByName(e.Response.BodyString, $"Field[{val1}].value");
if (!string.IsNullOrEmpty(val2 ))
{
e.Success = true;
e.WebTest.Context.Add(this.ContextParameterName, val2);
}
else
{
// 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);
}
}
private string GetInputValueByName(string html, string name)
{
Match match = Regex.Match(html, "<input[^>]*name=\"" + Regex.Escape(name) + "\"[^>]*value=\"([^\"]*)\"");
if (match.Success)
{
return match.Groups[1].Value;
}
return string.Empty;
}
这是一个 html 代码,我想测试从
加载和提取数据<body>
<h1>Hello Whosebug</h1>
<input type="hidden" name="Secret" value="66"/>
<input type="hidden" name="Field[66].value" value="333" />
</body>
我需要 333
值。为此,我需要从 Secret
中提取值 66
,然后使用该值推导出字段名称(此处为 Field[66].value
)。
我该怎么做?
我试过使用两个 Extract Attribute Value
提取规则,但是因为在同一个响应中,第一个值还不在上下文中。
解决方案是按照 here 的解释创建一个 Custom Extraction Rule
并使用正则表达式解析两次 html 主体
提取方法:
public override void Extract(object sender, ExtractionEventArgs e)
{
var val1 = GetInputValueByName(e.Response.BodyString, "Secret");
var val2 = GetInputValueByName(e.Response.BodyString, $"Field[{val1}].value");
if (!string.IsNullOrEmpty(val2 ))
{
e.Success = true;
e.WebTest.Context.Add(this.ContextParameterName, val2);
}
else
{
// 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);
}
}
private string GetInputValueByName(string html, string name)
{
Match match = Regex.Match(html, "<input[^>]*name=\"" + Regex.Escape(name) + "\"[^>]*value=\"([^\"]*)\"");
if (match.Success)
{
return match.Groups[1].Value;
}
return string.Empty;
}