我写了一个调用网络服务的网络测试。
我想获得响应主体并对其进行一些验证。
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 :(得分:2)
问题中的代码至少存在三个问题
在执行WriteLine
之前,问题中的代码不会执行请求。两个语句WebTestResponse res = new WebTestResponse();
和console.WriteLine(res.BodyBytes);
只创建一个新的WebTestResponse
对象(包含所有默认值),然后尝试打印其部分内容。该请求由调用GetRequestEnumerator
方法的代码发出。
未定义console
对象。普通控制台的首字母大写,即Console
。
执行Web测试时,我不确定其“控制台”输出的位置。据我所知,网络测试的标准输出并不是一个明确定义的东西。
了解响应机构的一种简单方法是使用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;
}