Ответ
Опыт включает ручное тестирование (Postman) и создание автотестов, преимущественно на стеке Python (pytest + requests). Основные направления работы:
1. Функциональное тестирование:
- Проверка HTTP-статусов (
200 OK,201 Created,400 Bad Request,404 Not Found,500 Internal Server Error). - Валидация структуры и данных ответа (использую библиотеку
jsonschema). - Тестирование граничных значений и некорректных входных данных для параметров.
2. Нефункциональное тестирование:
- Проверка заголовков (
Content-Type,Cache-Control). - Базовая проверка производительности и анализ логов.
- Тестирование авторизации (JWT, OAuth 2.0).
Пример автотеста для GET-запроса:
import requests
import jsonschema
def test_get_user_by_id():
url = "https://api.example.com/v1/users/1"
# 1. Выполнение запроса
response = requests.get(url, headers={"Authorization": "Bearer token123"})
# 2. Проверка статус-кода
assert response.status_code == 200
# 3. Проверка заголовка
assert response.headers["Content-Type"] == "application/json"
# 4. Валидация JSON-схемы ответа
user_schema = {
"type": "object",
"properties": {
"id": {"type": "integer"},
"name": {"type": "string"},
"email": {"type": "string", "format": "email"}
},
"required": ["id", "name", "email"]
}
jsonschema.validate(instance=response.json(), schema=user_schema)
Работал с документацией OpenAPI (Swagger) и инструментами для нагрузочного тестирования (например, Locust).
Ответ 18+ 🔞
А, ну вот, смотри, как оно бывает. Сидишь такой, пишешь себе тесты, а вокруг — джунгли из API, блядь. И главное, чтобы эта вся хуйня работала, а не падала, как подкошенная, при первом же чихе.
Опыт у меня, значит, такой: ручками в Postman'е полазил, знаешь, как обезьяна по лианам, а потом подумал — а нахуй каждый раз одно и то же кликать? И пошёл писать автотесты. В основном на Python, потому что он как родной, с pytest и requests — это связка, блядь, просто бомба.
1. Функциональщина, мать её:
- Смотрю, чтобы сервер не посылал мне в ответ какую-нибудь дичь.
200 OK— красота,201 Created— вообще заебись. А вот если400или404— ну, тут уже надо думать, кто из нас долбоёб: я запрос кривой послал или они там хуйню какую-то накодили.500— это уже пиздец, их проблемы, но моя работа — это найти. - Структуру ответа проверяю. Не просто "а, ну JSON пришёл, и ладно". А чтоб поля все на месте были и типы правильные. Для этого
jsonschema— вещь, блядь, незаменимая, хоть и занудная иногда. - Обожаю, сука, граничные значения гонять. Типа, передай в параметр
-1, или999999, или пустую строку. Смотришь, как API обосрётся — это же чистое удовольствие, ёпта! Находишь такие дыры — чувствуешь себя хакером, блядь.
2. Нефункциональные приколы:
- Заголовки — это святое.
Content-Typeдолжен бытьapplication/json, а неtext/html, а то потом парсишь эту хуйню и удивляешься, почему ничего не работает.Cache-Controlтоже гляну — мало ли. - Производительность... Ну, не то чтобы я прям LoadRunner, но если запрос пять секунд висит — это повод задуматься и в логи посмотреть.
- Авторизация — отдельная песня. Эти ваши JWT, OAuth... Иногда кажется, что проще пароль по мылу переслать, чем с этим всем разбираться. Но разбираешься, блядь.
Вот, смотри, как я обычно костыляю тест для GET-запроса:
import requests
import jsonschema
def test_get_user_by_id():
url = "https://api.example.com/v1/users/1"
# 1. Тыкаем палкой в API
response = requests.get(url, headers={"Authorization": "Bearer token123"})
# 2. Первое дело — статус-код. Не 200? Ну всё, пошёл нахуй.
assert response.status_code == 200
# 3. Глазками на заголовок: точно ли JSON нам прислали, а не картинку с котиком?
assert response.headers["Content-Type"] == "application/json"
# 4. А теперь самая нудятина — схема. Но без неё никуда, иначе приползёт какая-нибудь хрень в ответе.
user_schema = {
"type": "object",
"properties": {
"id": {"type": "integer"},
"name": {"type": "string"},
"email": {"type": "string", "format": "email"}
},
"required": ["id", "name", "email"]
}
jsonschema.validate(instance=response.json(), schema=user_schema)
Ещё, бывало, с OpenAPI (этот ваш Swagger) работал — читаешь спецификацию и думаешь: "Бля, они тут написали одно, а API делает вообще другое, пидарасы". Ну и для нагрузочного тестирования Locust'ом баловался — запускаешь рой виртуальных юзеров и смотришь, как сервер начинает потеть и просить пощады. Красота, в общем.