调用控制台应用程序生成的Web测试代码

时间:2010-02-16 21:48:52

标签: c# asp.net automated-tests

我有一个关于从visual studio web测试中提取代码的一般性问题。我使用了Web测试的“生成代码”选项,并获得了以下内容:

using System;
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.WebTesting;
using Microsoft.VisualStudio.TestTools.WebTesting.Rules;

namespace SignsOfLife
{
    public class SignsOfLifeCoded : WebTest {

        public SignsOfLifeCoded() {
            this.PreAuthenticate = true;
        }

        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://localhost/site/client/default.aspx");
            yield return request1;
            request1 = null;

            WebTestRequest request2 = new WebTestRequest("http://localhost/site/login.aspx");
            request2.ThinkTime = 5;
            request2.QueryStringParameters.Add("c", "clientcode", false, false);
            ExtractHiddenFields extractionRule1 = new ExtractHiddenFields();
            extractionRule1.Required = true;
            extractionRule1.HtmlDecode = true;
            extractionRule1.ContextParameterName = "1";
            request2.ExtractValues += new EventHandler<ExtractionEventArgs>(extractionRule1.Extract);
            yield return request2;
            request2 = null;

            WebTestRequest request3 = new WebTestRequest("http://localhost/site/login.aspx");
            request3.Method = "POST";
            request3.ExpectedResponseUrl = "http://localhost/site/user/home.aspx";
            request3.QueryStringParameters.Add("c", "clientcode", false, false);
            FormPostHttpBody request3Body = new FormPostHttpBody();
            request3Body.FormPostParameters.Add("__LASTFOCUS", this.Context["$HIDDEN1.__LASTFOCUS"].ToString());
            request3Body.FormPostParameters.Add("__EVENTTARGET", this.Context["$HIDDEN1.__EVENTTARGET"].ToString());
            request3Body.FormPostParameters.Add("__EVENTARGUMENT", this.Context["$HIDDEN1.__EVENTARGUMENT"].ToString());
            request3Body.FormPostParameters.Add("__VIEWSTATE", this.Context["$HIDDEN1.__VIEWSTATE"].ToString());
            request3Body.FormPostParameters.Add("__EVENTVALIDATION", this.Context["$HIDDEN1.__EVENTVALIDATION"].ToString());
            request3Body.FormPostParameters.Add("Login1$UserName", "username");
            request3Body.FormPostParameters.Add("Login1$Password", "password");
            request3Body.FormPostParameters.Add("Login1$LoginButton", "Log In");
            request3.Body = request3Body;
            yield return request3;
            request3 = null;
        }
    }
}

我想要做的是基本上将此测试放入一个单独的服务中,以便在一天中运行以进行健康检查。我基本上想确保用户能够全天登录。我应该使用什么过程来将测试变成控制台应用程序?我遇到了调试webtest代码的问题。就像我如何正确调用GetRequestEnumerator方法并从代码中响应它?

1 个答案:

答案 0 :(得分:0)

第一个建议:
   假设:您希望每天运行此操作并使其可重用/可扩展以进行新测试

将测试代码放入Web服务并正确链接。 然后创建一个基于任何时间间隔每天使用该服务的Windows服务,并以某种方式存储结果。

如果我的假设不正确,那么对于以后不会重复使用的内容,这是不必要的工作量。

第二个建议:
    假设:您的测试只会执行一天

只需编写一个控制台应用程序,以给定的时间间隔执行测试 编写控制台应用程序以运行计时器类并在时间间隔过去时注册回调事件。在您定义的回调方法中,执行所需的测试并记录结果。

有一个线程问题可以通过多种方式处理...你希望你的应用程序能够继续全天运行,所以你可以使用这样的东西

public class tester
{
   public tester()
   {
       //setup timer logic here
       //..
       //..

       var ts = new ThreadStart(run);
       var thread = new Thread(ts);
       thread.start();
   } 

   public void run()
   {
       while (ShouldContinue);
       {
           //do nothing execute keep app going
       }
   }
}

然后切换当你满足你的退出条件时,继续关闭...我会假设条件是如果应用程序运行24小时+在这种情况下

第二种解决方案真的不应该花费很长时间来设计和制造。但第一个会耗费更多时间。

希望能回答你的问题或引发另一个想法= D