Thusidides Selenium
Расскажу про небольшой Framework на Selenium.
Наверное все таки большинство из нас пользуется Selenium WD и знает что наверное самое слабое место у него-это отчеты(вообще говоря их вообще нет),для репортинга в основном используются или плагины или отчеты с Junit или TestNG(если это Java).
Так вот Thsidides призван внести в разработку тестов не только некоторые улучшения,но самое главное хорошие отчеты.
Немного истории!(надо ж как то разнообразить рассказ)
Thusidides переводится как Фукиди́д,был древнегреческим историком,который прославился именно качественными репортами,отсюда и название этого фреймворка.
История закончилась,перейдем к делу.
Тесты набрасывались для примера и чтобы просто показать принцип,естественно они не поддерживаемые и все такое.
Тесты набрасывались для примера и чтобы просто показать принцип,естественно они не поддерживаемые и все такое.
Для начала,чтобы подключить его к нашему проекту,добавим в Maven следующее:
4.0.0 webtests tests 1.0-SNAPSHOT jar wikipediawebtests http://maven.apache.org UTF-8 0.9.88 junit junit 4.8.2 org.hamcrest hamcrest-all 1.1 net.thucydides thucydides-junit ${thucydides.version} org.slf4j slf4j-simple 1.6.1 pom org.apache.maven.plugins maven-compiler-plugin 2.3.2 1.5 1.5 net.thucydides.maven.plugins maven-thucydides-plugin ${thucydides.version}
Все после добавления в проект,начнем разбираться как он нам предлагает структурировать наши тесты.
Вообще он больше рассчитан на приемочные тесты.Вы это сами заметите.
Создается общий класс для требований,фич и.т.д.
public class Application { @Feature public class TestPageBook {} public class TestAuth{} public class TestSearch{} }Как мы видим,в одной фиче может быть несколько классов и конечно может быть несколько фич.
После этого создается класс с тестом
@RunWith(ThucydidesRunner.class) @Story(Application.TestPageBook.class) 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.
package Actions; public class BookPage extends PageObject { private ShareFunc func; @FindBy(linkText = "Все книги") WebElement allbooksButton; @FindBy(linkText = "Поиск") WebElement searchButton; @FindBy(name = "query") WebElement searchField; @FindBy(css = "button") WebElement searchBegin; @FindBy(linkText = "Большая книга кремлевских тайн.") WebElement searchBook; @FindBy(linkText = "Каталог") WebElement catalog; @FindBy(linkText = "Малая форма") WebElement littleForm; @FindBy(linkText = "Повести") WebElement story; @FindBy(linkText = "Всего лишь капелька яда") WebElement oneOfStories; public BookPage(WebDriver driver) { super(driver); func=new ShareFunc(driver); } public void getMainPage(String url) { getDriver().get(url); } public void allBooks() { func.safeClick(allbooksButton); } public void search(String searchWord) { func.safeClick(searchButton); func.sendKeys(searchField, searchWord); func.safeClick(searchBegin); func.safeClick(searchBook); } public void catalog() { func.safeClick(catalog,getDriver()); assertEquals("КАТАЛОГ",findElement(By.cssSelector("div.title > strong")).getText()); func.safeClick(littleForm); assertEquals("МАЛАЯ ФОРМА",findElement(By.cssSelector("div.title > strong")).getText()); func.safeClick(story, getDriver()); assertEquals("МАЛАЯ ФОРМА - ПОВЕСТИ",findElement(By.cssSelector("div.title > strong")).getText()); func.safeClick(oneOfStories); assertTrue(getPageSource().contains("Марина Серова")); } }Иерархия тестов примерно такая,сначала мне не понравилась,но если с ней поработать,то весьма удобно.
Далее в запускаем через maven
mvn test thucydides:aggregate
И он нам забацает вот такой отчет.
Немного о более тонкой настройке:
Для выбора запуска браузера запускаем Maven с опцией:
-Dwebdriver.driver=chrome
А для параллельного запсука тестов например используем сигнатуры перед классом с тестами
@RunWith(ThucydidesParameterizedRunner.class)
@Concurrent(threads="3")
команда "R" благодарна тебе!
ОтветитьУдалитьа есть какой-нибудь archetype для сусидис+вебдрайвер? чтобюы получилась структура с примерами? )
ОтветитьУдалитьКонечно есть.
ОтветитьУдалитьЕсть 2 для easyb и junit
Например вот так это выглядит:
net.thusidides:thusidides-simple-archetype
или
net.thusidides:thusidides-easyb-archetype