Тестирование API является одним из важнейших аспектов процесса тестирования и играет важную роль на втором уровне пирамиды тестирования. А также обеспечивает эффективность тестирования и снижение затрат, позволяя выявить потенциальные ошибки на ранних этапах.
Существует два подхода к тестированию API. Первый — это традиционный ручной метод с использованием инструментов, таких как Postman. В качестве альтернативы можно ускорить выполнение тест-кейсов с помощью инструментов автоматизации тестирования API. В этой статье мы рассмотрим процесс создания фреймворка для автоматизации тестирования API с использованием Playwright.
Подпишитесь на наш ТЕЛЕГРАМ КАНАЛ ПО АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ
Почему стоит выбрать Playwright для тестирования API? Одно из основных преимуществ — это возможность использования полного функционала Playwright. К тому же этот инструмент не требует дополнительных конфигураций и предоставит доступ ко всем методам запросов API.
Начнём с установки пакета @playwright/test в файл package.json и затем перейдём к созданию необходимого тестового сценария.

Мы воспользуемся шаблоном для проектирования модели страницы (Page Object Model), чтобы улучшить возможность повторного использования и читаемость, а также упростить отладку. Вот предполагаемая структура нашего фреймворка:

1. Features будет использоваться для хранения запросов API и связанной с ними логики для каждой соответствующей функции.
2. Мы будем использовать Fixture для запуска процесса абстрагирования API и передачи экземпляра запроса в конструктор в файле APIutils.ts.
3. Внутри файла APIutils.ts мы разместим все тестовые методы для API-запросов, которые будут использоваться в процессе тестирования.
4. В файле APITestSuite.ts мы будем хранить все тест-кейсы, которые необходимо выполнить.
И, наконец, файл playwright.config.ts, который содержит все основные конфигурации, необходимые для нашего фреймворка.

Один из удобных методов, доступных в Playwright, — это использование аргумента request в параметрах теста.

Это простой и быстрый способ выполнения тестов API с минимальными усилиями по написанию кода.
В нашем случае создание фикстуры теста выполняется довольно просто, как показано ниже. Мы создаём пользовательские данные, включая фикстуры API типа api, расширяющую базовый тестовый объект. Фикстура API устанавливает экземпляр утилиты api с помощью объекта request и делает его доступным для тестов с помощью функции use.

Теперь мы можем написать наш метод тестирования внутри APIUtils.ts. Приведённый ниже код определяет класс API для обработки API-запросов с помощью Playwright. Он инициализирует экземпляр класса с объектом APIRequestContext, позволяя взаимодействовать с HTTP-запросами, управляемыми Playwright.
import { APIRequestContext } from "playwright-core";
export default class API {
private request: APIRequestContext;
constructor(request: APIRequestContext) {
this.request = request;
}
После этого мы можем легко написать наш тестовый метод, как показано ниже:
async postReq(endpoint: string, reqBody: object) {
const res = await this.request.post(endpoint, { data: reqBody })
return res
}
async getReq(endpoint: string) {
const res = await this.request.get(endpoint)
return res
}
async putReq(endpoint: string, reqBody: object, token: string) {
const res = await this.request.put(endpoint, {
data: reqBody, headers: {
'Cookie': `token=${token}`
}
})
return res
}
async patchReq(endpoint: string, reqBody: object, token: string) {
const res = await this.request.patch(endpoint, {
data: reqBody, headers: {
'Cookie': `token=${token}`
}
})
return res
}
async deleteReq(endpoint: string, token: string) {
const res = await this.request.delete(endpoint, {
headers: {
'Cookie': `token=${token}`
}
})
return res
}
Для повышения удобства повторного использования, минимизации избыточности и достижения более оптимизированного кода мы можем структурировать его следующим образом:

Этот код определяет частный метод makeRequest для отправки HTTP-запросов с помощью Playwright. Он принимает такие параметры, как эндпоинт, HTTP-метод, тело запроса и необязательный токен для аутентификации. Код формирует запрос, включая заголовки и данные, а также возвращает ответ.
Кроме того, есть методы, такие как postReq и getReq, которые используют makeRequest для выполнения запросов POST и GET. Эти методы упрощают тестирование API, указывая метод HTTP и обрабатывая детали запроса.
Для нашего набора тестов API нужно импортировать необходимые библиотеки и тестовые фикстуры. Затем мы определяем тест-кейсы в соответствии с нашими сценариями.

Далее, при создании тест-кейсов, мы используем параметр API. Этот параметр позволяет вызывать все тестовые методы в классе API.

Теперь мы можем выполнить наш тест и просмотреть отчёт о тестировании, как показано ниже:


Заключение
Playwright может быть отличным инструментом для тестирования API, особенно когда он также используется и для сквозного тестирования. Это позволит сократить количество инструментов тестирования и сделать процесс тестирования более эффективным.
Перевод статьи «Tips & Tricks : Intuitive API Testing With Playwright».
Пингбэк: Большой учебник по Playwright