В данной статье пойдет речь о BDD и его применении к тестированию веб-приложений.
Ну и естественно не обойдется без нашего любимого Selenium.
Надеюсь все что тут написано не вызовет вопросов )))))))) Мы используем аннотации взятые из библиотеки jbehave и говорим с какими фразами из файла .story они должны совпадать.
Слова со знаком $ это переменные, имя переменной должно совпадать с именем параметра в аннотированном методе.
Теперь самое интересное:
Каким способом это все запустить ???????????????????
Для этого напишем еще один класс BehaveExample (название не случайное ).
public class BehaveExample extends JUnitStory {
@Override
public Configuration configuration() {
return new MostUsefulConfiguration()
// Ишем истории в Classpath
.useStoryLoader(new LoadFromClasspath(this.getClass()))
// Вывод в консоль и текстовый файл
.useStoryReporterBuilder(new StoryReporterBuilder().withDefaultFormats().withFormats(Format.CONSOLE, Format.TXT));
}
// Тут опишем наши классы с описанием шагов
@Override
public InjectableStepsFactory stepsFactory() {
return new InstanceStepsFactory(configuration(), new BehaveTests());
}
}
для запуска уже почти все готово. Теперь положим наш файл истории рядом с файлом BehaveExample.java. Запустим BehaveExample.java как JUnit тест.
Вуаля )))) Открылся браузер, зашел на гугл, проверил заголовок и закрылся, как раз так как мы и описывали !!!!!!!
Ну и естественно не обойдется без нашего любимого Selenium.
ЧАСТЬ ПЕРВАЯ
Что такое BDD ? Если в двух словах BDD это подход к тестированию и разработке с использованием пользовательских сценариев, как основы для тестов. Данный подход призван сократить расстояние между аналитиками, разработчиками и тестировщиками.
Мы будем рассматривать библиотеку JBehave.
Как выглядит сценарий тестирования на JBehave ? Это файл с расширением .story и примерно следующего содержания:
Scenario
: trader is not alerted below threshold
Given
a stock of symbol STK1 and a threshold of 10.0
When
the stock is traded at 5.0
Then
the alert status should be OFF
Scenario
: trader is alerted above threshold
Given
a stock of symbol STK1 and a threshold of 10.0
When
the stock is traded at 11.0
Then
the alert status should be ON
Судя по виду не сложно. Сценарии в таком виде позволяют описывать use-кейсы вполне человеческим языком.
Все предложения в файле должны начинаться со слов Given Then и When.
Предположим мы решили написать для примера небольшую историю для проверки открытия сайта и проверки его заголовка.
Напишем что-то вроде
Given site http://www.google.com
When title is Google
Then close
When title is Google
Then close
и сохраним как behave_example.story
История использования у нас уже есть, теперь перейдем к реализации кода, который скажет браузеру что с этой историей делать.
ЧАСТЬ ВТОРАЯ
Создадим в Eclipse maven-проект. Назовем его JBehaveProj. (не будем цепляться к названию, это только для примера).
В pom.xml в секции dependency запишем следующее
<dependencies>
<dependency>
<groupId>org.jbehave</groupId>
<artifactId>jbehave-core</artifactId>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jbehave</groupId>
<artifactId>jbehave-core</artifactId>
<version>3.6.2</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.21.0</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>org.jbehave</groupId>
<artifactId>jbehave-core</artifactId>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jbehave</groupId>
<artifactId>jbehave-core</artifactId>
<version>3.6.2</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.21.0</version>
</dependency>
</dependencies>
</dependencyManagement>
Теперь maven подгрузит нам две библиотеки jbehave-core и selenium-java. Обе они нам понадобятся.
Теперь когда наш проект настроен напишем код.
Создадим класс BehaveTests , этот класс будет содержать имплементацию того что написано в файле .story.
public class BehaveTests {
FirefoxDriver driver = new FirefoxDriver();
@Given("site $url")
public void open(String url){
driver.get(url);
}
@When("title is $title")
public void find(String title ){
if (driver.getTitle().equals(title)){
System.out.println("Совпало");
}
else{
System.out.println("Не совпало");
}
}
@Then("close")
public void close(){
driver.close();
}
Создадим класс BehaveTests , этот класс будет содержать имплементацию того что написано в файле .story.
public class BehaveTests {
FirefoxDriver driver = new FirefoxDriver();
@Given("site $url")
public void open(String url){
driver.get(url);
}
@When("title is $title")
public void find(String title ){
if (driver.getTitle().equals(title)){
System.out.println("Совпало");
}
else{
System.out.println("Не совпало");
}
}
@Then("close")
public void close(){
driver.close();
}
Надеюсь все что тут написано не вызовет вопросов )))))))) Мы используем аннотации взятые из библиотеки jbehave и говорим с какими фразами из файла .story они должны совпадать.
Слова со знаком $ это переменные, имя переменной должно совпадать с именем параметра в аннотированном методе.
Теперь самое интересное:
Каким способом это все запустить ???????????????????
Для этого напишем еще один класс BehaveExample (название не случайное ).
public class BehaveExample extends JUnitStory {
@Override
public Configuration configuration() {
return new MostUsefulConfiguration()
// Ишем истории в Classpath
.useStoryLoader(new LoadFromClasspath(this.getClass()))
// Вывод в консоль и текстовый файл
.useStoryReporterBuilder(new StoryReporterBuilder().withDefaultFormats().withFormats(Format.CONSOLE, Format.TXT));
}
// Тут опишем наши классы с описанием шагов
@Override
public InjectableStepsFactory stepsFactory() {
return new InstanceStepsFactory(configuration(), new BehaveTests());
}
}
для запуска уже почти все готово. Теперь положим наш файл истории рядом с файлом BehaveExample.java. Запустим BehaveExample.java как JUnit тест.
Вуаля )))) Открылся браузер, зашел на гугл, проверил заголовок и закрылся, как раз так как мы и описывали !!!!!!!