Тестирование API
Инструменты для тестирование API
- Postman with newman
- Thunder Client for VS Code
- Swagger - Интерактивныое представление/описание API как веб-приложение с открытым исходным кодов. Описание и документация API. Swagger UI.
- Insomnia - Desktop-приложение для тестирования API
- Charles - Proxy-server - мониторинг запросов. Сниффер - анализатор трафика.
- authenticationtest.com - Тестирование авторизации
- users.bugred - Тестирование авторизации 2
- Интернетомер - Проверка скорости интернета
- При возникновении неисправностей в первую очередь проверяется КЛИЕНТ, далее СЕРВЕР, далее БД.
- Нужно находить потенциальные уязвимости в клиент-серверной архитектуре, тестировать на возможность доступа к данным или возможности перехвата.
Collection
Создание отдельных директории с набором (коллекцией) запросов.
Enviroment
Сохранение переменных. Чтобы постоянно не прописывать длинные url можно сохранять их в отдельные переменные.
Scripts
- Можно использовать в
pre-req
и вpost-res
. - Также можно сгенерировать набор скриптов: Коллекция --> ... ---> Generate test
- В коде тестов можно использовать
console.log()
, а потом смотреть вывод данных в консоли на нижней панели
Примерные варианты скриптов.
pm.test('Response status code is 200', function () {
pm.response.to.have.status(200);
});
pm.test('Response has the required fields', function () {
const responseData = pm.response.json();
pm.expect(responseData).to.be.an('array');
responseData.forEach(function (item) {
pm.expect(item.drugstore).to.exist;
pm.expect(item.available).to.exist;
pm.expect(item.unavailable).to.exist;
pm.expect(item.in_one_hour).to.exist;
pm.expect(item.pickup_date).to.exist;
pm.expect(item.client_pickup_date).to.exist;
pm.expect(item.pickup_interval).to.exist;
pm.expect(item.is_accept_recipe).to.exist;
pm.expect(item.common_unavailable_reason).to.exist;
});
});
pm.test('UUID and offer_id are in a valid format', function () {
const responseData = pm.response.json();
pm.expect(responseData).to.be.an('array');
responseData.forEach(function (item) {
pm.expect(item).to.have.property('drugstore').that.is.an('object');
pm.expect(item.drugstore.uuid)
.to.be.a('string')
.and.to.have.lengthOf.at.least(1);
item.drugstore.available.forEach(function (availableItem) {
pm.expect(availableItem)
.to.have.property('offer_id')
.that.is.a('string')
.and.to.have.lengthOf.at.least(1);
});
});
});
pm.test('Available array should contain at least one element', function () {
const responseData = pm.response.json();
pm.expect(responseData).to.be.an('array');
responseData.forEach(function (item) {
pm.expect(item.drugstore.available)
.to.be.an('array')
.and.to.have.lengthOf.at.least(1);
});
});
pm.test('Pickup date is in a valid date format', function () {
const responseData = pm.response.json();
responseData.forEach(function (item) {
pm.expect(item.pickup_date).to.match(/^\d{4}-\d{2}-\d{2}$/);
});
});
// тест на кол-во аптек
pm.test('Аптек в выдаче больше 1000', function () {
const responseData = pm.response.json();
pm.expect(responseData).to.be.an('array');
pm.expect(responseData.length).to.be.greaterThan(1000); // Ctrl + Space
});
// тест на интервалы
pm.test(
"Ошибок 'Нет подходящих интервалов для аптеки' не больше чем 100",
function () {
const responseData = pm.response.json();
pm.expect(responseData).to.be.an('array');
let filtered = 0;
responseData.forEach(function (item) {
if (
item.common_unavailable_reason == 'Нет подходящих интервалов для аптеки'
) {
filtered++;
}
});
pm.expect(filtered).to.be.lessThan(100);
},
);
Token
How to automatically set a Bearer Token for your Postman requests?
Установка Postman CLI
brew install --cask postman
- Install Postman CLI
postman login --with-api-key API_KEY
- Зарегистрировать пользователя по CLI
postman collection run 4238395-f9da3763-3190-47d9-b3ee-e1529653fa88
- Запустить тестирование коллекции
npm install -g newman
- Install Newman (Уже устаревшая технология)
Можно использовать postman-cli для тестирования API.
Залогинить postman внутри cli
postman login --with-api-key номер-пользователя
Запуск тестирования коллекции
postman collection run 4238395-25d68cf2-a10e-4dcd-9921-096fc17c48fb
Можно добавлять консольные сообщения
// TEST 1 - проверка 200 статус-кода
pm.test('GET USER - Status code is 200', function () {
pm.response.to.have.status(200);
});
// TEST 2 - проверка значения поля (что поле data.firsta_name === 'Rachel')
pm.test('USER FIRST NAME CHECK', () => {
const jsonData = pm.response.json();
pm.expect(jsonData.data.first_name).to.eql('Rachel');
});