2016-10-10 82 views
1

我正在使用Visual Studio Ultimate 2013,并有一个负载测试,使用Web测试与一些请求和Web测试插件。视觉工作室网络测试错误处理

在我的PostRequest插件中,我检查了响应的http状态码,并在返回超过400的hhtp代码时在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); 
} 

感谢

回答

0

一个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); 
} 

此外,还有是一个很好的解释如何以及何时插件在第32页打电话给Visual Studio Performance Testing Quick Reference Guide从Codeplex上的44。

声明statusCode = e.Response.StatusCode.GetHashCode();很奇怪。 e.Response.StatusCode的值是enum,它可以通过强制转换获得整数值。 GetHashCode方法不打算获取enum的数字值。该声明会更好,因为statusCode = (int)e.Response.StatusCode;或分配和测试(注意if在C#中使用条件语句,不If)可能会更好,因为

statusCode = e.Response.StatusCode; 
if (e.Response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { ... } 
+0

谢谢阿德里安。 “如果”只是一个错误的帖子,我继承了获取状态码的代码。我已经纠正了它,现在你正确地指出了它。我一定会关闭“Stop on Error”并在我的代码中处理它。 –

+0

有关接受答案时的含义,请阅读[帮助]页面,请参阅http://stackoverflow.com/help/accepted-answer。如果您的问题没有得到解答,请编辑它以解释缺失的细节。 – AdrianHHH

0

感谢阿德里安。 “如果”只是一个错误的帖子,我继承了获取状态码的代码。我已经纠正了它,现在你正确地指出了它。

我一定会关闭“Stop on Error”并在我的代码中处理它。如果没有,我会尝试其他建议。

谢谢