Статьи

Функциональные тесты с Selenium 2.0 и Cargo-Maven-плагин

В Selenium и WebDriver проекты объединяются , чтобы создать мощную, открытые рамки источника для функциональных тестов , основанных на JavaScript , для тестирования веб — приложений и сайтов. Тесты могут быть выполнены в браузере, таком как Firefox или Chrome, или могут быть выполнены с помощью упрощенной, сверхбыстрой эмуляции браузера на основе HtmlUnit .

Если вы хотите провести несколько тестов, просто скачайте .jars и добавьте в ваш проект classpath. В этом руководстве я буду использовать Selenium и Webdriver для выполнения интеграционных тестов в жизненном цикле Maven с помощью Cargo-Maven -Plugin . Груз-Maven-плагин используются для развертывания приложений с помощью Maven. Он устанавливает контейнер и зависимости, необходимые для развертывания приложения, и может быть настроен большинством доступных контейнеров, таких как Tomcat , JBoss , Jetty (встроенный) или GlashFish . Грузопассажирские Maven-плагин

запустит контейнер и развернет приложение, после чего выполнит тесты и остановит контейнер.

Для этого примера я буду использовать проект « Modelos de Celulares », разработанный в предыдущем посте, и добавлю тесты Selenium и конфигурацию Cargo-Maven -Plugin .

Прежде всего, давайте добавим зависимость cargo-maven-plugin для запуска контейнера для выполнения тестов в жизненном цикле maven до интеграции-тестирования . После этого мы останавливаем контейнер в жизненном цикле maven после тестирования интеграции . Контейнером, использованным в этом примере, был Tomcat 6x, установленный локально и определенный в атрибуте <home> .

Необходимо было добавить еще один плагин для выполнения всех тестов при запуске контейнера. Плагин — это maven-surefire-plugin .
Посмотрите пример настройки maven-surefire-plugin и cargo-maven-plugin в файле pom.xml:

<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.0.6</version>
<configuration>
<wait>false</wait>
<!-- Container configuration -->
<container>
<type>installed</type>
<containerId>tomcat6x</containerId>
<home>${TOMCAT_HOME}</home>
</container>
</configuration>
<executions>
<execution>
<id>start-container</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>stop-container</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<!-- Skip the normal tests,
we'll run them in the integration-test phase -->
<skip>true</skip>
</configuration>
<executions>
<execution>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<skip>false</skip>
</configuration>
</execution>
</executions>
</plugin>

Следующим шагом является добавление зависимости Selenium для реализации функциональных тестов. Просто добавьте в файл pom.xml:

<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium</artifactId>
<version>2.0b2</version>
<scope>test</scope>
</dependency>

После этого давайте создадим тестовый класс. Доступ к объектному браузеру можно получить через четыре официальных драйвера: FirefoxDriver , самый зрелый драйвер, используемый в этом примере проекта; Драйвер Internet Explorer , протестированный в версиях IE6, IE7 на Windows Vista и XP и по сравнению с другими драйверами, относительно медленный. ChromeDriver , является новая версия драйвера и HtmlUnit , как легкий, супер-быстрой эмуляции браузера.

Позволяет Interac с браузером с FirefoxDriver метода класса вызова «S„findElement“с WebElement параметром и может быть восстановить, с помощью класса , как в этом методе„ tentaCadastrarSemNenhumDado () “ниже:

public void tentaCadastrarSemNenhumDado()  {
driver.get("http://localhost:8080/CadastroCelular");
driver.findElement(By.id("botaoSubmit")).click();

String mensagemErroNome = driver.findElement(By.id("mensagemErroNome")).getText();
// name required field message
Assert.assertEquals("Campo Nome Obrigatório", mensagemErroNome);

String mensagemErroDescricao = driver.findElement(By.id("mensagemErroDescricao")).getText();
// description required field message
Assert.assertEquals("Campo Descrição Obrigatório", mensagemErroDescricao);

driver.close();
}

Этот тест пытается вставить модель мобильного телефона без заполнения обязательных полей и проверяет сообщения обязательных полей.

Через К классу можно восстановить веб — элементы по ссылкам, имя, тег HTML, CSS или ярлыком ссылки. В этой версии Selenium есть аннотационный вызов @FindBy, предназначенный для очистки кода, определяющего стратегию расположения. Пример метода » tentaCadastrarSemNenhumDado () » был разработан без аннотации, и мы видим тот же метод с использованием аннотации @FindBy :

        @FindBy(id = "botaoSubmit")
private WebElement botaoSubmit;

@FindBy(id = "mensagemErroNome")
private WebElement msgErroNome;

@FindBy(id = "mensagemErroDescricao")
private WebElement msgErroDescricao;

@Test
public void tentaCadastrarSemNenhumDado() {
driver.get("http://localhost:8080/CadastroCelular");
botaoSubmit.click();
// name required field message
Assert.assertEquals("Campo Nome Obrigatório", msgErroNome.getText());
// description required field message
Assert.assertEquals("Campo Descrição Obrigatório", msgErroDescricao.getText());

driver.close();
}

Как видите, код чище и прост для понимания. Настройка и внедрение функциональных тестов настолько просты, что у вас нет причин не делать этого.
Хорошее кодирование.

Извините за мой английский . Если у вас есть какие-либо вопросы, свяжитесь со мной .