Я собираюсь показать вам простой способ тестирования контрактов API с помощью Postman и Node.js. Вы можете настроить это очень быстро.

Я создаю мобильное приложение для своей нынешней компании. Одна из проблем, с которыми мы сталкиваемся, - это частые изменения конечных точек / контрактов API. Мы также сталкиваемся с проблемами коммуникации, потому что мы вместе - разработчики, работающие над этим конкретным API, проживают в Барселоне, Испания, а я - в Новой Зеландии.

Мне нужен был механизм, обеспечивающий своевременную и последовательную обратную связь об изменениях этих контрактов API. Написание интеграционных тестов казалось слишком тяжелым, и мне нужно было что-то, что можно было бы сделать намного быстрее.

Мое решение проблемы

Сначала мы будем использовать инструмент под названием Почтальон. Почтальон - очень полезный инструмент, помогающий в разработке API. Он позволяет создавать HTTP-запросы, сохранять и обмениваться коллекциями запросов, писать тесты для ответов на эти запросы и многое другое.

Во-вторых, мы напишем файл Javascript, который позволит нам запускать эти запросы и тесты Postman в автоматическом режиме.

Я постараюсь описать каждый шаг. Я прошу прощения у более опытных читателей, если это слишком упрощенно, и перед менее опытными технологами, если я недостаточно объяснил. Вы можете найти код для этого на Github здесь - https://github.com/shivendraodean/api-contract-testing

Начнем! Загрузите следующие инструменты -

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

Пожалуйста, поставьте лайк и поделитесь этим, если вы сочли его полезным.