.NET WebTest-获取ValidationRule的响应字节

.NET WebTest-获取ValidationRule的响应字节,.net,webtest,.net,Webtest,我需要创建一个ValidationRule来测试响应字节,包括依赖请求的响应。获取主请求的响应字节很容易,但我无法访问依赖请求的响应。我不知道怎么做 public class WebTest1Coded : WebTest { public WebTest1Coded() { this.PreAuthenticate = true; } public long ResponseBytesLength { get; set; } pub

我需要创建一个ValidationRule来测试响应字节,包括依赖请求的响应。获取主请求的响应字节很容易,但我无法访问依赖请求的响应。我不知道怎么做

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