Back-end не всегда функционирует так идеально, как указано в API-спецификации. Например, кто-нибудь забывает внести обязательный параметр в JSON-строку выдачи или вместо «0» решает вписать null. Если такие данные проникают в мобильное приложение, последствия могут быть самые неприятные.
Сегодня я расскажу об инструменте, который используется для выявления таких случаев. Это Runscope.
Как это работает?
Runscope — сервис для автоматизированного тестирования API. С его помощью можно посылать запросы к серверу и проверять полученные ответы по заранее установленным критериям. Интерфейс Runscope интуитивно понятен, если у вас под рукой есть API-спецификации.
1. Создание запроса
Поддерживаются:
- HTTP verb. Все необходимые методы (GET, HEAD, POST, PUT, PATCH, OPTIONS, DELETE)
- Авторизация логином/паролем и OAuth
- Изменение Header’ов
- Querystring-параметры, которые сразу подставляются в URL
- Обычные параметры, которые отправляются как body
2. Установка проверок
Для проверки ответов сервера используются Assertions (англ. – утверждения). К любой части ответа можно выставить проверку на свой вкус. К примеру, мы запрашиваем баланс пользователя, и нам нужно проверить вот такой ответ:
{
"balance":150
}
В данной ситуации мы можем выставить следующий Assertion:
Assertions поддерживают множество сравнений. Вот некоторые из них:
3. Использование переменных
Если вам нужно использовать одинаковые данные в нескольких запросах подряд, вы можете создать переменные.
Переменные можно создать до выполнения теста:
Или во время выполнения теста можно взять часть ответа и использовать её в качестве переменной:
Созданные переменные появляются на вкладке Request в правом верхнем углу (см п.1 Создание запроса). Для того, чтобы они появились в вашем запросе, нужно просто на них кликнуть.
4. Использование скриптов
Скрипты используются далеко не в каждом запросе, но они дают невероятную гибкость тестированию. Скрипты пишутся на JavaScript. Основной инструмент — Chai Assertion Library.
Скрипты позволяют:
1. Изменять переменные после выполнения запроса
2. Выводить любую информацию в лог
3. Использовать функции всех сторонних библиотек, которые поддерживает Runscope
Пример скрипта, который используется в реальном тестировании:
variables.get(“token”) достает Runscope переменную, которая была создана на вкладке Variables.
В итоге в лог выводится следующая информация:
5. Просмотр ответов
После выполнения какого-либо теста Runscope позволяет посмотреть результат каждого запроса.
Важно!
Runscope не отображает ответы с размером более 1мб. Если вы хотите посмотреть картинку с помощью Runscope, то с этим возникнут проблемы.
После создания нескольких запросов мы получаем полноценный тест, который можно запустить большой зеленой кнопкой “Run Now”.
Что еще умеет Runscope?
1. Хорошо писать документацию.
2. Запускать тесты по расписанию.
3. Автоматически собирать performance-статистику всех тестов.
4. Отсылать уведомления о проведенных тестах на почту.
5. Присоединяться к стороннему сервису и пользоваться его дополнительными возможностями. К примеру, автоматически запускать тест после коммита в GitHub.
6. Запускать тесты из разных локаций. Runscope предоставляет несколько proxy-серверов, разбросанных по всему миру и проводит тесты с них.
7. Запускать тесты удаленно с помощью Trigger URL. По сути надо просто перейти по специальной URL с любого устройства, и тест начнется.
8. Сохранять результаты предыдущих тестов, если вы не хотите смотреть их прямо сейчас.
Самое главное
Ценовой политикой в Runscope определяется только количество пользователей на организацию и количество запросов в месяц. За превышение лимита запросов необходимо отдельно доплачивать (около 0.30 центов за 1000 запросов).
Но можно остаться и на бесплатном аккаунте.
Итоги
Runscope активно развивается и часто выкатывает новые фичи. Сервис предельно простой, и в этой статье описана далеко не вся его функциональность. У нас в Redmadrobot с ним работают не только QA, но также разработчики и бизнес-аналитики. Сейчас мы используем Runscope для тестирования новых и старых API, для просмотра JSON-строк в удобном формате и для сбора логов по разным аккаунтам.
Для перехвата выдачи сервера на конкретном устройстве мы используем Charles, но об этом как-нибудь потом.
Автор: yaryabu