Найти в Дзене
QA Way - QA Automation

Использование параметризации в автотестах.

Привет. Пост навеян одним из ревью кода автотестов коллег, которые мне по работе периодически приходится делать. Недавно в очередной раз столкнулся с одной из ошибок в написании автотестов. Хотя она кажется довольно очевидной, неопытные тестировщики её периодически допускают. Давайте рассмотрим эту ошибку на примере. Оригинальный код показать не могу, но постарался максимально полно перенести этот кейс на демонстрационный API. В этом примере мы проверяем создание питомца с разными статусами в демонстрационном API https://petstore.swagger.io. У нас есть три автотеста: checkPetAvailable(), checkPetPending() и checkPetSold(). В каждом из тестов мы проверяем создание питомца с определённым статусом. Сначала создаем переменные с начальными данными — имя (name) и статус (status) питомца. Затем, с помощью метода createPet(), создаем питомца. Далее, с помощью метода checkPet(), проверяем данные о созданном питомце с использованными при создании. Проблема здесь в том, что логика подготовки данн
Оглавление

Привет. Пост навеян одним из ревью кода автотестов коллег, которые мне по работе периодически приходится делать. Недавно в очередной раз столкнулся с одной из ошибок в написании автотестов. Хотя она кажется довольно очевидной, неопытные тестировщики её периодически допускают.

Давайте рассмотрим эту ошибку на примере. Оригинальный код показать не могу, но постарался максимально полно перенести этот кейс на демонстрационный API.

Исходный код автотеста
Исходный код автотеста

В этом примере мы проверяем создание питомца с разными статусами в демонстрационном API https://petstore.swagger.io. У нас есть три автотеста: checkPetAvailable(), checkPetPending() и checkPetSold(). В каждом из тестов мы проверяем создание питомца с определённым статусом. Сначала создаем переменные с начальными данными — имя (name) и статус (status) питомца. Затем, с помощью метода createPet(), создаем питомца. Далее, с помощью метода checkPet(), проверяем данные о созданном питомце с использованными при создании.

Проблема здесь в том, что логика подготовки данных, проверяемого действия и проверки идентичная во всех трёх тестах. Они отличаются лишь тестовыми данными. Это означает, что при написании подобных тестов лучше использовать параметризацию. Давайте модифицируем этот код с использованием провайдера данных.

Шаг 1 - добавляем провайдер данных.

Создание провайдера данных
Создание провайдера данных

Создаём метод petsData(), который будет возвращать данные для автотеста. У него должна быть аннотация @DataProvider и возвращаемый тип Object[][]. В нём указываем все тестовые данные трёх наших тестов.

Шаг 2 — указываем имя провайдера и параметры в тестовом методе.

Указание провайдера и параметров
Указание провайдера и параметров

В аннотации @Test с помощью атрибута dataProvider необходимо указать имя нашего провайдера данных. В методе указываем два входных параметра строкового типа. В первом передаём имя питомца, во втором — статус.

Как видим, код стал короче, кроме того, его легче поддерживать. Полная версия тестов с провайдером данных:

Модифицированный код автотеста
Модифицированный код автотеста