.NET WebTest-获取ValidationRule的响应字节
我需要创建一个ValidationRule来测试响应字节,包括依赖请求的响应。获取主请求的响应字节很容易,但我无法访问依赖请求的响应。我不知道怎么做.NET WebTest-获取ValidationRule的响应字节,.net,webtest,.net,Webtest,我需要创建一个ValidationRule来测试响应字节,包括依赖请求的响应。获取主请求的响应字节很容易,但我无法访问依赖请求的响应。我不知道怎么做 public class WebTest1Coded : WebTest { public WebTest1Coded() { this.PreAuthenticate = true; } public long ResponseBytesLength { get; set; } pub
public class WebTest1Coded : WebTest
{
public WebTest1Coded()
{
this.PreAuthenticate = true;
}
public long ResponseBytesLength { get; set; }
public override IEnumerator<WebTestRequest> GetRequestEnumerator()
{
if ((this.Context.ValidationLevel >= Microsoft.VisualStudio.TestTools.WebTesting.ValidationLevel.Low))
{
ValidationResponseRuleNumberOfBytes validationRule3 = new ValidationResponseRuleNumberOfBytes();
this.ValidateResponseOnPageComplete += new EventHandler<ValidationEventArgs>(validationRule3.Validate);
}
WebTestRequest request1 = new WebTestRequest("http://localhost/open.aspx");
request1.ThinkTime = 2;
yield return request1;
request1 = null;
}
}
public class ValidationResponseRuleNumberOfBytes : ValidationRule
{
public override string RuleName
{
get { return "Validate Page Size"; }
}
public override string RuleDescription
{
get { return "Validates that the page is less then 300 000 bytes."; }
}
public override void Validate(object sender, ValidationEventArgs e)
{
if (e.Response.HtmlDocument != null)
{
e.Message = string.Format("Page length is {0}", e.Response.BodyBytes.Length);
e.IsValid = e.Response.BodyBytes.Length < 300000;
}
}
}
公共类webtest1code:WebTest
{
公共WebTest1Coded()
{
this.PreAuthenticate=true;
}
公共长响应字节长度{get;set;}
公共重写IEnumerator GetRequestEnumerator()
{
if((this.Context.ValidationLevel>=Microsoft.VisualStudio.TestTools.WebTesting.ValidationLevel.Low))
{
ValidationResponseRunNumberOfBytes validationRule3=新的ValidationResponseRunNumberOfBytes();
this.ValidateResponseOnPageComplete+=新事件处理程序(validationRule3.Validate);
}
WebTestRequest1=新的WebTestRequest(“http://localhost/open.aspx");
request1.ThinkTime=2;
收益返回请求1;
request1=null;
}
}
公共类ValidationResponseUreneNumber of Bytes:ValidationRule
{
公共重写字符串规则名
{
获取{返回“验证页面大小”;}
}
公共重写字符串规则描述
{
get{return“验证页面小于300000字节。”;}
}
公共覆盖无效验证(对象发送方、验证目标)
{
if(e.Response.HtmlDocument!=null)
{
e、 Message=string.Format(“页面长度为{0}”,e.Response.BodyBytes.length);
e、 IsValid=e.Response.BodyBytes.Length<300000;
}
}
}
也许手动将事件处理程序添加到从属请求中会起作用,直到出现更好的想法为止
foreach (WebTestRequest request in request1.DependentRequests)
{
request.ValidateResponse += new EventHandler<ValidationEventArgs>(validationRule3.Validate);
}
foreach(request1.DependentRequests中的WebTestRequest请求)
{
request.ValidateResponse+=新的事件处理程序(validationRule3.Validate);
}
也许手动将事件处理程序添加到从属请求中会起作用,直到出现更好的想法为止
foreach (WebTestRequest request in request1.DependentRequests)
{
request.ValidateResponse += new EventHandler<ValidationEventArgs>(validationRule3.Validate);
}
foreach(request1.DependentRequests中的WebTestRequest请求)
{
request.ValidateResponse+=新的事件处理程序(validationRule3.Validate);
}
我终于完成了我的任务!方法是在WebTest.GetRequestEnumerator中的主请求的PostRequest上设置事件处理程序,并在那里为依赖请求设置ValidateResponse事件处理程序。代码如下:
public class PageSize : WebTest
{
public PageSize()
{
this.PreAuthenticate = true;
}
public int DependentResponsesBytes { get; set; }
public long ResponseBytesLength { get; set; }
public long ResponseBytesLengthMaximum { get; set; }
public override IEnumerator<WebTestRequest> GetRequestEnumerator()
{
if ((this.Context.ValidationLevel >= Microsoft.VisualStudio.TestTools.WebTesting.ValidationLevel.Low))
{
ValidationResponseRuleNumberOfBytes validationRule3 = new ValidationResponseRuleNumberOfBytes();
this.ValidateResponseOnPageComplete += new EventHandler<ValidationEventArgs>(validationRule3.Validate);
}
WebTestRequest request1 = new WebTestRequest("http://localhost/open.aspx");
request1.ThinkTime = 2;
DependentResponsesBytes = 0;
ResponseBytesLengthMaximum = 300000;
request1.PostRequest += new EventHandler<PostRequestEventArgs>(SetValidationEventsForDependentResponses);
yield return request1;
request1 = new WebTestRequest("http://localhost/welcome.aspx");
request1.ThinkTime = 2;
DependentResponsesBytes = 0;
ResponseBytesLengthMaximum = 400000;
request1.PostRequest += new EventHandler<PostRequestEventArgs>(SetValidationEventsForDependentResponses);
yield return request1;
request1 = null;
}
void SetValidationEventsForDependentResponses(object sender, PostRequestEventArgs e)
{
foreach (WebTestRequest depententRequest in e.Request.DependentRequests)
{
depententRequest.ValidateResponse += new EventHandler<ValidationEventArgs>(depententRequest_ValidateResponse);
}
}
void depententRequest_ValidateResponse(object sender, ValidationEventArgs e)
{
DependentResponsesBytes += e.Response.BodyBytes.Length;
}
}
public class ValidationResponseRuleNumberOfBytes : ValidationRule
{
public override string RuleName
{
get { return "Validate Page Size"; }
}
public override string RuleDescription
{
get { return string.Format("Validates that the page is less then some number of bytes set in WebTest."); }
}
public override void Validate(object sender, ValidationEventArgs e)
{
if (e.Response.HtmlDocument != null)
{
int totalBytes = e.Response.BodyBytes.Length + ((PageSize)e.WebTest).DependentResponsesBytes;
e.Message = string.Format("Page length is {0}", totalBytes);
if (totalBytes < ((PageSize)e.WebTest).ResponseBytesLengthMaximum)
{
e.IsValid = true;
e.Message = "Passed";
}
else
{
e.IsValid = false;
e.Message = "Failed";
}
e.Message += string.Format(". Page length is {0} bytes. Maximum is {1}", totalBytes, ((PageSize)e.WebTest).ResponseBytesLengthMaximum);
}
}
}
公共类页面大小:WebTest
{
公共页面大小()
{
this.PreAuthenticate=true;
}
public int dependentResponseBytes{get;set;}
公共长响应字节长度{get;set;}
公共长响应字节长度最大值{get;set;}
公共重写IEnumerator GetRequestEnumerator()
{
if((this.Context.ValidationLevel>=Microsoft.VisualStudio.TestTools.WebTesting.ValidationLevel.Low))
{
ValidationResponseRunNumberOfBytes validationRule3=新的ValidationResponseRunNumberOfBytes();
this.ValidateResponseOnPageComplete+=新事件处理程序(validationRule3.Validate);
}
WebTestRequest1=新的WebTestRequest(“http://localhost/open.aspx");
request1.ThinkTime=2;
DependentResponseBytes=0;
响应字节长度最大值=300000;
request1.PostRequest+=新事件处理程序(SetValidationEventsForDependentResponses);
收益返回请求1;
request1=新的WebTestRequest(“http://localhost/welcome.aspx");
request1.ThinkTime=2;
DependentResponseBytes=0;
响应字节长度最大值=400000;
request1.PostRequest+=新事件处理程序(SetValidationEventsForDependentResponses);
收益返回请求1;
request1=null;
}
void SetValidationEventsForDependentResponses(对象发送方,PostRequestEventArgs e)
{
foreach(e.Request.DependentRequests中的WebTestRequest DependentRequest)
{
depententRequest.ValidateResponse+=新事件处理程序(depentrequest\u ValidateResponse);
}
}
void depententRequest_ValidateResponse(对象发送方、验证目标)
{
DependentResponseBytes+=e.Response.BodyBytes.Length;
}
}
公共类ValidationResponseUreneNumber of Bytes:ValidationRule
{
公共重写字符串规则名
{
获取{返回“验证页面大小”;}
}
公共重写字符串规则描述
{
get{return string.Format(“验证页面是否小于WebTest中设置的某个字节数”);}
}
公共覆盖无效验证(对象发送方、验证目标)
{
if(e.Response.HtmlDocument!=null)
{
int totalBytes=e.Response.BodyBytes.Length+((PageSize)e.WebTest);
e、 Message=string.Format(“页面长度为{0}”,totalBytes);
if(总字节数<((页面大小)e.WebTest).responseBytes长度最大值)
{
e、 IsValid=true;
e、 Message=“已通过”;
}
其他的
{
e、 IsValid=false;
e、 Message=“失败”;
}
e、 Message+=string.Format(“.Page长度为{0}字节,最大值为{1}”,totalBytes,((PageSize)e.WebTest).responseBytes长度最大值);
}
}
}
我终于完成了我的任务!方法是在WebTest.GetRequestEnumerator中的主请求的PostRequest上设置事件处理程序,并在那里为依赖请求设置ValidateResponse事件处理程序。代码如下:
public class PageSize : WebTest
{
public PageSize()
{
this.PreAuthenticate = true;
}
public int DependentResponsesBytes { get; set; }
public long ResponseBytesLength { get; set; }
public long ResponseBytesLengthMaximum { get; set; }
public override IEnumerator<WebTestRequest> GetRequestEnumerator()
{
if ((this.Context.ValidationLevel >= Microsoft.VisualStudio.TestTools.WebTesting.ValidationLevel.Low))
{
ValidationResponseRuleNumberOfBytes validationRule3 = new ValidationResponseRuleNumberOfBytes();
this.ValidateResponseOnPageComplete += new EventHandler<ValidationEventArgs>(validationRule3.Validate);
}
WebTestRequest request1 = new WebTestRequest("http://localhost/open.aspx");
request1.ThinkTime = 2;
DependentResponsesBytes = 0;
ResponseBytesLengthMaximum = 300000;
request1.PostRequest += new EventHandler<PostRequestEventArgs>(SetValidationEventsForDependentResponses);
yield return request1;
request1 = new WebTestRequest("http://localhost/welcome.aspx");
request1.ThinkTime = 2;
DependentResponsesBytes = 0;
ResponseBytesLengthMaximum = 400000;
request1.PostRequest += new EventHandler<PostRequestEventArgs>(SetValidationEventsForDependentResponses);
yield return request1;
request1 = null;
}
void SetValidationEventsForDependentResponses(object sender, PostRequestEventArgs e)
{
foreach (WebTestRequest depententRequest in e.Request.DependentRequests)
{
depententRequest.ValidateResponse += new EventHandler<ValidationEventArgs>(depententRequest_ValidateResponse);
}
}
void depententRequest_ValidateResponse(object sender, ValidationEventArgs e)
{
DependentResponsesBytes += e.Response.BodyBytes.Length;
}
}
public class ValidationResponseRuleNumberOfBytes : ValidationRule
{
public override string RuleName
{
get { return "Validate Page Size"; }
}
public override string RuleDescription
{
get { return string.Format("Validates that the page is less then some number of bytes set in WebTest."); }
}
public override void Validate(object sender, ValidationEventArgs e)
{
if (e.Response.HtmlDocument != null)
{
int totalBytes = e.Response.BodyBytes.Length + ((PageSize)e.WebTest).DependentResponsesBytes;
e.Message = string.Format("Page length is {0}", totalBytes);
if (totalBytes < ((PageSize)e.WebTest).ResponseBytesLengthMaximum)
{
e.IsValid = true;
e.Message = "Passed";
}
else
{
e.IsValid = false;
e.Message = "Failed";
}
e.Message += string.Format(". Page length is {0} bytes. Maximum is {1}", totalBytes, ((PageSize)e.WebTest).ResponseBytesLengthMaximum);
}
}
}
公共类页面大小:WebTest
{
公共页面大小()
{
this.PreAuthenticate=true;
}
public int dependentResponseBytes{get;set;}
公共长响应字节长度{get;set;}
公共长响应字节长度最大值{get;set;}
公共重写IEnumerator GetRequestEnumerator()
{
如果((this.Context.ValidationLevel>=Microsoft.VisualStudio.TestToo