Приемочное тестирование с Thusidides

от автора

Расскажу про небольшой Framework на Selenium.

Наверное, все таки большинство из нас пользуется Selenium WD и знает, что самое слабое место у него — это отчеты(честно говоря их вообще нет).Для репортинга в основном используются или плагины, или отчеты с Junit или TestNG(если это Java).
Так вот Thusidides призван внести в разработку тестов не только некоторые улучшения, но самое главное хорошие отчеты.

Немного истории.

Thusidides переводится как Фукиди́д, был древнегреческим историком и полководцем, который во время Пелопоннесской войны прославился именно качественными репортами, отсюда и название этого фреймворка.
История закончилась, перейдем к делу.

Подключение Thusidides

Для начала, чтобы подключить его к нашему проекту, добавим в Maven следующее:

<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">   <modelversion>4.0.0</modelversion>     <groupid>com.wakaleo.webtests.wikipedia</groupid>   <artifactid>wikipediawebtests</artifactid>   <version>1.0-SNAPSHOT</version>   <packaging>jar</packaging>     <name>wikipediawebtests</name>   <url>http://maven.apache.org</url>       <properties>         <project .build.sourceencoding="">UTF-8</project>         <thucydides .version="">0.9.88</thucydides>     </properties>       <dependencies>         <dependency>             <groupid>junit</groupid>             <artifactid>junit</artifactid>             <version>4.8.2</version>         </dependency>         <dependency>             <groupid>org.hamcrest</groupid>             <artifactid>hamcrest-all</artifactid>             <version>1.1</version>         </dependency>         <dependency>             <groupid>net.thucydides</groupid>             <artifactid>thucydides-junit</artifactid>             <version>${thucydides.version}</version>         </dependency>         <dependency>             <groupid>org.slf4j</groupid>             <artifactid>slf4j-simple</artifactid>             <version>1.6.1</version>             <type>pom</type>         </dependency>     </dependencies>     <build>         <plugins>             <plugin>                 <groupid>org.apache.maven.plugins</groupid>                 <artifactid>maven-compiler-plugin</artifactid>                 <version>2.3.2</version>                 <configuration>                     <source>1.5                     <target>1.5</target>                 </configuration>             </plugin>             <plugin>                 <groupid>net.thucydides.maven.plugins</groupid>                 <artifactid>maven-thucydides-plugin</artifactid>                 <version>${thucydides.version}</version>             </plugin>         </plugins>     </build> </project>           

Все, после добавления в проект начнем разбираться, как он нам предлагает структурировать наши тесты.
Вообще он больше рассчитан на приемочные тесты.Вы это сами заметите при работе с ним.

Немного про иерархию тестов в Thusidides:

  • Главный класс приложения, где описываются требования, фичи и все что планируется сделать.
  • Класс с тестами проверяющими наши требования или фичи.
  • Класс с шагами тестирования реализующий ScenarioSteps.(т.к. каждый тест на Selenium WD, так или иначе, состоит из шагов)
  • Класс реализующий все эти шаги через WD+PageObject.

Создается общий класс для требований, фич и.т.д.

package requirements; import net.thucydides.core.annotations.Feature; public class Application {     @Feature         public class TestPageBook {}         public class TestAuth{} }

Как мы видим, в одной фиче может быть несколько классов и конечно может быть несколько фич.
После этого создается тест, на необходимый класс.

@RunWith(ThucydidesRunner.class) @Story(Application.TestPageBook.class) //Указываем Story для тестов относительно нее  будет сформирован отчет public class TestPageBook {       @Managed     public WebDriver driver;       @ManagedPages(defaultUrl = "http://m.megafonpro.ru/")     public Pages pages;       @Steps     public StepsinBook book;       @Test     public void testBook() throws Exception {         book.getMain("http://m.megafonpro.ru/");   //Вход на главную страницу тестируемого ресурса         book.AllBooks();                   //Переход во вкладку Все книги              book.search();                         //Поиск книги с поисковым выражением "Книга         book.catalog();                      //Проверка каталога книг по жанрам       }     @Pending @Test              //данная аннотация значит,что тест еще не имплементирован     public void testBuyBook(){}   }

Далее описываются шаги самого теста(аннотация steps)

public class StepsinBook extends ScenarioSteps {     public StepsinBook(Pages pages) {         super(pages);     }     public BookPage getPageBook()     {         return  getPages().currentPageAt(BookPage.class);     }      @Step     public void getMain(String url)     {         getPageBook().getMainPage(url);     }      @Step     public void AllBooks()     {         getPageBook().allBooks();     }      @Step     public void search(){         getPageBook().search("Книга");     }     @Step     public void catalog(){         getPageBook().catalog();     } }

И привычная нам работа с WD с PageObject.

public class BookPage extends PageObject {     @FindBy(linkText = "Все книги")     WebElement allbooksButton;      @FindBy(linkText = "Поиск")     WebElement searchButton;      @FindBy(name = "query")     WebElement searchField;      @FindBy(css = "button")     WebElement searchBegin;          public BookPage(WebDriver driver) {         super(driver);     }      public void getMainPage(String url) {         getDriver().get(url);      }      public void allBooks() {          allbooksButton.click();     }      public void search(String searchWord) {         searchButton.click();         searchField.sendKeys(searchWord);         searchBegin.click();      }  }

Далее в запускаем через maven

mvn test thucydides:aggregate

И получим вот такой отчет:

И немного об удобностях:

Для выбора браузера запускаем сборку Maven с опцией:
-Dwebdriver.driver=chrome
А для параллельного запуска тестов, используем сигнатуры перед классом

@RunWith(ThucydidesParameterizedRunner.class) @Concurrent(threads="3") 

На этом все, всем спасибо.

ссылка на оригинал статьи http://habrahabr.ru/post/167941/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *