Расскажу про небольшой 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")
На этом все, всем спасибо.
Автор: Restore