我使用的是Visual Studio Ultimate 2013,并且有一个负载测试,该负载测试使用带有许多请求和Web测试插件的Web测试。
在我的PostRequest插件中,当返回的hhtp代码超过400时,我正在检查响应的http状态代码并在WebTest.Context参数中标记错误。我想要做的是在PostTransaction WebTest插件中进行选择并更新数据库表。问题是,当框架检测到错误并且未调用PostTransaction插件时,测试将中止。
我添加了一个PostWebTest插件,我认为在测试迭代中止时会被调用,但是当请求失败时,它永远不会实现。如果测试成功,它将击中它。我想念什么?
public override void PostRequest(object sender, PostRequestEventArgs e)
{
...
statusCode = e.Response.StatusCode.GetHashCode();
If (statusCode > 400)
{
e.WebTest.Context["TransactionFailCount"] = 1;
}
}
public override void PostTransaction(object sender, PostTransactionEventArgs e)
{
int transactionFailCount = Convert.ToInt32(e.WebTest.Context["TransactionFailCount"]);
if (transactionFailCount > 0)
failCount = 1;
else
passCount = 1;
...
base.PostTransaction(sender, e);
}
public override void PostWebTest(object sender, PostWebTestEventArgs e)
{
base.PostWebTest(sender, e);
}
谢谢
最佳答案
检测到错误后,Web性能测试(WPT)将继续执行,除非该测试的Stop on error
属性为true
。错误处理后可能没有执行请求处理的某些方面,但是我还没有看到任何此类情况。
注意术语。 WPT使用“事务”作为对多个请求进行分组的一种方式。请求的上下文(右键单击)菜单具有“添加交易”条目,该条目选择测试中要包含在该交易中的项目范围。也许您应该使用PostRequest
或PostPage
插件,而不是PostTransaction
。
我建议您使用一个简单的两三个请求WPT以及一些仅宣布它们已被调用的简单插件进行一些实验。例如
public override void PostRequest(object sender, PostRequestEventArgs e)
{
e.WebTest.AddCommentToResult("PostRequest called for url " + e.Request.Url);
}
此外,在Codeplex的Visual Studio Performance Testing Quick Reference Guide的第32页至第44页中,对如何以及何时调用插件进行了很好的解释。
语句
statusCode = e.Response.StatusCode.GetHashCode();
很奇怪。 e.Response.StatusCode
的值是enum
,可以通过强制转换获得整数值。 GetHashCode
方法无意获取enum
的数值。该语句会更好,因为statusCode = (int)e.Response.StatusCode;
或assign and test(请注意if
用于C#中的条件语句,而不是If
)可能会更好,因为statusCode = e.Response.StatusCode;
if ( e.Response.StatusCode >= System.Net.HttpStatusCode.BadRequest ) { ... }
关于visual-studio - Visual Studio Web测试错误处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39956707/