Вопрос

Я пытаюсь интегрировать запуск фитнес-тестов из MSBuild в свою ночную сборку на TFS.

Пытаясь сделать его автономным, я хотел бы запускать сервер seleniumRC только тогда, когда это необходимо для фитнеса.

Я видел, что есть «Приспособление командной строки», но оно написано на Java, могу ли я его использовать?

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

Решение

Я думаю, ты сможешь.Вы можете легко вызвать любой процесс в MSBuild, используя команду задача.Однако проблема заключается в том, что задача exec будет ждать завершения процесса Selinium, прежде чем продолжить, а это не то поведение, которое вам нужно.Вы хотите запустить процесс, поддерживать его работу во время сборки, а затем завершить его по завершении сборки.

Поэтому я думаю, что для этого вам, вероятно, понадобится создать специальную задачу MSBuild.В следующем сообщении приведен пример созданных кем-то задач, которые будут выполняться асинхронно, возвращая управление обратно сценарию сборки:

http://blog.eleutian.com/2007/03/01/AsyncExecMsBuildTask.aspx

А для примера вызова Java-программы из MSBuild (но в данном случае синхронно) взгляните на мою задачу, которая вызывает Муравей из MSBuild здесь

http://teamprise.com/products/build/

В рамках задачи MSBuild вам потребуется вывести идентификатор процесса, который вы создали, в выходное свойство, чтобы в конце сценария сборки вы могли вызвать другую пользовательскую задачу MSBuild, которая уничтожит процесс.Это можно сделать, найдя идентификатор процесса, переданный в качестве переменной в MSBuild, а затем вызвав Процесс.Убить метод, т.е.

Process process = Process.GetProcessById(ProcessId);
process.Kill();

Тем не менее, вам нужно быть осторожным, чтобы гарантировать, что ваша задача уничтожения всегда выполнялась в MSBuild, убедившись, что она была включена в пути ошибок и т. д. в сборку.Вероятно, вы могли бы сделать ситуацию немного более устойчивой, заставив стартовую задачу selenium RC искать другие процессы seleniumRC и убивая их перед запуском нового - таким образом, если процесс по какой-то причине не закрылся должным образом, он будет работать только до тех пор, пока следующая сборка.

В любом случае, мой ответ звучит как большая работа, поэтому, надеюсь, кто-то другой придумает более простой способ.Возможно, вы сможете создать процесс seleniumRC в наборе тестов, запуская тесты FitNesse и завершая его при разборе набора, или вы можете написать специальную задачу, которая расширяет ваши задачи запуска FitNesse и асинхронно запускает seleiniumRC перед запускает тестовый процесс, а затем убивает его.

Удачи,

Мартин.

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

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

Вот как я это делал до сих пор.

Я сделал приспособление (очень простое), которое запускает процесс с помощью предоставленной командной строки, в моем случае startSelenium.bat.Устройство возвращает ProcessID, поэтому я могу сохранить его в своем фитнес-контексте и закрыть этот сеанс позже.

Теперь я могу создать страницу SuiteSetUp в своем фитнес-тесте, которая выглядит вот так.

|ВыполнитьCommandFixture|

|Командная строка|Выполнитькоманду?|

|C:\Projects...\startSeleniumRC.bat|>>seleniumprocess|

и SuiteTearDown вот так

|ВыполнитьCommandFixture|

| ProcessId | StopCommand? | |

Это подходит для меня.Ни один Selenium RC не запускается по запросу моего фитнес-теста.

А как насчет написания простого .NET-приложения, которое выполняет Process.Start("selenumRC Commandline"), который запускается вашим сценарием сборки?

Если вы не слишком далеко продвинулись по пути Selenium;могу ли я предложить вам взглянуть на аналогичные инструменты автоматизации браузера .NET;в частности WatiN или ArtOfTest.«Стеки» в них полностью созданы на основе .NET, поэтому их запуск на разных машинах намного проще.

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