Как отправить SOAP запрос в Postman: Полное руководство для тестирования веб-сервисов
- Понимание основ SOAP и подготовка к работе с Postman
- Настройка SOAP endpoint в Postman
- Формирование тела SOAP запроса
- Пошаговое создание тела запроса в Postman:
- Настройка заголовков HTTP для SOAP запросов
- Отправка и анализ SOAP запросов
- Продвинутые техники работы с SOAP в Postman
- Сравнение различных подходов к тестированию SOAP
- Реальный кейс: Тестирование банковского SOAP сервиса
- Типичные ошибки и способы их решения
Понимание основ SOAP и подготовка к работе с Postman
Прежде чем мы перейдём к практическим шагам, важно понимать, что SOAP — это протокол обмена структурированными сообщениями в распределённых вычислительных средах. В отличие от REST, который использует простые HTTP методы, SOAP всегда использует POST запросы и требует специально сформированного XML-тела.
Как отмечает Джон Мюллер, автор книги «Web Services For Dummies»: «SOAP предоставляет строгую структуру для обмена данными, что делает его идеальным выбором для критически важных корпоративных приложений, где необходимы гарантии доставки и безопасности».
Если вы интересуетесь тестированием, то в изучении вам помогут онлайн-курсы.
Основные компоненты SOAP сообщения включают:
- Envelope — корневой элемент, определяющий XML документ как SOAP сообщение
- Header — необязательный элемент с метаинформацией
- Body — обязательный элемент, содержащий фактические данные запроса
- Fault — необязательный элемент для передачи информации об ошибках
Для успешной работы с SOAP в Postman вам понадобится:
- Установленная версия Postman (рекомендуется последняя стабильная версия)
- URL WSDL-файла или готовый SOAP endpoint
- Базовое понимание XML структуры
- Документация по методам веб-сервиса (если доступна)
Настройка SOAP endpoint в Postman
Первый и критически важный шаг — правильная настройка endpoint’а. В отличие от REST API, где URL может напрямую указывать на ресурс, SOAP использует единый endpoint для всех операций, а конкретный метод определяется содержимым XML-запроса.
Пошаговый процесс настройки:
Шаг 1: Создание нового запроса
Откройте Postman и создайте новый запрос, нажав кнопку «New» или используя комбинацию клавиш Ctrl+N (Cmd+N на Mac). Выберите «HTTP Request» из списка доступных опций.
Шаг 2: Установка HTTP метода
SOAP всегда использует POST метод. Убедитесь, что в выпадающем меню слева от поля URL выбран именно POST. Это принципиальный момент — SOAP не поддерживает GET, PUT или DELETE запросы.
Шаг 3: Ввод URL endpoint’а
Введите URL вашего SOAP сервиса в поле адреса. Обычно SOAP endpoint выглядит примерно так:
http://example.com/soap/service
https://api.company.com/webservice/soap
http://localhost:8080/MyWebService/Service.asmx
Практический пример: Допустим, мы работаем с веб-сервисом калькулятора. URL может выглядеть как http://www.dneonline.com/calculator.asmx
. Это популярный тестовый SOAP сервис, который предоставляет базовые математические операции.
Важная деталь: если у вас есть WSDL-файл (Web Services Description Language), вы можете использовать его для автоматического определения доступных методов и их параметров. WSDL URL обычно получается добавлением «?wsdl» к основному endpoint’у: http://www.dneonline.com/calculator.asmx?wsdl
Формирование тела SOAP запроса
Создание правильного XML-тела запроса — это сердце работы с SOAP. Здесь кроется большинство ошибок новичков, поэтому разберём этот процесс максимально детально.
Базовая структура SOAP запроса:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<!-- Здесь размещается содержимое вашего запроса -->
</soap:Body>
</soap:Envelope>
Рассмотрим конкретный пример с веб-сервисом калькулятора для операции сложения:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Add xmlns="http://tempuri.org/">
<intA>5</intA>
<intB>3</intB>
</Add>
</soap:Body>
</soap:Envelope>
Пошаговое создание тела запроса в Postman:
Шаг 1: Перейдите на вкладку «Body» в интерфейсе Postman
Шаг 2: Выберите радиокнопку «raw»
Шаг 3: В выпадающем меню справа выберите «XML» вместо «Text»
Шаг 4: Скопируйте и вставьте ваш SOAP XML в текстовое поле
Критически важные моменты при формировании тела запроса:
- Namespace’ы — убедитесь, что все необходимые пространства имён объявлены корректно
- Регистр элементов — SOAP чувствителен к регистру, поэтому «Add» и «add» — разные элементы
- Структура данных — строго следуйте структуре, определённой в WSDL
- Типы данных — соблюдайте требования к типам параметров (int, string, boolean и т.д.)
Второй практический пример: Запрос к веб-сервису погоды
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<GetWeather xmlns="http://www.webserviceX.NET">
<CityName>Moscow</CityName>
<CountryName>Russia</CountryName>
</GetWeather>
</soap12:Body>
</soap12:Envelope>
Обратите внимание на различия в пространствах имён — этот пример использует SOAP 1.2 вместо SOAP 1.1, что влияет на структуру envelope’а.
Настройка заголовков HTTP для SOAP запросов
Правильная настройка HTTP заголовков критична для успешного выполнения SOAP запросов. Многие начинающие разработчики упускают этот аспект, что приводит к ошибкам 400 Bad Request или 500 Internal Server Error.
Обязательные заголовки для SOAP:
Заголовок | Значение для SOAP 1.1 | Значение для SOAP 1.2 | Описание |
---|---|---|---|
Content-Type | text/xml; charset=utf-8 | application/soap+xml; charset=utf-8 | Указывает тип содержимого запроса |
SOAPAction | «http://tempuri.org/Add» | Не требуется | Указывает намерение SOAP HTTP запроса |
Accept | text/xml | application/soap+xml | Указывает предпочитаемый формат ответа |
Content-Length | Автоматически | Автоматически | Длина тела запроса в байтах |
Настройка заголовков в Postman:
Шаг 1: Перейдите на вкладку «Headers» в интерфейсе Postman
Шаг 2: Нажмите «Add Header» или начните вводить в пустой строке
Шаг 3: Добавьте следующие заголовки:
- Key: Content-Type, Value: text/xml; charset=utf-8
- Key: SOAPAction, Value: «http://tempuri.org/Add» (в кавычках!)
- Key: Accept, Value: text/xml
Важная деталь касается заголовка SOAPAction: значение должно точно соответствовать тому, что указано в WSDL для конкретного метода. Для нашего примера с калькулятором, если мы вызываем метод «Add», SOAPAction будет выглядеть как «http://tempuri.org/Add».
Дополнительные заголовки, которые могут потребоваться:
- Authorization — для аутентификации (Basic, Bearer, API Key)
- User-Agent — идентификация клиентского приложения
- Cache-Control — управление кешированием (обычно «no-cache»)
- Connection — управление соединением (обычно «keep-alive»)
Профессиональный совет: если вы работаете с корпоративным SOAP сервисом, часто требуются дополнительные заголовки безопасности. Например, некоторые сервисы Microsoft требуют заголовок «X-Requested-With: XMLHttpRequest».

Третий практический пример: Полная настройка заголовков для корпоративного веб-сервиса с аутентификацией:
- Content-Type: text/xml; charset=utf-8
- SOAPAction: «http://company.com/webservice/GetEmployeeData»
- Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
- Accept: text/xml, application/xml
- User-Agent: Postman API Client v1.0
Отправка и анализ SOAP запросов
После тщательной подготовки endpoint’а, тела запроса и заголовков, настало время отправить запрос и проанализировать полученный ответ. Этот этап не менее важен, чем подготовка, поскольку правильная интерпретация результатов определяет успех всего процесса тестирования.
Процесс отправки запроса:
Шаг 1: Финальная проверка
Перед отправкой запроса обязательно проверьте:
- Правильность URL endpoint’а
- Корректность HTTP метода (должен быть POST)
- Наличие всех необходимых заголовков
- Валидность XML в теле запроса
Шаг 2: Отправка
Нажмите синюю кнопку «Send» в правом верхнем углу интерфейса Postman. В зависимости от сложности обработки и загруженности сервера, ответ может прийти за время от нескольких миллисекунд до нескольких секунд.
Анализ успешного ответа:
Успешный SOAP ответ обычно имеет следующую структуру:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<AddResponse xmlns="http://tempuri.org/">
<AddResult>8</AddResult>
</AddResponse>
</soap:Body>
</soap:Envelope>
Ключевые элементы для анализа:
- HTTP Status Code: должен быть 200 OK для успешного запроса
- Response Time: время выполнения запроса (отображается в правом нижнем углу)
- Response Size: размер полученного ответа в байтах
- Response Headers: заголовки ответа, включая Content-Type
- Response Body: XML содержимое с результатами
Обработка ошибок SOAP:
SOAP использует специальный механизм для передачи информации об ошибках через элемент soap:Fault. Пример ответа с ошибкой:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Invalid method name: 'Addd'</faultstring>
<detail>
<message>The method 'Addd' is not supported by this service</message>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
Типы SOAP ошибок:
- soap:Client — ошибка в запросе клиента (неправильные параметры, некорректный XML)
- soap:Server — ошибка на стороне сервера (внутренняя ошибка, недоступность ресурса)
- soap:MustUnderstand — сервер не понимает обязательный заголовок
- soap:VersionMismatch — несовместимость версий SOAP
Использование инструментов Postman для анализа:
Postman предоставляет множество встроенных инструментов для анализа ответов:
- Pretty View — автоматическое форматирование XML для удобного чтения
- Raw View — отображение ответа в исходном виде
- Preview — визуализация ответа (если применимо)
- Test Results — результаты автоматических тестов (если настроены)
- Response Headers — детальная информация о заголовках ответа
Профессиональный совет от эксперта API тестирования Валентины Сергеевой: «При работе с SOAP сервисами обязательно логируйте полный цикл запрос-ответ. Это поможет при отладке сложных ошибок и создании документации для команды».
Продвинутые техники работы с SOAP в Postman
После освоения базовых принципов отправки SOAP запросов, важно изучить продвинутые техники, которые существенно повышают эффективность тестирования и автоматизации процессов.
1. Использование переменных Postman в SOAP запросах
Переменные позволяют создавать гибкие и переиспользуемые запросы. Вместо жёстко заданных значений можно использовать плейсхолдеры:
<Add xmlns="http://tempuri.org/">
<intA>{{firstNumber}}</intA>
<intB>{{secondNumber}}</intB>
</Add>
Настройка переменных:
- Перейдите в раздел «Variables» в настройках коллекции или окружения
- Добавьте переменные: firstNumber = 10, secondNumber = 5
- Postman автоматически подставит значения при отправке запроса
2. Создание коллекций SOAP запросов
Организация запросов в коллекции критически важна для больших проектов. Статистика показывает, что команды, использующие структурированные коллекции, на 40% быстрее выполняют регрессионное тестирование.
Рекомендуемая структура коллекции:
- Authentication — запросы для получения токенов авторизации
- Core Operations — основные бизнес-операции
- Error Scenarios — тестовые случаи для проверки обработки ошибок
- Performance Tests — запросы для нагрузочного тестирования
3. Автоматизация с помощью Pre-request Scripts
Pre-request скрипты выполняются перед отправкой запроса и позволяют динамически генерировать данные:
// Генерация случайного числа для тестирования
pm.globals.set("randomNumber", Math.floor(Math.random() * 100));
// Получение текущей даты в формате ISO
pm.globals.set("currentDate", new Date().toISOString());
4. Создание автоматических тестов для SOAP ответов
Postman позволяет создавать тесты для автоматической проверки ответов:
// Проверка статуса ответа
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
// Проверка содержимого SOAP ответа
pm.test("SOAP response contains result", function () {
var responseText = pm.response.text();
pm.expect(responseText).to.include("AddResult");
});
// Извлечение значения из XML ответа
pm.test("Addition result is correct", function () {
var responseXml = xml2Json(pm.response.text());
var result = responseXml["soap:Envelope"]["soap:Body"]["AddResponse"]["AddResult"];
pm.expect(parseInt(result)).to.equal(15);
});
5. Работа с WS-Security
Многие корпоративные SOAP сервисы требуют WS-Security аутентификации. Пример заголовка безопасности:
<soap:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>{{username}}</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">{{password}}</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soap:Header>
6. Интеграция с системами непрерывной интеграции
Postman коллекции можно запускать из командной строки с помощью Newman:
newman run soap-collection.json -e production-environment.json --reporters cli,html
Это особенно полезно для включения SOAP тестов в CI/CD пайплайны Jenkins, GitLab CI или Azure DevOps.

Сравнение различных подходов к тестированию SOAP
Для полного понимания места Postman в экосистеме инструментов тестирования SOAP, важно сравнить различные подходы и инструменты:
Критерий | Postman | SoapUI | curl | Собственный код |
---|---|---|---|---|
Простота использования | Очень высокая | Средняя | Низкая | Очень низкая |
Функциональность | Высокая | Очень высокая | Базовая | Полная |
Стоимость | Бесплатно/Платно | Бесплатно/Платно | Бесплатно | Время разработки |
Поддержка команды | Отличная | Хорошая | Ограниченная | Зависит от команды |
Автоматизация | Хорошая | Отличная | Хорошая | Полная |
Как видно из таблицы, Postman занимает золотую середину между простотой использования и функциональностью, что делает его идеальным выбором для большинства сценариев тестирования SOAP.
Реальный кейс: Тестирование банковского SOAP сервиса
Рассмотрим практический пример тестирования реального банковского SOAP веб-сервиса для проверки баланса счёта. Этот кейс основан на опыте работы с одним из крупнейших российских банков.
Постановка задачи:
Необходимо протестировать веб-сервис проверки баланса, который принимает номер счёта и возвращает текущий баланс. Сервис использует SOAP 1.1 с WS-Security аутентификацией.
Технические требования:
- Endpoint: https://bank-api.example.com/AccountService.asmx
- Метод: GetAccountBalance
- Аутентификация: Username Token (WS-Security)
- Обязательные поля: AccountNumber, BankCode
- Ожидаемый ответ: Balance, Currency, Status
Настройка запроса:
1. URL и метод: POST https://bank-api.example.com/AccountService.asmx
2. Заголовки:
- Content-Type: text/xml; charset=utf-8
- SOAPAction: «http://bank.example.com/GetAccountBalance»
- Accept: text/xml
3. Тело запроса:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>{{api_username}}</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">{{api_password}}</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soap:Header>
<soap:Body>
<GetAccountBalance xmlns="http://bank.example.com/">
<AccountNumber>{{account_number}}</AccountNumber>
<BankCode>{{bank_code}}</BankCode>
</GetAccountBalance>
</soap:Body>
</soap:Envelope>
4. Переменные окружения:
- api_username: «test_user»
- api_password: «secure_password_123»
- account_number: «4081781234567890»
- bank_code: «044525225»
Ожидаемый успешный ответ:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetAccountBalanceResponse xmlns="http://bank.example.com/">
<Balance>125000.50</Balance>
<Currency>RUB</Currency>
<Status>Active</Status>
<LastUpdate>2024-01-15T10:30:45</LastUpdate>
</GetAccountBalanceResponse>
</soap:Body>
</soap:Envelope>
Автоматические тесты для проверки:
pm.test("Response status is 200", function () {
pm.response.to.have.status(200);
});
pm.test("Response contains balance information", function () {
var responseText = pm.response.text();
pm.expect(responseText).to.include("GetAccountBalanceResponse");
pm.expect(responseText).to.include("Balance");
pm.expect(responseText).to.include("Currency");
});
pm.test("Balance is valid number", function () {
var responseXml = xml2Json(pm.response.text());
var balance = responseXml["soap:Envelope"]["soap:Body"]["GetAccountBalanceResponse"]["Balance"];
pm.expect(parseFloat(balance)).to.be.above(0);
});
pm.test("Response time is acceptable", function () {
pm.expect(pm.response.responseTime).to.be.below(3000);
});
Этот кейс демонстрирует, как Postman может эффективно использоваться для тестирования сложных корпоративных SOAP сервисов с продвинутыми механизмами безопасности.
Типичные ошибки и способы их решения
В процессе работы с SOAP запросами в Postman, разработчики и тестировщики часто сталкиваются с повторяющимися проблемами. Рассмотрим наиболее распространённые ошибки и эффективные способы их устранения.
1. Ошибка 400 Bad Request
Возможные причины:
- Неправильный Content-Type заголовок
- Отсутствующий или некорректный SOAPAction заголовок
- Невалидная XML структура в теле запроса
- Неправильное пространство имён (namespace)
Решение: Тщательно проверьте все заголовки и убедитесь, что XML соответствует WSDL спецификации. Используйте онлайн валидаторы XML для проверки синтаксиса.
2. Ошибка 500 Internal Server Error
Возможные причины:
- Ошибка в бизнес-логике на стороне сервера
- Неправильные параметры запроса
- Нарушение ограничений безопасности
- Временная недоступность внешних систем
Решение: Проанализируйте детали SOAP Fault в ответе, обратитесь к документации API, проверьте логи сервера (если доступны).
3. Проблемы с кодировкой символов
Особенно актуально при работе с русскими текстами или специальными символами.
Решение:
- Убедитесь, что в XML объявлении указана правильная кодировка: encoding=»utf-8″
- В заголовке Content-Type также укажите charset=utf-8
- Используйте HTML entities для специальных символов (<, >, &)
Что такое баг и баг-репорт Баг (от английского "bug" — жук, насекомое) — это дефект или ошибка в программном обеспечении, которая приводит к неожиданному или нежелательному поведению системы. Термин впервые был использован программистом Грейс Х...
Принципы работы SDLC и почему им пользуются Представьте себе строительство небоскреба без архитектурного плана. Звучит абсурдно, не правда ли? Однако именно так выглядит разработка программного обеспечения без применения принципов SDLC. Каждый...
Selenium: Основы и история развития Selenium представляет собой набор инструментов с открытым исходным кодом, предназначенный для автоматизации тестирования веб-приложений. Проект был создан в 2004 году Джейсоном Хаггинсом в компании ThoughtWor...
Что такое Story в Jira: основные принципы Story (пользовательская история) в Jira — это тип задачи, который описывает функциональность системы с точки зрения конечного пользователя. В отличие от технических задач, Story фокусируется на том, кто...
Что такое эпик в Agile и Jira Эпик в Jira представляет собой крупную пользовательскую историю или инициативу, которая слишком велика для выполнения в рамках одного спринта и требует разбиения на более мелкие, управляемые задачи. Как отмечает Ма...
Что такое Jira: система управления проектами и отслеживания задач Jira представляет собой мощную платформу для управления проектами, разработанную специально для команд, работающих в сфере разработки программного обеспечения, но успешно адаптир...