вызванный сгенерированный код веб-теста из консольного приложения - PullRequest
3 голосов
/ 17 февраля 2010

У меня был общий вопрос об извлечении кода из веб-теста visual studio. Я использовал опцию «генерировать код» веб-теста и получил следующее:

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

Что я хотел сделать, так это поместить этот тест в отдельную службу, которая будет выполняться в течение дня для проверки работоспособности. Я хочу убедиться, что пользователи могут войти в систему в течение дня. Какой процесс я должен использовать, чтобы получить тест, похожий на консольное приложение? У меня были проблемы с отладкой кода веб-теста. Например, как правильно вызвать метод GetRequestEnumerator и ответить на него из кода?

1 Ответ

0 голосов
/ 15 декабря 2010

Первое предложение:
допущение: вы хотите запускать его ежедневно и сделать его многоразовым / расширяемым для новых тестов

Бросьте свой тестовый код в веб-сервис и установите для него соответствующую ссылку. Затем создайте службу 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...