繁体   English   中英

visual studio web测试错误处理

[英]visual studio web test error handling

我正在使用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);
 }

谢谢

检测到错误后,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性能测试快速参考指南的第32到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 ) { ... }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM