API (Application Programming Interface) — это интерфейс, который определяет, как программные компоненты взаимодействуют друг с другом. Он задаёт, какие запросы можно выполнять, как именно они отправляются, в каком формате передаётся данные и какие соглашения при этом соблюдаются. API также могут предоставлять механизмы расширения, позволяя пользователям расширять существующие функциональности различными способами. API может быть разработан для конкретного компонента или создан на основе отраслевых стандартов для обеспечения совместимости. API скрывает внутреннюю реализацию и позволяет строить модульные системы, в которых части могут работать независимо друг от друга через чётко определённые интерфейсы.

Что называется тестированием API?

Тестирование API, как один из типов тестирования ПО, включает два аспекта — непосредственно тестирование функциональности интерфейсов ПО (API), а также более широкую проверку функциональности, надёжности, безопасности и производительности при интеграционном тестировании через API.

Лучшие практики API

  • Определение API соответствует стилю RESTful API с семантическими определениями URI, точными HTTP статус-кодами и возможностью понимать отношения между ресурсами через определения API.

  • Детализированная и точная документация API (например, документация Swagger).

  • Внешние API могут включать номера версий для быстрой итерации (например, https://thoughtworks.com/v1/users/).

Тестирование в разных квадрантах пирамиды тестирования имеет различные цели и стратегии. Тестирование API в основном относится ко второму и четвёртому квадрантам пирамиды тестирования.

Тестирование API занимает достаточно высокую позицию в пирамиде тестирования, сосредотачиваясь на тестировании функциональности и бизнес-логики на границах систем и сервисов. Оно выполняется после того, как сервис разработан и развёрнут в тестовой среде для валидации.

Типы тестирования API

Функциональное тестирование

  • Тестирование корректности

  • Обработка исключений

  • Внутренняя логика

Нефункциональное тестирование

  • Производительность

  • Безопасность 

Шаги в тестировании API

  1. Отправить запрос

  2. Получить ответ

  3. Проверить результат ответа

Введение в Postman и Newman

Postman — это популярный инструмент с удобным графическим интерфейсом для создания, тестирования и отладки API. Postman также позволяет легко писать тестовые скрипты и делиться ими. Он поддерживает различные методы HTTP-запросов, включая GET, POST, PUT, DELETE и другие, а также может использовать различные методы аутентификации и авторизации для тестирования API.

Newman — это инструмент командной строки для Postman, используемый для выполнения тестов без использования графического интерфейса Postman. С помощью Newman можно легко экспортировать коллекции Postman в исполняемый файл и запускать их в любой среде. Кроме того, Newman поддерживает генерацию отчётов о тестах в формате HTML или JUnit и интеграцию с процессами CI/CD для автоматизированного тестирования.

Вкратце, Postman — это мощный инструмент для разработки и тестирования API, в то время как Newman — удобный инструмент командной строки для запуска тестов без использования графического интерфейса Postman. Их комбинация повышает эффективность и точность тестирования и разработки API.

Помимо базовой функциональности Postman обладает и другими возможностями.

Управление окружениями и переменными. Postman поддерживает переключение между различными окружениями, такими как разработка, тестирование и продакшен, а также управление переменными, что облегчает настройку переменных для разных тест-кейсов и запросов.

Автоматизированное тестирование. Пользователи могут создавать и запускать автоматизированные тесты с помощью Postman, интегрируя их в процессы непрерывной интеграции или деплоя для более точного и эффективного тестирования.

Коллаборация и обмен. Postman поддерживает возможность делиться коллекциями и окружениями с командой, что облегчает совместную работу.

Мониторинг. Postman предоставляет возможность мониторинга API, позволяя отслеживать доступность и производительность API в реальном времени.

Чем в свою очередь может похвастаться Newman:

Интерфейс командной строки. Newman может работать через командную строку, что удобно для автоматизированного тестирования и интеграции в процессы CI/CD.

Поддержка нескольких форматов вывода. Newman поддерживает несколько форматов вывода, включая HTML, JSON и JUnit, что упрощает использование в различных сценариях.

Параллельное выполнение. Newman поддерживает параллельное выполнение тестов, улучшая эффективность тестирования.

Легковесность. По сравнению с GUI Postman, Newman является легковесным инструментом, он требует меньших ресурсов во время выполнения тестов.

Помимо упомянутых возможностей и характеристик, Postman и Newman имеют другие важные функции и преимущества:

Интеграция. Postman и Newman могут интегрироваться с многими другими инструментами и сервисами, такими как GitHub, Jenkins, Slack и прочими, что упрощает их использование в процессах разработки и деплоя для более эффективного тестирования и разработки API.

Генерация документации. Postman может генерировать документацию для API на основе запросов и ответов, обеспечивая точность и своевременность.

Тестовые скрипты. Postman позволяет использовать JavaScript для написания тестовых скриптов, что даёт гибкость и возможность настройки тестирования. Пользователи могут легко писать кастомные тестовые скрипты, чтобы обеспечить ожидаемое поведение API.

История. Postman сохраняет историю API-запросов, что удобно для пользователей, чтобы просматривать и управлять предыдущими запросами и ответами. Это полезно для отладки и устранения проблем.

Мультиплатформенная поддержка. Postman и Newman могут работать на нескольких платформах, включая Windows, macOS и Linux.

Зависимости проекта

Что нужно установить перед началом работы:

Структура проекта

Ниже представлена структура файлов проекта для автоматизированного тестирования API. Она включает файлы конфигурации тестов, файлы тестов, файлы инструментов для тестирования и отчёты о тестах. Этот проект можно использовать как образец.

Postman-Newman-demo
├── README.md
├── package.json
├── package-lock.json
├── Data // Test data folder
│   └── testdata.csv // Test data file
├── Testcase // Test case folder
│   └── APITestDemo.postman_collection.json // Test case file
├── Env // Test environment folder  
│   └── DemoEnv.postman_environment.json // Test environment file
├── Report // Test report folder
│   └── report.html
├── .gitignore
└── node_modules // Project dependencies
    └── ...

Как собрать проект для автотестов API на базе Postman и Newman

Ниже рассмотрим, как построить проект автоматизированного тестирования API с использованием Postman и Newman, включая конфигурацию тестов, тест-кейсы, окружение тестирования, инструменты для тестирования и отчёты по тестам.

Вы можете использовать демо-проект: Postman-Newman-demo

Создание новой папки проекта

mkdir Postman-Newman-demo  

Инициализация проекта

// Войдите в папку проекта  
cd Postman-Newman-demo  
// Инициализация проекта Node.js  
npm init -y 

Установка зависимостей

// Установить библиотеку Newman  
npm install newman@6.1.2 --save-dev

Написание тест-кейсов API в Postman

Создание коллекции и запроса в Postman

  1. Откройте Postman, нажмите кнопку New в верхнем левом углу, выберите Collection, введите название коллекции и нажмите Create Collection, чтобы создать коллекцию с именем "demo".

  2. В коллекции нажмите на три точки в верхнем правом углу, выберите Add Request, введите название запроса и нажмите Save, чтобы создать запрос с именем "get-demo". Также создайте ещё один запрос с именем "post-demo".

Редактирование запроса и написание тестов

Посмотрите demoAPI.md в папке проекта — там описаны URL, методы, заголовки и тело запроса для примеров.

get-demo

  • В запросе "get-demo" выберите метод запроса GET и введите URL: https://jsonplaceholder.typicode.com/posts/1.

  • В разделе Headers добавьте заголовок с ключом Content-Type и значением application/json.

  • В разделе Tests добавьте следующий скрипт для проверки результата ответа:

pm.test("res.status should be 200", function () {
  pm.response.to.have.status(200);
});
pm.test("res.body should be correct", function() {
  var data = pm.response.json();
  pm.expect(data.id).to.equal(1);
  pm.expect(data.title).to.contains('provident');
});

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


Если всё ок — сохраняйте запрос.

post-demo

  • В запросе "post-demo" выберите метод запроса POST и введите URL: https://jsonplaceholder.typicode.com/posts.

  • В разделе Headers добавьте заголовок запроса с ключом Content-Type и значением application/json.

  • В разделе Body выберите raw, выберите формат JSON и введите следующее тело запроса:

{
    "title": "foo",
    "body": "bar",
    "userId": 1
}

В разделе Tests добавьте следующий скрипт для проверки результата ответа:

pm.test("res.status should be 201", function () {
  pm.response.to.have.status(201);
});
pm.test("res.body should be correct", function() {
  var data = pm.response.json();
  pm.expect(data.id).to.equal(101);
  pm.expect(data.title).to.equal('foo');
});

Убедитесь, что результат ответа правильный, затем нажмите Save, чтобы сохранить запрос.

Настройка окружения для тестирования в Postman

Дальше рассмотрим, как вынести хост API в переменную окружения и использовать его в запросах.

Добавление переменных окружения

В правом верхнем углу Postman нажмите на значок шестерёнки, выберите Manage Environments, затем нажмите Add, введите имя окружения как "DemoEnv" и нажмите Add, чтобы создать окружение с именем "DemoEnv".

Отредактируйте переменные окружения, добавив ключ с именем host и значением https://jsonplaceholder.typicode.com.

Нажмите Add, чтобы сохранить переменные окружения.

Обновление запросов

  • В запросе "get-demo" обновите URL на {{host}}/posts/1.

  • В запросе "post-demo" обновите URL на {{host}}/posts.

Проверка переменных окружения

  1. В правом верхнем углу Postman нажмите на значок шестерёнки, выберите DemoEnv, чтобы переключиться на окружение "DemoEnv".

  2. Выберите запрос "get-demo", нажмите кнопку Send, чтобы отправить запрос, и проверьте результат ответа. После подтверждения правильности ответа нажмите Save, чтобы сохранить запрос.

  3. Выберите запрос "post-demo", нажмите кнопку Send, чтобы отправить запрос, и проверьте результат ответа. После подтверждения правильности ответа нажмите Save, чтобы сохранить запрос.

Экспорт переменных окружения и файлов тестовых случаев

В правом верхнем углу Postman нажмите на значок шестерёнки, выберите Export, выберите DemoEnv, затем нажмите Export, чтобы экспортировать переменные окружения.

Выберите коллекцию "demo", содержащую запросы "get-demo" и "post-demo", нажмите на три точки в правом верхнем углу, выберите Export, выберите Collection v2.1 и нажмите Export, чтобы экспортировать файл с тест-кейсами.

Настройка структуры проекта

Создание папок Env и Testcase

В папке проекта создайте папку с именем Env, чтобы хранить файлы переменных окружения.

// Создание папки Env  
mkdir Env 

 В папке проекта создайте папку с именем Testcase, чтобы хранить файлы тестов.

// Создание папки Testcase  
mkdir Testcase  

Организация файлов тестов и окружения

Поместите экспортированные файлы переменных окружения и файлы тест-кейсов в папки Env и Testcase в пределах папки проекта.

Корректировка файла package.json

В файле package.json добавьте следующий скрипт для запуска тестов:

"scripts": {
    "test": "newman run Testcase/demo.postman_collection.json -e Env/DemoEnv.postman_environment.json"
}

Запуск тестов

Для запуска тестов выполните команду:

npm run test

Другие статьи по тестированию:


Если вы устали от долгих ручных проверок API и нестабильных тестов, пора перейти к автоматизации. На открытом уроке 19 июня в 20:00 покажем, как быстро настроить Postman и JavaScript для эффективного тестирования API. Что будет на уроке:

— Секреты работы с коллекциями и переменными
— Написание автотестов с JWT-авторизацией
— Лучшие практики автоматизации

Освойте автоматизацию и забудьте о рутине. Присоединяйтесь!

Чтобы узнать, подойдет ли вам программа курса "JavaScript QA Engineer", пройдите вступительное тестирование.

Комментарии (0)