FitNesse with Maven

Доброго времени суток.

Вот и завершилась, как уже кажется, безконечная череда праздников и все возвращается на “круги своя”. И как было обещано в предыдущем посте, в этот раз я поделюсь небольшими навыками с интеграции FitNesse в Maven build  lifecycle.

На первый взгляд, мне так тоже казалось, что тут нет ничего сложного и все уже есть. Проштудировав документацию + internet на предмет наличия интеграции FitNesse с Maven, я кое что нашел. Тут доступен fitnesse-maven-plugin plugin для Maven, который должен обеспечить вас возможностью выполнять ваши FitNesse тесты и создавать репорты. Но что бы выполнить тесты, FitNesse сервер должен быть запущен. Для этих целей я подходящего ничего не нашел, к тому же это все должно происходить во время выполнения билда.

Для запуска FitNesse сервера я написал plugin для Maven, исходники можно найти тут.  Далее привожу пример конфигурации плагина:

<plugin>
	<groupId>name.webdizz</groupId>
	<artifactId>maven-fitnesse-server</artifactId>
        <version>0.0.1-SNAPSHOT</version>
	<executions>
		<execution>
			<phase>pre-integration-test</phase>
			<id>start-fitnesse-server</id>
			<goals>
				<goal>start-server</goal>
			</goals>
			<configuration>
				<background>true</background>
				<port>9292</port>
				<baseDir>${basedir}/src/test</baseDir>
				<root>fitnesse</root>
				<omitUpdates>true</omitUpdates>
			</configuration>
		</execution>
	</executions>
	<dependencies>
		<dependency>
			<groupId>org.fitnesse</groupId>
			<artifactId>fitnesse</artifactId>
			<version>20091121</version>
		</dependency>
		<dependency>
			<!-- Тут идут ваши зависимости - т.е. фитнесс-тесты -->
		</dependency>
	</dependencies>
</plugin>

Запуск сервера настроен на pre-integration-test фазу, так как сами тесты выполняются в integration-test фазе.

Со стартом мы определились, теперь же нужно разобраться с запуском непосредственно тестов. Привожу свою конфигурацию плагина для выполнения тестов.

<plugin>
	<groupId>org.codehaus.mojo</groupId>
	<artifactId>fitnesse-maven-plugin</artifactId>
        <version>1.0-custom</version>
	<configuration>
		<classPathProvider>maven</classPathProvider>
		<!-- FitNesse servers list -->
		<fitnesses>
			<fitnesse>
				<hostName>localhost</hostName>
				<port>9292</port>
				<!-- The should be a suite to run all tests -->
				<pageName>FitNesse.UserGuide.SlIm.ScriptTable</pageName>
				<type>test</type>
			</fitnesse>
		</fitnesses>
	</configuration>
	<executions>
		<execution>
			<id>integration-test-fitnesse</id>
			<phase>integration-test</phase>
			<goals>
				<goal>run</goal>
			</goals>
		</execution>
	</executions>
</plugin>

Но на этапе запуска возникла проблема с выполнением тестов. Как оказалось fitnesse-maven-plugin немного устарел – последнее обновление было аж “04/06/2008” и запуск тестов валился с ошибкой неверных коммандных атрибутов. Проблема была с параметром “-html” – версия FitNesse, которую я использовал, уже не поддерживала такой аттрибут. Пришлось править код – заменил этот “-html” на “-xml” – заработало :).

На этом мне еще не удалось выполнить тест, так как появилась новая проблема – результат выполнения тестов сохранялся в виде XML, плагин же ожидает его в HTML. В итоге пришлось еще немного допилить пару классов, как результат – все заработало. Модифицированные исходники можно взять отсюда.

Теперь, используя стандартную команду

mvn clean install

будет стартовать FitNesse сервер и выполняться тесты.

На этом все, спасибо за внимание и удачного тестирования…

2 thoughts on “FitNesse with Maven

  1. Добрый день.
    Скажите, пожалуйста, как вы настраивали classpath для fitness сервера(как указать maven repository фитнесу?)? И какой dependency использовали в pom-е(немогу в глобальных репозиториях найти артефакта для fitness)?

  2. Добрый день.
    Classpath нужно задавать в команде запуска, на сколько мне помнится это делает плагин. Скачайте исходники, представленные в статье там должно быть все.
    Артефакт заливался в локальный репозиторий. Хорошая практика иметь свой репозиторий, котрый проксрует все внешние. Таким образом у вас всегда все под рукой.

Leave a Reply

Your email address will not be published. Required fields are marked *