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

в 14:04, , рубрики: acceptance testing, java, qa, tdd, тестирование, метки:
Расскажу про небольшой 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

И получим вот такой отчет:
Приемочное тестирование с Thusidides
Приемочное тестирование с ThusididesПриемочное тестирование с Thusidides

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

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

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

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

Автор: Restore

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js