2016-08-23 74 views
0

我写了一个调用web服务的webtest。如何在代码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的响应身体?

+0

在Microsoft论坛上提出了同样的问题,请参阅https://social.msdn.microsoft.com/Forums/vstudio/en-US/944dc265-99d3-41a7-916a-2737e0555e58/how-to-get -the-响应车身的代码WebTest的?论坛= vstest – AdrianHHH

回答

1

至少有三个问题中的代码问题

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

  2. console对象未定义。正常控制台有第一个字母大写,即Console

  3. 当一个web测试执行时,我不知道它的“控制台”输出将在哪里。据我所知,网络测试的标准输出并不是一个明确定义的事情。

一个简单的方法来获得在响应主体是使用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测试结果的日志。

相关问题