NAnt, MbUnit, CruiseControl, Selenium - передача настроек в тестовую сборку - PullRequest
1 голос
/ 27 октября 2008

Я собираю некоторые идеи для нашей автоматизированной платформы тестирования и ищу Selenium для тестировщика.

Я обертываю записанные сценарии Selenium C # в тесте MbUnit, который запускается с помощью задачи MbUnit NAnt. Тестовый клиент Selenium создается следующим образом:

selenium = new DefaultSelenium("host", 4444, "*iexplore", "http://[url]/");

Как передать настройки хоста, порта и URL-адреса в тест, чтобы их значения можно было контролировать с помощью задачи NAnt?

Например, у меня может быть прослушивание нескольких серверов Selenium RC, и я хочу использовать один и тот же тестовый код, передаваемый на каждый адрес сервера, вместо встраивания настроек в сами тесты.

У меня есть подход, смоделированный с использованием пользовательской задачи NAnt, которую я написал, но в настоящее время это не самое элегантное решение, и я подумал, есть ли более простой способ выполнить то, что я хочу сделать.

Большое спасибо, если кто-нибудь может помочь.

Ответы [ 4 ]

1 голос
/ 15 января 2009

У меня есть базовый класс для всех тестовых приборов, который имеет следующий код настройки:

    [FixtureSetUp]
    public virtual void TestFixtureSetup ()
    {
        BrowserType = (BrowserType) Enum.Parse (typeof (BrowserType),
            System.Configuration.ConfigurationManager.AppSettings["BrowserType"],
            true);
        testMachine = System.Configuration.ConfigurationManager.AppSettings["TestMachine"];
        seleniumPort = int.Parse (System.Configuration.ConfigurationManager.AppSettings["SeleniumPort"],
            System.Globalization.CultureInfo.InvariantCulture);
        seleniumSpeed = System.Configuration.ConfigurationManager.AppSettings["SeleniumSpeed"];
        browserUrl = System.Configuration.ConfigurationManager.AppSettings["BrowserUrl"];
        targetUrl = new Uri (System.Configuration.ConfigurationManager.AppSettings["TargetUrl"]);

        string browserExe;
        switch (BrowserType)
        {
            case BrowserType.InternetExplorer:
                browserExe = "*iexplore";
                break;
            case BrowserType.Firefox:
                browserExe = "*firefox";
                break;

            default:
                throw new NotSupportedException ();
        }

        selenium = new DefaultSelenium (testMachine, seleniumPort, browserExe, browserUrl);
        selenium.Start ();

        System.Console.WriteLine ("Started Selenium session (browser type={0})",
            browserType);

        // sets the speed of execution of GUI commands
        if (false == String.IsNullOrEmpty (seleniumSpeed))
            selenium.SetSpeed (seleniumSpeed);
    }

Затем я просто предоставляю организатору теста конфиг. файл:

1 голос
/ 27 октября 2008

Спасибо за ответы.

Переменные среды могут работать, однако мы можем запускать параллельные тесты через одну сборку тестов, поэтому я не хочу, чтобы настройки перезаписывались во время выполнения, что могло бы нарушить другой тест. Интересная мысль, хотя, спасибо, думаю, я мог бы использовать это в других областях.

Мое текущее решение включает в себя создание пользовательской задачи NAnt поверх задачи MbUnit, которая позволяет мне указать дополнительные параметры хоста, порта, URL-адреса в качестве атрибутов. Затем они сохраняются в виде файла конфигурации в каталоге сборки, а затем считываются тестовыми сборками. Это кажется мне немного неуклюжим, поскольку мои тесты должны наследоваться от определенного класса. Не так уж и плохо, но я бы хотел иметь меньше зависимостей и сосредоточиться на тестировании.

Может быть, я слишком волнуюсь !!

0 голосов
/ 27 октября 2008

Для MSBuild я использую переменные среды, я создаю их в своем конфиге CC.NET, тогда они будут доступны в скрипте. Я думаю, что это будет работать для вас тоже.

0 голосов
/ 27 октября 2008

Каждый раз, когда мне нужно интегрироваться с внешней сущностью, используя NAnt, я либо заканчиваю тем, что использую exec task , либо пишу custom task . Учитывая информацию, которую вы разместили, может показаться, что написание вашей собственной статьи действительно будет хорошим решением, однако вы утверждаете, что вам это не нравится. Не могли бы вы немного рассказать, почему вы не думаете, что текущее решение является элегантным одним?

Обновление

Не зная внутренних деталей, кажется, что вы решили ее довольно хорошо с помощью пользовательской задачи. Из того, что я слышал, я так и сделал.

Возможно, новое решение проявит себя вовремя, но пока будьте легки к себе!

...