19
QA meetup #4 Дело тестера боится: как в опытных руках могут заиграть Java и TestNg Вячеслав Марков, QA engineer at Weezlabs

Дело тестера боится: как в опытных руках могут заиграть Java и TestNg

  • Upload
    it61

  • View
    232

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Дело тестера боится: как в опытных руках могут заиграть Java и TestNg

QA meetup #4

Дело тестера боится: как в

опытных руках могут заиграть

Java и TestNg

Вячеслав Марков, QA engineer at Weezlabs

Page 2: Дело тестера боится: как в опытных руках могут заиграть Java и TestNg

Что нужно проверять при

функциональном тестировании

REST API?

Статус-коды ответа при

различных входных данных

Корректность возвращаемых

данных

Корректность логики работы

Page 3: Дело тестера боится: как в опытных руках могут заиграть Java и TestNg

TestNG TestNG (Next generation) – тестовый фреймворк для написания автотестов на языке Java.

Unit-тестирование

Функциональное тестирование

End-to-End тесты

Интеграционное тестирование

И это далеко не всё!

Page 4: Дело тестера боится: как в опытных руках могут заиграть Java и TestNg

+- before suite/

+- before group/

+- before test/

+- before class/

+- before method/

+- test/

+- after method/

...

+- after class/

...

+- after test/

...

+- after group/

...

+- after suite/

Как это работает?

TestNG использует иерархический механизм before- и after- аннотаций для конфигурирования тестов

Page 5: Дело тестера боится: как в опытных руках могут заиграть Java и TestNg

Что можно протестировать с помощью TestNG?

Выполнить функциональные тесты

Провести регрессионное тестирование

Организовать Continuous Integration

Для чего TestNG подходит не так хорошо?

Нагрузочное тестирование

Page 6: Дело тестера боится: как в опытных руках могут заиграть Java и TestNg

Data-Driven Testing (DDT)

Большие наборы тестовых данных Много данных — один код Лёгкое добавление тестовых данных

Data-Driven Testing - подход к написанию тестов, позволяющий разнести тестовый код и тестовые данные.

Page 7: Дело тестера боится: как в опытных руках могут заиграть Java и TestNg

Преимущества DDT

Лёгкость изменения и добавления тестовых данных Тест управляется входными данными Отлично подходит для позитивного и негативного тестирования REST API

Page 8: Дело тестера боится: как в опытных руках могут заиграть Java и TestNg

Недостатки DDT

Не всегда удобно для проверки эйдж-кейсов Усложняется код теста

Page 9: Дело тестера боится: как в опытных руках могут заиграть Java и TestNg

Data-Provider в TestNG • В TestNG реализовать DDT- подход позволяет механизм Data-Provider,

последовательно предоставляющий тестовому методу элементы набора тестовых данных

• Наборы тестовых данных мы храним в JSON-файлах в виде массивов • В коде теста необходимо описать метод с аннотацией

@DataProvider

@DataProvider(name = "ddtSet")

public Object[][] ddtSet(ITestContext context) throws IOException, URISyntaxException {

String jsonDdtFile = context.getCurrentXmlTest().getParameter("jsonDdtFile");

URL resourceUrl = getClass().getResource(DDT_DATA_PATH+jsonDdtFile);

ArrayList<userSet> userSetArrayList = new ArrayList<userSet>();

userSetArrayList = mapper.readValue(new File(resourceUrl.getFile()),

new TypeReference<ArrayList<userSet>>() {});

Object[][] objectArray = new Object[userSetArrayList.size()][];

for(int i=0;i<userSetArrayList.size();i++){

objectArray[i] = new Object[] {userSetArrayList.get(i)};

}

return objectArray; }

@Test(dataProvider = "ddtSet", description = "Perform single charge")

public void postSingleCharge(userSet testSet)

Page 10: Дело тестера боится: как в опытных руках могут заиграть Java и TestNg

Пример используемой нами

структуры проекта TestNG

• Maven-проект • Основные элементы структуры

— модели данных (dto), служебные классы, сами тесты (stories), наборы тестовых данных (ddt), наборы тестов (suites)

Page 11: Дело тестера боится: как в опытных руках могут заиграть Java и TestNg

Библиотека Rest-Assured

Эта библиотека позволяет тестировать REST API Имеется возможность составлять REST-запросы

любой сложности https://github.com/rest-assured/rest-assured

Response response = given().

header("uid", uid).

header("client", client).

header("access-token", access_token).

header("Content-Type", "multipart/form-data").

header("Accept-Charset", "UTF-8").

multiPart((new MultiPartSpecBuilder(file)

.fileName(filename)

.controlName("origin")

.mimeType(media_type).build())).

post("attachments/image_uploader");

Page 12: Дело тестера боится: как в опытных руках могут заиграть Java и TestNg

Простой пример: тестируем API

для логина

• POST api/v1/users/sign_in

Page 13: Дело тестера боится: как в опытных руках могут заиграть Java и TestNg

Assertions. Как проверить результат

вызова API? Hard Assertions

Тест отмечается как проваленный при провале Hard

Assert

Выполнение тестового метода прекращается после

провала Hard Assert

Полезны для общих проверок верхнего уровня

Soft Assertions

Провал SoftAssert не приводит к остановке теста

Все проваленные SoftAssert выводятся после

окончания теста

Позволяют проверить множество параметров

Page 14: Дело тестера боится: как в опытных руках могут заиграть Java и TestNg

А если что-то сложнее логина?

Проверка совершения оплаты при вызове POST api/v1/payment/single_charge/

• Проверяются не только ожидаемые статус-коды • Проверяется корректность расчётов • Вызов многих REST API в одном тесте

Page 15: Дело тестера боится: как в опытных руках могут заиграть Java и TestNg

А как собрать мои тесты в тест-сьют?

• Списки выполняемых тестов собраны в xml-файлах • Каждый тест может быть легко параметризован

<test name="Sign Up">

<parameter name="runId" value="68"/>

<parameter name="jsonDdtFile" value="SignUp.json"/>

<classes>

<class name="stories.UserStory.SignUp" > </class>

</classes>

</test>

<test name="SignIn">

<parameter name="runId" value="68"/>

<parameter name="jsonDdtFile" value="SignIn.json"/>

<classes>

<class name="stories.UserStory.SignIn" > </class>

</classes>

</test>

Page 16: Дело тестера боится: как в опытных руках могут заиграть Java и TestNg

Организовываем Continious Integration

Интеграция со всеми наиболее популярными VCS (Git, SVN etc.)

Поддержка Maven Интеграция со Slack Возможность создания

гибкого расписания запуска тестов

Мы используем

Jenkins, и вот почему:

Page 17: Дело тестера боится: как в опытных руках могут заиграть Java и TestNg

Документирование результатов

• Web-система тест-менеджмента TestRail

• Поддержка интеграции с Jira • Связь с TestRail с помощью

listeners

Page 18: Дело тестера боится: как в опытных руках могут заиграть Java и TestNg

Наши вакансии в Ростове-на-Дону и

Таганроге

Project Manager Middle iOS developer

Ждём ваших резюме по адресу

[email protected]

Page 19: Дело тестера боится: как в опытных руках могут заиграть Java и TestNg

Спасибо за внимание!

Вячеслав Марков, QA Engineer at Weezlabs

[email protected]

vk.com/markov_tgn