如何在代码webtest中获取响应体?

how to get the response body in code webtest?

我写了一个调用网络服务的网络测试。

我想获取响应正文并对其进行一些验证。

    public override IEnumerator<WebTestRequest> GetRequestEnumerator()
    {


        WebTestRequest request2 = new WebTestRequest("webservice");

        request2.Headers.Add("Content-Type", "application/json");
        request2.Method = "POST";
        request2.Encoding = System.Text.Encoding.GetEncoding("utf-8");
        StringHttpBody request2Body = new StringHttpBody();

        request2Body.ContentType = "application/json";
        request2Body.InsertByteOrderMark = false;
        request2Body.BodyString = @"{                                       <body>}";
        request2.Body = request2Body;


        WebTestResponse res = new WebTestResponse();
        console.WriteLine(res.BodyBytes);

       yield return request2;

       request2 = null;
    }

当我 运行 上面的代码时,我的控制台没有得到任何响应。

如何使用编码的 webtest 获取响应正文?

题中代码至少存在三个问题

  1. 问题中的代码在执行 WriteLine 之前没有执行请求。 WebTestResponse res = new WebTestResponse();console.WriteLine(res.BodyBytes); 这两个语句只是创建一个新的 WebTestResponse 对象(具有所有默认值),然后尝试打印其部分内容。该请求由调用您的 GetRequestEnumerator 方法的代码发出。

  2. 未定义 console 对象。普通控制台首字母大写,即Console.

  3. 当网络测试执行时,我不确定它的 "console" 输出会去哪里。据我所知,网络测试的标准输出并不是一个定义明确的东西。

获取响应主体的一种简单方法是使用 WebTestRequestPluginPostRequest 方法。首先

public class BodyContentsDemo : WebTestRequestPlugin
{
    public override void PostRequest(object sender, PostRequestEventArgs e)
    {
        byte[] bb = e.Response.BodyBytes;
        string ss = e.Response.BodyString;

        e.WebTest.AddCommentToResult(
            "BodyBytes is " +
            bb == null ? " null"
            : bb.Length.ToString() + " bytes");

        e.WebTest.AddCommentToResult(
            "BodyString is " +
            ss == null ? "null"
            : ss.Length.ToString() + " chars");

        // Use bb or ss.
    }
}

请注意使用 AddCommentToResult 向 Web 测试结果日志提供日志记录信息。

我终于找到了解决方案,过去几天我一直在努力从 Web 性能测试中捕获响应文本。希望这有帮助

public 覆盖 IEnumerator GetRequestEnumerator() {

    WebTestRequest request2 = new WebTestRequest("webservice");

    request2.Headers.Add("Content-Type", "application/json");
    request2.Method = "POST";
    request2.Encoding = System.Text.Encoding.GetEncoding("utf-8");
    StringHttpBody request2Body = new StringHttpBody();

    request2Body.ContentType = "application/json";
    request2Body.InsertByteOrderMark = false;
    request2Body.BodyString = @"{<body>}";
    request2.Body = request2Body;


    WebTestResponse res = new WebTestResponse();
    console.WriteLine(res.BodyBytes);

   yield return request2;
   /*This will generate a new string which can be part of your filename when      you run performance tests*/
   String randomNo = DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss").Replace("-", "").Replace(" ", "").Replace(":", "");
   /*This will generate a new file each time your WebRequest runs so you know what the server is returning when you perform webtests*/
   /*You can use some Json parser if your response is Json and capture and validate the response*/
   System.IO.File.WriteAllText(@"C:\Users\XXXX\PerformanceTestRequests\LastResponse" + randomNo+ ".txt", this.LastResponse.BodyString);
   request2 = null;
}