【问题标题】:visual studio web test error handlingVisual Studio Web 测试错误处理
【发布时间】:2016-10-10 10:57:03
【问题描述】:

我正在使用 Visual Studio Ultimate 2013 并且有一个负载测试,它使用带有许多请求和 Web 测试插件的 Web 测试。

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

谢谢

【问题讨论】:

    标签: visual-studio testing error-handling load


    【解决方案1】:

    检测到错误后,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; 或分配和测试(注意 if 用于 C# 中的条件,而不是 If)可能会更好

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

    【讨论】:

    • 谢谢阿德里安。 “如果”只是帖子中的一个错字,我继承了获取状态代码的代码。我已经纠正了它,现在你正确地指出了它。我肯定会关闭“错误停止”并在我的代码中处理它。
    • 请阅读help center页面,了解接受答案时的含义,请参阅stackoverflow.com/help/accepted-answer。如果您的问题尚未得到解答,请对其进行编辑以解释缺失的详细信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 2018-12-24
    相关资源
    最近更新 更多