SpravkaCRM.ru Posted June 8, 2021 Report Share Posted June 8, 2021 Всем привет! делюсь находками... может конечно это уже не ново, но мне вот прям "зашло"... Тестирование. То самое, многострадальное, которое мы пока так и не затащим толком. А именно интеграционное тестирование. Postman наверное уже все юзают для отладки API. А вот что в постман есть тесты - узнал только сегодня. Вернее что то такое слышал. Но реально попробовал сегодня. И мне это очень понравилось. Делюсь. В общем, есть некий сервис, который умеет принимать API читая JSON, переданный в запросе. Что то типа такого: Отдаем содержимое в JSON, получаем в JSON. Так вот там в Postman есть вкладочка tests: В ней можно написать простенький скриптик, который будет выполнять анализ ответа и что то с этим делать: // Проверка ответа 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-ответа, определять, чтобы в ответе были или наоборот не были те или иные значения. В общем по полной управлять тем, что отдает сервер, и что бы вы хотели проверить в этом ответе. Под тестирование сервиса я создал новую коллекцию. Всю коллекцию можно запустить на тестирование. Тогда все папки последовательно и все запросы в папках последовательно запустятся и запустятся тесты, если они написаны. Запускаем тест всей коллекции из меню коллекции нажав пункт "Run collection": Можно почекать какие то отдельные запросы, или оставить как есть, чтобы проверило все запросы. Нажимаем кнопку и понеслась ... Через несколько секунд результаты: 75 тестов успешно и 1 не успешный. Можно глянуть на неуспешные: В частности здесь ошибка в тестировании времени отклика в запросе "Неизвестный интент [intents: hello]": я поставил, что должно выполняться не более полутора секунд (1500мс), а по факту сервер отвечал 5 секунд. Вот и среагировало... В общем то тестов получается достаточно много. Нужно немного вспомогательных функций на backend, чтобы формировало и подтирало тестовые данные. Чтобы прям без заглушек "по живому" можно было проверять. Но результатами я очень доволен! Если нужно, чтобы ваш сервис имел низкий уровень забагованности, то вот пожалуйста бесплатный классный иснтруемент, как можно одной кнопкой проверять самые разные ситуации. Один раз написали, потом всю жизнь пользуемся. Сразу видим где что мы починили, что поломало нам в другом месте. P.S. Ну и небольшой "минус" - судя по всему эта штука работает в ручном режиме. Как ее запускать автоматически при поставке кода на прод и как включить в цикл проверок в CI/CD - я пока не понял. Возможно как то можно, но надо разбираться еще с этим. Так что данная возможность пока наверное для именно разработки. А не для полноценной стадии при поставке кода на прод-сервера. Но мне сейчас, на данном этапе жизни проекта, этого более чем "за глаза". Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.