Skip to main content

Тестирование 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');
});