NAnt, MbUnit, CruiseControl, Selenium - передача настроек в тестовую сборку

StackOverflow https://stackoverflow.com/questions/240263

Вопрос

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

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

Update

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top