Online QADay 2021 #2
ДМИТРО СКРИПКА
«Difference between API Response Analysis and Back End Testing»
telegram: wwww.t.me/goqameetup
fb: www.fb.com/goqaevent
fb: www.fb.com/qaday.org
linkedin: https://www.linkedin.com/company/goqa/
Сайт: www.qaday.org
12. • End-To-End тесты
• Проверка операции на каждом слое
взаимодействия сервисов
• Проверка контрактов
• Проверка данных в БД
• Проверка ивентов
• Не глубокие проверки на уровне микросервисов
• Зависимость от preconditions
• Время выполнения
• Не проверяются сервисы которые не участвуют user flow
Integration
12
13. • Проверки только в рамках микросервиса (Sanity)
• Проверка БД
• Проверка внутренней логики
• Валидация контрактов
• Проверка ивентов
• Отсутствует привязка к пользователю/аккаунту
• Практически отсутствуют прекондишены
• Время исполнения
• Обнаружение критических ошибок еще
до стадии разработки интеграции
• Нет привязки к сторонним сервисам
Component
13
14. 14
Пример 1
GET /notebook/{contactId}/accounts
{
"contactId": "string",
"accounts": [
{
"contactId": "string",
"accountId": "string",
"label": "string",
"currency": "string",
"requisites": {
"destinationAddress": "string",
"firstName": "string",
"lastName": "string",
}
}
]
}
PUT /notebook/{contactId}/account/{accountId}
{
"contactId": "string",
"accountId": "string",
"label": "string",
"currency": "string",
"requisites": {
"destinationAddress": "string",
"firstName": "string",
"lastName": "string",
}
}
• Поход на Internal API
• Нет валидации по owner или authToken
• Ключевые поля передаются в url
• У злоумышленника есть возможность
сменить реквизиты
15. GET /transaction/{transactionId}/validation
{
"validationRule": "string",
"amount": "decimal",
"transactionValidationId": "guid"
}
POST /transaction
{
"accountid": "string",
"amount": "decimal",
"transactionValidationId": "guid"
}
• Нет внутренней проверки корреляции
transactionId и transactionValidationId
• У злоумышленника есть возможность
провести транзакцию по другому протоколу
Пример 2
15
16. Provider 1 Provider 2
Provider 4
Provider 3 Provider 5
3rd Party
POST /transaction
{
"transaction": {
"accountId": "string",
"transactionType": "string",
"transactionProvider": "string",
}
"amount": "decimal",
"transactionValidationId": "guid"
}
Service
public enum Provider
{
Provider1,
Provider2,
Provider3,
Provider4,
Provider5
}
Пример 3