2010-02-16 5 views
2

J'avais une question générale sur l'extraction de code à partir d'un test web de studio visuel. J'ai utilisé l'option d'un test web « générer le code » et a obtenu les points suivants:appelé code de test Web généré à partir de l'application console

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; 
     } 
    } 
} 

Ce que je voulais faire est de mettre essentiellement ce test dans un service distinct pour exécuter toute la journée à des fins de vérification de la santé. Je veux essentiellement faire en sorte que les utilisateurs puissent se connecter tout au long de la journée. Quel processus dois-je utiliser pour obtenir le test dans quelque chose comme une application de console? Je rencontrais des problèmes avec le débogage du code webtest. Comment est-ce que j'appellerais correctement la méthode GetRequestEnumerator et y répondrais à partir du code?

Répondre

0

Première suggestion:
hypothèse: vous voulez exécuter sur une base quotidienne et la rendre réutilisable/extensible pour de nouveaux tests

Jetez votre code de test dans un service Web et de le relier de façon appropriée. Ensuite, créez un service Windows qui consomme le service quotidiennement en fonction de l'intervalle de temps et stockez les résultats d'une manière ou d'une autre.

Si mon hypothèse est incorrect, il est inutile une quantité de travail pour quelque chose qui ne sera pas réutilisé plus tard.

Deuxième suggestion:
hypothèse: vos tests ne seront exécutés pendant une période d'un jour

écrire simplement une application console pour exécuter les tests à un intervalle donné écrire l'application de la console pour exécuter un classe de minuterie et enregistrer un événement de rappel pour quand l'intervalle de temps s'est écoulé. Dans la méthode de rappel que vous avez définie, effectuez les tests nécessaires et enregistrez les résultats.

Il y a un problème de filetage qui peut être traité dans un certain nombre de façons ... vous voulez que votre application continuer à exécuter toute la journée, vous pouvez simplement utiliser quelque chose comme ça

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 
     } 
    } 
} 

puis bascule ShouldContinue lorsque vous répondent à votre condition de sortir ... Je suppose que la condition serait si l'application est en cours d'exécution pendant 24 heures + dans ce scénario

la deuxième solution vraiment ne devrait pas vous prendre beaucoup de temps pour concevoir et fabriquer. Mais le premier prendra plus de temps.

espérons que cela répond à votre question ou suscite une autre idée = D