Запустите seleniumRC из Фитнеса - PullRequest
       17

Запустите seleniumRC из Фитнеса

1 голос
/ 19 сентября 2008

Я пытаюсь интегрировать запущенные тесты Fitnesse от MSBuild im my nightly build на TFS.

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

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

Ответы [ 3 ]

1 голос
/ 19 сентября 2008

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

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

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

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

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

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

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

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

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

Удачи,

Martin.

1 голос
/ 23 сентября 2008

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

Так я и сделал до сих пор.

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

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

| RunCommandFixture |

| Commandline | RunCommand |

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

и SuiteTearDown, как это

| RunCommandFixture |

| ProcessID | StopCommand? | | <

Это работает для меня. Никакой селен RC не запускается по запросу из моего теста на пригодность.

0 голосов
/ 19 сентября 2008

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

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

...