Я собираюсь показать вам простой способ тестирования контрактов API с помощью Postman и Node.js. Вы можете настроить это очень быстро.
Я создаю мобильное приложение для своей нынешней компании. Одна из проблем, с которыми мы сталкиваемся, - это частые изменения конечных точек / контрактов API. Мы также сталкиваемся с проблемами коммуникации, потому что мы вместе - разработчики, работающие над этим конкретным API, проживают в Барселоне, Испания, а я - в Новой Зеландии.
Мне нужен был механизм, обеспечивающий своевременную и последовательную обратную связь об изменениях этих контрактов API. Написание интеграционных тестов казалось слишком тяжелым, и мне нужно было что-то, что можно было бы сделать намного быстрее.
Мое решение проблемы
Сначала мы будем использовать инструмент под названием Почтальон. Почтальон - очень полезный инструмент, помогающий в разработке API. Он позволяет создавать HTTP-запросы, сохранять и обмениваться коллекциями запросов, писать тесты для ответов на эти запросы и многое другое.
Во-вторых, мы напишем файл Javascript, который позволит нам запускать эти запросы и тесты Postman в автоматическом режиме.
Я постараюсь описать каждый шаг. Я прошу прощения у более опытных читателей, если это слишком упрощенно, и перед менее опытными технологами, если я недостаточно объяснил. Вы можете найти код для этого на Github здесь - https://github.com/shivendraodean/api-contract-testing
Начнем! Загрузите следующие инструменты -
- Почтальон - https://www.getpostman.com
- Node.js - https://nodejs.org/en/
- Ньюман - https://www.npmjs.com/package/newman
1 - Создайте базовый проект API
Скопируйте и вставьте приведенные ниже команды по одной строке в терминал.
npm init запросит дополнительную информацию, введите ее в соответствии с рисунком 1.
mkdir api-contract-testing cd api-contract-testing npm init touch app.js touch apiContractTest.js npm install express newman
Скопируйте и вставьте следующее в app.js. Это базовое серверное приложение express.js. Строка 11 - это, по сути, корневой маршрут, который вернет нам некоторые данные.
const express = require('express') const app = express() const port = 3000 const testData = { firstName: 'Homer', lastName: 'Simpson' } app.get('/', (req, res) => res.send(testData)) app.listen(port, () => console.log(`Server listening on port ${port}`))
Сохраните файл и выполните следующую команду. Затем откройте веб-браузер и перейдите по адресу http: // localhost: 3000.
Этот результат мы сейчас проверим с почтальоном.
node app.js
2 - Создайте коллекцию почтальона
2.1 - Создать новый запрос на получение
2.2 - Перейдите на вкладку "Тесты", чтобы добавить тест к запросу. Схема относится к глобальной переменной, которую мы определим на следующем шаге . Вставьте следующее.
pm.test("Homer's schema should be correct", function() { var response = pm.response.json(); var result=tv4.validateResult(response, schema) pm.expect(result.valid).to.be.true; });
Затем мы определяем схему. Я создал схему из этого веб-приложения - https://jsonschema.net/#/
Это в основном позволяет вам вставлять любой JSON с левой стороны и выводить схему JSON справа, которую вы затем можете скопировать и использовать.
Нажмите на сценарий предварительного запроса и вставьте следующее -
schema = { "definitions": {}, "$schema": "http://json-schema.org/draft-07/schema#", "$id": "http://example.com/root.json", "type": "object", "title": "The Root Schema", "required": [ "firstName", "lastName" ], "properties": { "firstName": { "$id": "#/properties/firstName", "type": "string", "title": "The Firstname Schema", "default": "", "examples": [ "Homer" ], "pattern": "^(.*)$" }, "lastName": { "$id": "#/properties/lastName", "type": "string", "title": "The Lastname Schema", "default": "", "examples": [ "Simpson" ], "pattern": "^(.*)$" } } }
Теперь, если вы нажмете «Отправить», запрос будет отправлен и будет запущен тест.
2.3 - Сохранить запрос в коллекцию. Теперь, когда у вас есть коллекция, вы можете открыть Test Runner и запустить тесты для коллекции.
2.4 - Экспорт коллекции. Нажмите на эллипс рядом с коллекцией и выберите «экспорт». Укажите корень вашего JS в качестве места загрузки.
3 - Программно запускайте тесты с помощью Javascript
Скопируйте следующий скрипт в apiContractTest.js.
const newman = require('newman') newman.run({ collection: require('./homer-simpson-api.postman_collection.json'), reporters: 'cli', })
Скопируйте следующее в раздел сценариев файла package.json.
"contractTests": "node ./apiContractTest.js",
Теперь выполните это, убедившись, что сервер API работает -
npm run contractTests
Вот и все. Я надеюсь, вы найдете это полезным.
Вы можете найти код для этого на Github здесь: https://github.com/shivendraodean/api-contract-testing
Пожалуйста, поставьте лайк и поделитесь этим, если вы сочли его полезным.