如何在代码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 获取响应正文?
题中代码至少存在三个问题
问题中的代码在执行 WriteLine
之前没有执行请求。 WebTestResponse res = new WebTestResponse();
和 console.WriteLine(res.BodyBytes);
这两个语句只是创建一个新的 WebTestResponse
对象(具有所有默认值),然后尝试打印其部分内容。该请求由调用您的 GetRequestEnumerator
方法的代码发出。
未定义 console
对象。普通控制台首字母大写,即Console
.
当网络测试执行时,我不确定它的 "console" 输出会去哪里。据我所知,网络测试的标准输出并不是一个定义明确的东西。
获取响应主体的一种简单方法是使用 WebTestRequestPlugin
的 PostRequest
方法。首先
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;
}
我写了一个调用网络服务的网络测试。
我想获取响应正文并对其进行一些验证。
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 获取响应正文?
题中代码至少存在三个问题
问题中的代码在执行
WriteLine
之前没有执行请求。WebTestResponse res = new WebTestResponse();
和console.WriteLine(res.BodyBytes);
这两个语句只是创建一个新的WebTestResponse
对象(具有所有默认值),然后尝试打印其部分内容。该请求由调用您的GetRequestEnumerator
方法的代码发出。未定义
console
对象。普通控制台首字母大写,即Console
.当网络测试执行时,我不确定它的 "console" 输出会去哪里。据我所知,网络测试的标准输出并不是一个定义明确的东西。
获取响应主体的一种简单方法是使用 WebTestRequestPlugin
的 PostRequest
方法。首先
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;
}