вторник, 22 мая 2012 г.

BDD и Selenium

В данной статье пойдет речь о BDD и его применении к тестированию веб-приложений.
Ну и естественно не обойдется без нашего любимого 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

и сохраним как 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>

Теперь 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();   
}

Надеюсь все что тут написано не вызовет вопросов )))))))) Мы используем аннотации взятые из библиотеки 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 тест.

Вуаля )))) Открылся браузер, зашел на гугл, проверил заголовок и закрылся, как раз так как мы и описывали !!!!!!!





Комментариев нет:

Отправить комментарий