Как стать автором
Обновить

Java: Тестирование страниц ВебПриложений при помощи JWebUnit и Cargo Container

Время на прочтение 4 мин
Количество просмотров 4.4K
В бытность мою j2ee программистом, приходилось разрабатывать сайты с достаточно большим количеством страниц, использующие для визуализации ajax и прочие красивости. Контроллеры можно было протестировать при помощи JUnit и моковых запросов\ответов. Но для огромного количества ftl шаблонов и их JavaScript кода такой вариант не подходил.



Отличной возможностью протестировать страницы по настоящему является JWebUnit. После добавления его в проект вам будет доступен класс WebTestCase являющийся наследником TestCase из классического Junit.

Класс WebTestCase предоставляет высокоуровневое API для работы с вебстраницами, описывать его просто бессмысленно из-за запредельной простоты, поэтому просто приведу пример кода с главной страницы:

public class ExampleWebTestCase extends WebTestCase {
    public void setUp() {
        super.setUp();
        setBaseUrl(«localhost:8080/test»);
    }
 
    public void test1() {
        beginAt("/home");
        clickLink(«login»);
        assertTitleEquals(«Login»);
        setTextField(«username»«test»);
        setTextField(«password»«test123»);
        submit();
        assertTitleEquals(«Welcome, test!»);
    }
}
 


Теперь неплохо бы было научится запускать вебсервер перед выполнением пачки тестов,
а ещё лучше запускать его на сервере в задаче например для Аnt, перед сборкой, и прогонять тесты там, чтобы не сломать продакшн версию, в случае коммита на скорую руку. В этом нам поможет Cargo Conatiner, это Java API помогающее нам руководить ВебСервером из Java кода или прямо из задачи Ant. По традиции приведу оба сценария использования, которые можно найти на сайте разработчика:

Выполняем код руками

Deployable war = new WAR(«path/to/simple.war»);
 
LocalConfiguration configuration =
    new Resin3xStandaloneLocalConfiguration(«target/myresin3x»);
configuration.addDeployable(war);
 
InstalledLocalContainer container =
    new Resin3xInstalledLocalContainer(configuration);
container.setHome(«c:/apps/resin-3.0.18»);
 
container.start();
// Here you are assured the container is started.
 
container.stop();
// Here you are assured the container is stopped.
 


Запускаем в ant таске (Maven 1,Maven 2 )

  • tomcat.home – Домашняя папка томката
  • tomcatlog.dir – Логи
  • tomcatconfig.dir – Папка куда конейтенр сгенерит логи
  • pathtowarfile – Полный путь к war файлу


<property name="cargolib.dir" value="${basedir}/cargolib"/>
<property name="cargo-uberjar" value="${cargolib.dir}/cargo-core-uberjar-0.7.jar"/>
<property name="cargo-antjar" value="${cargolib.dir}/cargo-ant-0.7.jar"/>
 
<taskdef resource="cargo.tasks">
  <classpath>
    <pathelement location="${cargo-uberjar}"/>
    <pathelement location="${cargo-antjar}"/>
  </classpath>
</taskdef>
 
<target name="cargostart" depends="war">
  <delete dir="${tomcatconfig.dir}" />
  <mkdir dir="${tomcatlog.dir}"/>
  <mkdir dir="${tomcatconfig.dir}"/>
  <echo message="Starting Cargo..."/>
  <echo message="Using tomcat.home = ${tomcat.home} "/>
  <echo message="Using war = ${mywarfile} "/>
  <echo message="Jars used = ${cargo-uberjar} , ${cargo-antjar}"/>
 
  <cargo containerId="tomcat5x" home="${tomcat.home}" output="${tomcatlog.dir}/output.log" 
      log="${tomcatlog.dir}/cargo.log" action="start">
    <configuration home="${tomcatconfig.dir}">
      <property name="cargo.servlet.port" value="8080"/>
      <property name="cargo.logging" value="high"/>
      <deployable type="war" file="${mywarfile}"/>
    </configuration>
  </cargo>
 <!-- тут можно делать всякое, например тесты -->
 <!-- тормозить сервер надо тем же способом, только action указать другой -->
</target>
 
Теги:
Хабы:
+10
Комментарии 9
Комментарии Комментарии 9

Публикации

Истории

Работа

Java разработчик
359 вакансий

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн