Курс для начинающих почтальонов - Тестирование API

YOUTUBE · 29.11.2025 03:36

Ключевые темы и таймкоды

Введение в курс

0:01
  • Приветствие от Валентина, разработчика программного обеспечения.
  • Объяснение цели курса: изучение Postman для тестирования API.
  • Упоминание о практических заданиях и автоматизации тестирования.

Основы API

1:15
  • Определение API как интерфейса к серверу.
  • Аналогия с розеткой: API имеет спецификации, которые нужно соблюдать.
  • Рекомендация курса Крейга Денниса для новичков.

Что такое Postman

2:15
  • Postman как инструмент для взаимодействия с веб-API.
  • Преимущества использования Postman для отправки и получения данных.

Установка Postman

3:10
  • Модель ценообразования Postman: freemium.
  • Два способа запуска Postman: через браузер или как отдельное приложение.
  • Инструкции по установке в примечаниях к курсу.

Настройка Postman

4:07
  • Переключение на чёрную тему в настройках Postman.

Начало работы с API

4:49
  • Использование API для заказа книг.
  • Важность ознакомления с документацией API.
  • Пример конечной точки состояния API.

Первый запрос в Postman

5:46
  • Копирование адреса API и создание рабочей области.
  • Отправка запроса на конечную точку статуса.
  • Получение ответа от API.

Основы HTTP

7:10
  • Объяснение протокола HTTPS и его преимуществ.
  • Структура HTTP-сообщения: запрос и ответ.

Параметры запроса в Postman

8:09
  • Настройка параметров запроса: URL, метод, заголовки, текст.
  • Пример заголовка content-type и его значение.

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

10:35
  • Основная часть ответа как наиболее важная часть.
  • Содержание основной части ответа.

Заключение

10:53
  • Обзор доступных частей HTTP-запроса и ответа в Postman.

Сохранение запроса в Postman

11:14
  • Нажимаем кнопку «Сохранить» и присваиваем запросу название, например, «статус API».
  • Создаём коллекцию для нескольких запросов, связанных с одним API.
  • Пример создания коллекции: «simple book api».

Работа с коллекциями

12:20
  • Закрываем вкладку и находим коллекцию в списке.
  • При нажатии на запрос внутри коллекции автоматически открывается вкладка для его запуска.

Использование переменных в запросах

12:42
  • Избегаем указания адресов и конфигурации в запросах, используя переменные.
  • Устанавливаем базовый URL как переменную, например, «базовый URL».
  • Выбираем область действия переменной: «область сбора данных».

Изменение переменных

14:15
  • Наводим курсор на название коллекции, выбираем «Редактировать» и вкладку «Переменные».
  • Видим начальное и текущее значение переменной.
  • Начальное значение доступно другим пользователям, текущее — личное.

Отправка запроса на конечную точку books

15:59
  • Выбираем адрес API, открываем новую вкладку и вставляем адрес.
  • Сохраняем запрос в коллекции «API simple books».
  • Отправляем запрос GET на конечную точку books.

Анализ ответа

17:12
  • Получаем статус 200, указывающий на успешную отправку запроса.
  • Данные возвращаются в формате JSON, который легко анализируется.

Параметры запроса

18:18
  • Параметры запроса — дополнительные данные, которые можно предоставить вместе с запросом.
  • Пример добавления параметра «type» со значением «преступление».
  • Ошибка 400 указывает на неверный запрос.

Работа с ошибками

19:45
  • Ошибки в ответе API могут быть техническими и сложными для понимания.
  • Важно ознакомиться с ошибками и понять их смысл.
  • Замена параметра на «художественная литература» исправляет ошибку.

Управление параметрами запроса в Postman

22:21
  • Добавляем и удаляем параметры запроса через флажок и крестик.
  • Необязательные параметры запроса можно удалить, если они больше не нужны.

Начало выполнения задания

22:54
  • Изучите документацию по API.
  • Используйте параметр запроса `limit` и добавьте его в запрос.
  • Попробуйте различные значения параметра.

Работа с параметром `limit`

23:18
  • Следуйте документации для правильного использования параметра.
  • `limit` должен быть числом от 1 до 20.
  • Пример использования: `limit=2` возвращает только две книги.

Ограничения API

24:18
  • API не позволяет получить более 20 книг за один запрос.
  • Важно правильно писать имя параметра, например, `limit` с заглавной буквы «Л» и строчными буквами.

Получение одной книги

25:25
  • Упрощённый вид списка книг не содержит много информации.
  • Используйте конечную точку для получения одной книги.
  • Путь к конечной точке отличается от списка книг.

Параметр пути `book_id`

26:19
  • `book_id` — это параметр пути, который постоянно меняется.
  • Каждая книга имеет уникальный идентификатор.
  • Изменение `book_id` позволяет получить подробную информацию о книге.

Детализация информации о книге

27:09
  • Конечная точка предоставляет подробную информацию о книге: идентификатор, название, автор, код книги, цена, количество в каталоге, акции и т. д.
  • Если идентификатор несуществующий, API вернёт ошибку 404 «не найдено».

Различие между параметрами пути и запроса

28:30
  • Параметры пути не содержат вопросительного знака.
  • Ключ параметра пути не отправляется в запросе.
  • Можно использовать как параметры пути, так и параметры запроса.

Завершение

30:11
  • Определите книгу, которую хотите заказать.
  • Следующий шаг зависит от ваших потребностей.

Отправка заказа через Postman

30:20
  • Используем конечную точку «заказы» и метод HTTP-запроса POST.
  • Создаём запрос на отправку с помощью Postman, дублируя существующий запрос.
  • Вводим новый путь и изменяем имя запроса.

Ошибка 401 Unauthorized

31:19
  • При попытке отправить запрос GET получаем ошибку 401 Unauthorized.
  • Для создания данных требуется аутентификация.
  • Некоторые конечные точки API могут быть общедоступными, другие требуют аутентификации.

Регистрация клиента API

32:40
  • Для отправки заказа необходимо зарегистрировать клиента API.
  • Регистрация позволяет получить токен доступа, который используется для подтверждения подлинности запросов.
  • Пример запроса для регистрации: POST в конечную точку «api-клиенты» с телом в формате JSON.

Отправка запроса на регистрацию

34:11
  • Выбираем метод HTTP-запроса POST и тип тела raw, затем выбираем JSON.
  • Вставляем пример тела запроса из документации API.
  • Убеждаемся, что JSON-файл действителен, проверяя наличие двойных кавычек.

Получение токена доступа

36:16
  • После отправки запроса получаем код статуса 201 Created.
  • Получаем токен доступа, который сохраняем в переменной коллекции Postman.
  • Проверяем, что токен не используется другим клиентом, чтобы избежать конфликта.

Добавление заголовка авторизации

38:05
  • Добавляем заголовок авторизации в запрос POST.
  • Используем помощник по авторизации в Postman для автоматического добавления заголовка.
  • Пример заголовка: «Authorization: Bearer <токен доступа>».

Повторная отправка запроса

40:16
  • После добавления заголовка авторизации отправляем запрос повторно.
  • Получаем ошибку 400 Bad Request из-за недействительного идентификатора книги.
  • Исправляем идентификатор книги и повторяем попытку отправки заказа.

Отправка заказа через API

41:24
  • Для заказа книги через API необходимо указать её идентификатор.
  • Использование raw-запроса без JSON может привести к непониманию со стороны API.
  • Важно изучить документацию API для правильного представления данных.

Работа с JSON

42:01
  • Для отправки заказа нужно использовать JSON-запрос с определёнными свойствами.
  • JSON передаёт данные в формате «ключ-значение».
  • Пример JSON-запроса: идентификатор книги — «единица», имя клиента — «Джон».

Правила синтаксиса JSON

42:58
  • Запятая разделяет пары «ключ-значение».
  • Строки в JSON должны быть в двойных кавычках.
  • Исключения: числа и логические значения могут быть без кавычек.

Ошибки при работе с JSON

43:56
  • Неверный JSON может привести к ошибке «невозможно обработать».
  • Postman предупреждает о недопустимых синтаксических ошибках.
  • Необходимо внимательно проверять JSON-запросы.

Задание на создание запроса

45:15
  • Создать запрос на публикацию и отправить его.
  • Проверить, что происходит при попытке заказать книгу, которой нет на складе.

Проверка наличия книги

46:45
  • Использовать фильтры для поиска книги с нулевым запасом.
  • При попытке заказать книгу, которой нет на складе, получить ошибку 404.

Использование случайных переменных в Postman

47:35
  • Postman позволяет отправлять случайные данные с запросами.
  • Пример использования случайной переменной для имени клиента.

Консоль Postman

49:05
  • Консоль Postman полезна для отладки запросов.
  • Просмотреть текст запроса и заголовки в консоли.

Ограничения Postman

51:03
  • Postman не предназначен для взаимодействия с пользователем или тестирования производительности.
  • Для тестирования безопасности существуют другие инструменты.

Получение всех заказов

52:20
  • Использовать конечную точку «получить все заказы» для получения списка заказов.
  • Дублировать запрос в Postman с заголовком авторизации.
  • Получить список всех заказов с идентификаторами, названиями книг, именами клиентов и количеством.

Просмотр отдельного заказа

54:02
  • Возьмите один идентификатор заказа и найдите конечную точку для его просмотра.
  • Используйте Postman для отправки запроса на получение заказа.
  • Убедитесь, что в адресе запроса нет пробелов, чтобы избежать сбоя.

Получение заказа

55:26
  • Если идентификатор заказа не существует, получите ответ «404 не найдено».
  • Вставьте реальный идентификатор заказа для получения информации о нём.

Обновление заказа

56:00
  • Для обновления заказа используйте метод HTTP-запроса «patch».
  • Потребуется аутентификация для обновления заказа.
  • Пример обновления: изменение имени клиента.

Удаление заказа

59:07
  • Для удаления заказа используйте метод HTTP-запроса «delete».
  • Укажите идентификатор заказа в запросе.
  • Проверьте удаление заказа, получив статус 204.

Автоматизация тестирования API

1:01:53
  • Автоматизация тестирования API позволяет избежать ручной работы и ускорить процесс.
  • Postman может выполнять тесты автоматически, вмешиваясь только при ошибках.
  • К концу курса вы сможете тестировать API одной командой или щелчком мыши.

Написание тестов API

1:02:56
  • Проверьте статус API, получите список книг, закажите книгу, получите индивидуальный заказ, обновите и удалите его.
  • Postman не знает, был ли запрос успешным, пока вы не сообщите ему об этом.
  • Напишите тесты в разделе «здесь проводятся тесты» с помощью JavaScript.

Фрагменты кода в Postman

1:04:54
  • Фрагменты кода позволяют быстро выполнить несколько действий с помощью JavaScript без написания большого количества кода.
  • Это удобно для начинающих, особенно при работе с JavaScript.

Проверка кода состояния 200

1:05:05
  • Простой тест: проверка, что код состояния равен 200.
  • Использование фрагментов кода для проверки статуса ответа.
  • Возможность ввода фрагментов вручную, если они изменились.

Неудачные тесты

1:06:05
  • Важность написания тестов, которые могут быть неудачными.
  • Пример неудачного теста: ввод несущего адреса.
  • Ошибка утверждения при получении кода состояния 404 вместо ожидаемого 200.

Анализ текста ответа JSON

1:06:58
  • JSON как простой способ отправки данных из API.
  • Преобразование JSON в объект JavaScript с помощью функции `json`.
  • Доступ к свойствам объекта JavaScript через консоль Postman.

Доступ к свойствам объекта

1:09:44
  • Два способа доступа к свойству «статус» в JavaScript.
  • Проверка наличия свойства «статус» в объекте.
  • Использование квадратных скобок для работы со специальными символами в именах свойств.

Написание тестов в Postman

1:11:43
  • Начало теста с функции `pm.test`.
  • Параметры функции: название теста и функция обратного вызова.
  • Пример утверждения: проверка равенства значений.

Утверждение статуса

1:13:42
  • Проверка, содержит ли объект свойство «нормально».
  • Тестирование с разными значениями для свойства «статус».
  • Ошибка при получении кода состояния 404.

Тестирование коллекции запросов

1:14:58
  • Написание тестов для всех запросов внутри коллекции.
  • Адаптация тестов для разных статусов ответов.
  • Проверка результатов тестов для различных операций: создание, получение, исправление, удаление заказов.

Заключение

1:18:42
  • Подведение итогов: каждый запрос в коллекции возвращает код состояния.
  • Важность тестов для определения успешности запросов.

Проблема копирования идентификатора заказа

1:19:24
  • Копирование идентификатора заказа из одного запроса в другой раздражает.
  • В Почтальоне есть переменные коллекции и глобальные переменные, которые помогают решить эту проблему.

Использование сред в Почтальоне

1:20:18
  • Среды полезны для переключения между локальной, тестовой и производственной средами разработки.
  • Можно легко заменить базовый URL-адрес в зависимости от среды.

Определение глобальной переменной

1:21:16
  • Для хранения идентификатора заказа используется глобальная переменная.
  • Текущее значение идентификатора сохраняется в переменной.

Использование переменной в запросах

1:21:52
  • При создании нового запроса можно использовать сохранённый идентификатор заказа.
  • Важно не добавлять пробелы или новые строки при вставке данных в переменную.

Тестирование и обновление данных

1:22:35
  • Переменная используется в запросах для получения и удаления заказов.
  • Можно сопоставлять значение переменной с ответом сервера.

Результаты тестирования

1:23:32
  • После удаления заказа его больше нет в списке.
  • Тесты Почтальона в фоновом режиме помогают оценить результаты.
  • Сокращение ручного труда при тестировании.

Проблемы с жёстко закодированными данными

1:24:17
  • Жёстко закодированные данные делают тесты уязвимыми к изменениям.
  • Пример с идентификатором книги показывает, как жёстко закодированные данные могут привести к ошибкам.
  • Необходимо сделать данные более динамичными.

Использование фильтра для поиска книг

1:25:14
  • Применение фильтра для поиска научно-популярных книг.
  • Изменение параметра фильтра для получения только научно-популярных книг.

Анализ ответа и получение идентификатора

1:26:21
  • Определение переменной response и синтаксический анализ ответа.
  • Преобразование JSON в объект JavaScript.
  • Получение идентификатора книги из массива объектов.

Проблемы с жёстко закодированными данными и их решение

1:28:09
  • Жёстко закодированные данные могут вызвать проблемы при изменении данных.
  • Использование функции filter для фильтрации доступных книг.
  • Извлечение первого доступного элемента из массива.

Установка глобальной переменной

1:31:33
  • Использование фрагмента кода «установить глобальную переменную» в Postman.
  • Установка идентификатора книги в переменную.
  • Проверка значения переменной после отправки запроса.

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

1:33:04
  • Написание теста для проверки наличия книги.
  • Ожидание, что книга станет объектом и будет доступна.
  • Обработка ошибок при отсутствии книги.

Дополнительное тестирование жанра книги

1:36:54
  • Проверка, что книга относится к жанру научной литературы.
  • Изменение свойства «доступно» на «тип» для тестирования.
  • Успешное прохождение теста при правильном типе книги.
  • Неудачное прохождение теста при неправильном типе книги.

Введение в задание

1:38:32
  • Задание включает два пункта: использование переменной идентификатора книги и проверка текущего запаса.
  • Переменная идентификатора книги сохранена как глобальная переменная.
  • Необходимо использовать идентификатор в запросах на получение книги и книгу заказов.

Структура теста

1:39:29
  • Копирование структуры теста для проверки наличия книги.
  • Ожидание, что текущий запас больше нуля, проверяется с помощью математического ожидания.

Замена значений

1:40:17
  • Замена жёстко закодированных значений на глобальную переменную идентификатор книги.
  • Проверка работы книги заказов без ошибок.

Анализ ответа

1:41:00
  • Определение переменной response для анализа ответа JSON.
  • Проблема с синтаксисом при получении свойств с дефисом решается использованием квадратных скобок.

Проверка свойства

1:42:25
  • Проверка наличия свойства «запас» в ответе.
  • Если книги нет на складе, тест не пройдёт.
  • С правильным идентификатором книги тест проходит успешно.

Заключение

1:42:47
  • Задание завершено.

Подготовка к автоматизации тестирования

1:42:55
  • Написаны тесты API, которые гарантируют ожидаемую реакцию API.
  • Добавлены переменные, избавляющие от необходимости копировать данные между запросами.
  • Следующий шаг — использование встроенного инструмента Postman для автоматизации управления коллекцией запросов.

Запуск коллекции запросов

1:43:49
  • Закрытие ненужных запросов для освобождения места.
  • Использование кнопки-бегунка для запуска коллекции.
  • Настройка порядка выполнения запросов.

Управление порядком запросов

1:44:47
  • Изменение порядка запросов в коллекции.
  • Возможность отключения ненужных запросов.
  • Сохранение ответов для анализа ошибок.

Анализ результатов тестирования

1:45:47
  • Некоторые запросы успешны, некоторые — нет.
  • Пример сбоя при регистрации клиента API.
  • Анализ причин сбоев через сохранение ответов.

Исправление ручного кодирования

1:46:20
  • Обнаружение проблемы с ручным кодированием идентификатора заказа.
  • Обновление идентификатора заказа из ответа API.
  • Проверка корректности обновления идентификатора.

Автоматизация выполнения запросов

1:49:08
  • Влияние на порядок выполнения запросов с помощью кода.
  • Указание следующего запроса в коде Postman.
  • Пример пропуска запроса статуса API и перехода к списку книг.

Завершение цикла запросов

1:51:40
  • Остановка цикла запросов с помощью значения null.
  • Важность осторожности при использовании условий для остановки циклов.
  • Риск бесконечного выполнения запросов без условий остановки.

Тестирование условий

1:52:56
  • Демонстрация бесконечного выполнения запросов без условий остановки.
  • Рекомендация тестировать условия перед автоматизацией.
  • Подчёркивание необходимости осторожности при использовании условий.

Автоматизация с помощью Postman

1:53:36
  • Использование средства сбора данных для автоматизации.
  • Функция мониторов в Postman для автоматического запуска коллекций.
  • Создание монитора для проверки работы API.

Настройка периодичности

1:54:34
  • Определение периодичности запуска монитора, например, каждый день или каждый будний день.
  • Выбор коллекции для мониторинга.

Запуск монитора

1:55:04
  • Монитор запускается автоматически и отправляет уведомления по электронной почте при ошибках.
  • Тестирование монитора вручную для проверки работы.

Анализ ошибок

1:55:26
  • Ошибка 401 несанкционированный доступ из-за отсутствия начального значения токена.
  • Решение проблемы путём добавления текущего значения токена к исходному.

Проблемы с автоматизацией

1:57:12
  • Сложности отладки из-за ограниченного доступа к информации в Postman.
  • Распространённые причины ошибок: отсутствующие переменные Postman или неправильная настройка.

Инструмент Newman

1:57:53
  • Newman как инструмент командной строки для автоматизации сбора данных.
  • Возможность запуска коллекций Postman на профессиональных серверах.
  • Необходимость установки Node.js для использования Newman.

Экспорт и запуск коллекции

1:59:14
  • Экспорт коллекции в виде файла JSON.
  • Получение общедоступной ссылки на коллекцию через контекстное меню.
  • Обновление ссылки вручную при изменениях в коллекции.

Запуск коллекции через Newman

2:00:32
  • Запуск коллекции с указанием пути к файлу JSON.
  • Альтернативный способ запуска через ссылку на коллекцию.

Создание отчётов

2:02:01
  • Использование HTML Extra Report для генерации отчётов.
  • Установка и настройка репортера.
  • Преимущества HTML-отчёта: удобство чтения и отладка ошибок.

Анализ отчётов

2:04:04
  • Обзор запросов и ответов в отчёте.
  • Проверка заголовков запросов и переменных Postman.
  • Конфигурации Newman и HTML Reporter для дополнительной настройки.

Введение в автоматизацию с Newman

2:05:32
  • Объяснение важности Newman для автоматизации процессов.
  • Описание реалистичного проекта API с конвейером сборки.
  • Процесс компиляции кода, выполнения тестов и развёртывания API на сервере.

Тестирование API с помощью Newman

2:06:25
  • Использование коллекции Postman в Newman для тестирования API.
  • Уведомления о проблемах через тесты Postman и конвейер.
  • Настройка сред и репортеров в Newman.

Интеграция с GitLab CI

2:07:21
  • Пример интеграции Newman с GitLab CI.
  • Возможность интеграции с Jenkins, TeamCity, CircleCI и другими серверами непрерывной интеграции.

Заключение и рекомендации

2:08:28
  • Подведение итогов курса и призыв к дальнейшему изучению.
  • Рекомендации по базовому курсу программирования на JavaScript.
  • Темы для изучения: тесты с управляемыми данными, проверка схемы, аутентификация OAuth 2.0.

Завершение

2:09:23
  • Ссылки на продвинутые учебные пособия в примечаниях к курсу.
  • Прощание и приглашение к повторному курсу.