我使用的是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使用“事务”作为对多个请求进行分组的一种方式。请求的上下文(右键单击)菜单具有“添加交易”条目,该条目选择测试中要包含在该交易中的项目范围。也许您应该使用PostRequestPostPage插件,而不是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/

10-11 22:33
查看更多