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

时间:2016-08-23 12:17:09

标签: c# visual-studio-2013 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获取响应正文?

2 个答案:

答案 0 :(得分:2)

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

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

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

  3. 执行Web测试时,我不确定其“控制台”输出的位置。据我所知,网络测试的标准输出并不是一个明确定义的东西。

  4. 了解响应机构的一种简单方法是使用PostRequest的{​​{1}}方法。首先

    WebTestRequestPlugin

    请注意使用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. } } 向Web测试结果日志提供日志记录信息。

答案 1 :(得分:0)

最后,在过去几天中,我一直无法找到解决方案,我正努力从Web Performance测试中捕获响应文本。希望这会有所帮助

公共重写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;
}