Я пытаюсь интегрировать запуск тестов Fitnesse из MSBuild в мою ночную сборку на TFS.
В попытке сделать его самодостаточным, я хотел бы запускать сервер seleniumRC только тогда, когда это необходимо из фитнеса.
Я видел, что есть "Fixture Command Line", но он написан на java, могу ли я его использовать?

А как насчет написания простого .NET-приложения, которое выполняет Process.Start ("командную строку selenumRC"), которое запускается вашим сценарием сборки?
Если вы не слишком далеко по пути Selenium; Могу я предложить вам взглянуть на аналогичные инструменты автоматизации браузера .NET; в частности WatiN или ArtOfTest. Эти «стеки» полностью принадлежат .NET, поэтому гораздо проще запустить их на разных машинах.
I think you might be able to. You can call any process easily in MSBuild using the задача. Однако проблема заключается в том, что задача exec будет ждать завершения процесса Selinium, прежде чем продолжить, что не является желаемым поведением. Вы хотите запустить процесс, оставить его работающим во время сборки, а затем прервать его по завершении сборки.
Поэтому я думаю, что для этого вам, вероятно, потребуется создать специальную задачу MSBuild. См. Следующий пост для примера созданных кем-то задач, которые будут запускаться асинхронно, возвращая управление обратно сценарию сборки:
http://blog.eleutian.com/2007/03/01/AsyncExecMsBuildTask.aspx
А для примера вызова Java-программы из MSBuild (но в данном случае синхронно) взгляните на мою задачу, которая вызывает Муравей из MSBuild здесь
http://teamprise.com/products/build/
В рамках задачи MSBuild вы захотите вывести созданный вами идентификатор процесса в свойство вывода, чтобы в конце сценария сборки вы могли вызвать другую настраиваемую задачу MSBuild, которая завершает процесс. Это может быть сделано путем поиска идентификатора процесса, переданного в качестве переменной в MSBuild, а затем вызова метода Process.Kill, т.е.
Process process = Process.GetProcessById(ProcessId);
process.Kill();
Тем не менее, вам нужно быть осторожным, чтобы убедиться, что ваша задача уничтожения всегда выполнялась в MSBuild, убедившись, что она была включена в пути ошибок и т. д. В сборке. Вероятно, вы могли бы сделать вещи более устойчивыми, заставив стартовую задачу selenium RC искать другие процессы seleniumRC и уничтожать их перед запуском нового - таким образом, если процесс по какой-то причине не был закрыт должным образом, он будет работать только до тех пор, пока следующая сборка.
В любом случае, мой ответ звучит как большая работа, поэтому, надеюсь, кто-то другой найдет более простой способ. Возможно, вы сможете создать процесс seleniumRC в тестовом наборе, запускающем тесты FitNesse, и убить его при разрыве набора, или вы можете написать настраиваемую задачу, которая расширяет ваши задачи бегуна FitNesse и запускает seleiniumRC асинхронно перед запускает тестовый процесс, а затем убивает его.
Удачи,
Мартин.
Спасибо за ответы!
Вот как я поступал до сих пор.
Я сделал приспособление (очень простое), которое запускает процесс с предоставленной командной строкой, в моем случае startSelenium.bat. Прибор возвращает ProcessID, чтобы я мог сохранить его в моем фитнес-контексте и закрыть этот сеанс позже.
Теперь я могу сделать страницу SuiteSetUp в моем фитнес-тесте, которая выглядит следующим образом.
| RunCommandFixture |
| Командная строка | RunCommand? |
| C: \ Projects ... \ startSeleniumRC.bat | >> seleniumprocess |
и такой SuiteTearDown
| RunCommandFixture |
| ProcessID | StopCommand? | | <
Это подходит для меня. Никакой селен RC не запускается по просьбе моего фитнес-теста.