WebTest.Outcome & WebTestRequest.Outcome

You can now determine whether a Request or Test passed or failed from within a Coded WebTest or a WebTest Plug-in by using the Outcome property on the WebTest and WebTestRequest objects. This can be used to do some branching based on whether or not a request passes, as well as detect at the end of a test whether it passed or failed and take some action based on the result, here’s an example if the GetRequestEnumerator method from a coded webtest making use of these two properties:


public override IEnumerator<WebTestRequest> GetRequestEnumerator()


    // Initialize validation rules that apply to all requests in the WebTest

    if ((this.Context.ValidationLevel >= Microsoft.VisualStudio.TestTools.WebTesting.ValidationLevel.Low))


    ValidateResponseUrl validationRule1 = new ValidateResponseUrl();

        this.ValidateResponse += new EventHandler<ValidationEventArgs>(validationRule1.Validate);


    WebTestRequest request1 = new WebTestRequest("http://site/default.aspx");

    request1.ThinkTime = 4;

    request1.RecordedResponseUrl = "http://site/default.aspx";

    yield return request1;

    if (request1.Outcome == Outcome.Fail)


         WebTestRequest request2 = new WebTestRequest("http://site/a.aspx");

         request2.ThinkTime = 3;

         request2.RecordedResponseUrl = "http://site/a.aspx";

         yield return request2;




         WebTestRequest request3 = new WebTestRequest("http://site/b.aspx");

         request3.RecordedResponseUrl = "http://site/b.aspx";

         yield return request3;


    if (this.Outcome == Outcome.Fail)


         //do some logging stuff

         MessageBox.Show("Test Failed, doing some logging now.");



If request1 fails then the next request yielded is request2, otherwise request3 is yielded. At the end of the test we check the overall test outcome and throw up a message box in case of failure, normally we might do some kind of additional logging or something at that point.