Расскажу про небольшой 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/
Добавить комментарий