Jump to content

Интеграционное тестирование одной кнопкой: пишем тесты в Postman


Recommended Posts

Всем привет!

делюсь находками...
может конечно это уже не ново, но мне вот прям "зашло"...
Тестирование. То самое, многострадальное, которое мы пока так и не затащим толком.
А именно интеграционное тестирование.


Postman наверное уже все юзают для отладки API.
А вот что в постман есть тесты - узнал только сегодня. Вернее что то такое слышал. Но реально попробовал сегодня. И мне это очень понравилось. Делюсь.


В общем, есть некий сервис, который умеет принимать API читая JSON, переданный в запросе. Что то типа такого:

2021-06-08_09-34-59.thumb.png.3971e6f50bc5d7008b64c5addc63d0ee.png

Отдаем содержимое в JSON, получаем в JSON.

Так вот там в Postman есть вкладочка tests:

2021-06-08_11-24-50.thumb.png.7a627c4891e8243850aab9c89d95a37b.png

В ней можно написать простенький скриптик, который будет выполнять анализ ответа и что то с этим делать:

// Проверка ответа
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

// Проверка длительности открытия
pm.test("Response time is less than 1.5s", function () {
    pm.expect(pm.response.responseTime).to.be.below(1500);
});

// Проверка структуры
var schema = {
    "type": "object",
    "properties": {
        "response": {
            "type": "object",
            "properties": {
                "text": {"type":"string"},
                "tts": {"type":"string"},
                "buttons": {
                    "type":"array",
                    "items": {
                        "type":"object",
                        "required":["title"],
                        "properties": {
                            "title": {"type":"string"}
                        }
                        }
                    },
                "end_session": {"type":"boolean"}
            },
            "required":["text","tts","buttons","end_session"]
            },
        "version": {"type": "string"}
    },
    "required":["response","version"]
};
pm.test('Schema is valid', function() {
  pm.response.to.have.jsonSchema(schema);
});

// Проверка содержимого
pm.test('Check answer content', function() {
  var jsonData = pm.response.json();
  // Проверка кнопок
  pm.expect(jsonData.response.buttons.length).to.eql(4);
  pm.expect(jsonData.response.buttons[0].title).to.eql("Русский");
  pm.expect(jsonData.response.buttons[1].title).to.eql("Помощь");
  pm.expect(jsonData.response.buttons[2].title).to.eql("English");
  pm.expect(jsonData.response.buttons[3].title).to.eql("Help");
  // Проверка наличия текста
  pm.expect(jsonData.response.text).not.eql(null);
  pm.expect(jsonData.response.text).not.eql("");
  pm.expect(jsonData.response.tts).not.eql(null);
  pm.expect(jsonData.response.tts).not.eql("");
  // Проверка end_session
  pm.expect(jsonData.response.end_session).to.eql(false);
    // Проверка version
  pm.expect(jsonData.version).to.eql("1.0");

});

Данный скрипт обрабатывает именно текущий запрос. Можно к каждому запросу написать по тестовому скрипту, который будет проверять код ответа сервера, время, за которое выполнился скрипт, валидировать схему JSON-ответа, определять, чтобы в ответе были или наоборот не были те или иные значения. В общем по полной управлять тем, что отдает сервер, и что бы вы хотели проверить в этом ответе.

Под тестирование сервиса я создал новую коллекцию. Всю коллекцию можно запустить на тестирование. Тогда все папки последовательно и все запросы в папках последовательно запустятся и запустятся тесты, если они написаны.

2021-06-08_11-29-16.thumb.png.d9537346e4b4a132ca720ebf67e20e52.png

Запускаем тест всей коллекции из меню коллекции нажав пункт "Run collection":

2021-06-08_11-31-20.thumb.png.a8b5ff6f3ab6394e9be13d1b63a9753f.png

Можно почекать какие то отдельные запросы, или оставить как есть, чтобы проверило все запросы. Нажимаем кнопку и понеслась ...

2021-06-08_11-32-05.thumb.png.65cda6428ab3867666bdb5ef92bb2772.png

Через несколько секунд результаты:

2021-06-08_11-33-29.thumb.png.e95cee2e589eb1316146dbe51523fbab.png

75 тестов успешно и 1 не успешный. Можно глянуть на неуспешные:

2021-06-08_11-34-38.thumb.png.aec79358c300b8630dbb279f929769d8.png

В частности здесь ошибка в тестировании времени отклика в запросе "Неизвестный интент [intents: hello]":

2021-06-08_11-37-04.thumb.png.c342d084978b8c2b7c947c39a35fc632.png

я поставил, что должно выполняться не более полутора секунд (1500мс), а по факту сервер отвечал 5 секунд. Вот и среагировало...

В общем то тестов получается достаточно много. Нужно немного вспомогательных функций на backend, чтобы формировало и подтирало тестовые данные. Чтобы прям без заглушек "по живому" можно было проверять. Но результатами я очень доволен!

Если нужно, чтобы ваш сервис имел низкий уровень забагованности, то вот пожалуйста бесплатный классный иснтруемент, как можно одной кнопкой проверять самые разные ситуации. Один раз написали, потом всю жизнь пользуемся. Сразу видим где что мы починили, что поломало нам в другом месте.

P.S.

Ну и небольшой "минус" - судя по всему эта штука работает в ручном режиме. Как ее запускать автоматически при поставке кода на прод и как включить в цикл проверок в CI/CD - я пока не понял. Возможно как то можно, но надо разбираться еще с этим. Так что данная возможность пока наверное для именно разработки. А не для полноценной стадии при поставке кода на прод-сервера. 

Но мне сейчас, на данном этапе жизни проекта, этого более чем "за глаза".

 

 

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...