Visual Studio Load CPU使用Json上下文参数飞涨
本文关键字:上下文 参数 Json 使用 Studio Load CPU Visual | 更新日期: 2023-09-27 18:18:25
我使用Visual Studio 2015来记录负载测试使用的WebPerformance测试。在初始记录之后,我可以同时运行20个用户,CPU使用率只有25%左右。然而,我正在测试的网站使用Json,所以为了使测试更真实,我为Json添加了一个自定义提取规则:
[DisplayName("JSON Extraction Rule")]
[Description("Extracts the specified JSON value from an object.")]
public class JsonExtractionRule : ExtractionRule
{
[DisplayName("Name/path of attribute")]
[Description("String to fetch the attribute from the Json Object.")]
public string Name { get; set; }
[DisplayName("Fetch 4 first characters only")]
[Description("Set to true if only the first 4 characters of the attribute should be fetched.")]
public Boolean fourFirstCharacters { get; set; }
public override void Extract(object sender, ExtractionEventArgs e)
{
if (e.Response.BodyString != null)
{
var json = e.Response.BodyString;
if (json.StartsWith("["))
{
json = "{'"array'":" + json + "}";
}
var data = JObject.Parse(json);
if (data != null)
{
var attribute = data.SelectToken(Name).ToString();
if (fourFirstCharacters)
{
e.WebTest.Context.Add(this.ContextParameterName, attribute.Substring(0, 4));
} else
{
e.WebTest.Context.Add(this.ContextParameterName, attribute);
}
e.Success = true;
return;
}
}
e.Success = false;
e.Message = String.Format(CultureInfo.CurrentCulture, "Not Found: {0}", Name);
}
}
我使用它从响应中提取几个Json属性,并使用上下文参数将它们添加到后续请求中。
在添加了几个提取之后,比如将一些上下文参数传递给请求,我的负载测试在只有5个同时用户的情况下达到100%的CPU使用率。
上述提取规则在WebPerformance测试中使用了大约20次,在任何单个响应上使用了0-5次。Json响应和请求大约有2k个字符长。最大的提取大约包含500个字符。
我可以理解,如果响应时间上升或类似的东西,更现实的Json被传递的结果。然而,我不明白为什么CPU使用率飞涨?请求的响应时间会影响负载测试的CPU使用率吗?
提取+上下文参数是一个坏的(在CPU使用的上下文中)在请求中实现Json的方式?是否有更聪明的方法可以节省CPU使用?
大部分CPU使用似乎是由在验证规则中使用上述自定义Json提取引起的。我删除了它,因为验证不是关键的,一切都运行得更顺利。