Релиз Test IT Enterprise ver 5.2 Telescopium уже на сайте

Тестируем API без головной боли: автоматизация с Postman

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

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

Тестирование API может быть выполнено с помощью различных способов автоматизации. В предыдущей статье мы рассмотрели способы с помощью RestAssured и Postman. Здесь рассмотрим автоматизацию тестирования с переиспользованием предварительных запросов для удобного построения автоматизации в Postman, запуском автотестов через Newman и публикации их результатов в системе управление тестированием Test IT. Этот подход будет полезен начинающим специалистам в автоматизированном тестировании и ручным тестировщикам.

Коротко о возможностях автоматизации в Postman

Postman предоставляет широкий спектр инструментов для автоматизации тестирования API. Среди ключевых возможностей:

  • Скрипты Pre-request и Tests, позволяющие автоматически подготавливать данные и проверять результаты.

  • Коллекции запросов, которые можно запускать пакетно.

  • Интеграция с CI/CD, обеспечивающая тестирование на этапе сборки.

  • Переменные среды, которые упрощают настройку тестов под разные окружения.

  • Генерация отчетов и интеграция с внешними системами управления тестированием.

Описание тестового API с CRUD-операциями

Для демонстрации возможностей автоматизации используем тестовый проект с https://github.com/stillwork-bit/test-api
API предоставляет стандартные CRUD-операции для управления пользователями:

1. Создание пользователя  

  • Метод: POST  

  • Путь: /api/users  

  • Body: 

{
     "email": "{{user_email}}",
     "name": "{{user_name}}"
   }

2. Обновление пользователя  

  • Метод: PUT  

  • Путь: /api/users/{{id_user}}, где id_user- id пользователя 

  • Body:

   {
     "email": "{{user_email_update}}",
     "name": "{{user_name_update}}"
   }

3. Получение пользователя по ID  

  • Метод: GET  

  • Путь: /api/users/{{id_user}}, где id_user- id пользователя

4. Получение всех пользователей  

  • Метод: GET  

  • Путь: /api/users

5. Удаление пользователя  

  • Метод: DELETE  

  • Путь: /api/users/{{user_name}}, где user_name - имя пользователя

Создание коллекции Postman и переменных окружения

Создайте в Postman коллекцию со структурой:

TestAPI

  ├── Option, PreRequest, Test

        └── Collection

Описание каталогов:

  • TestAPI: секция для инициализации базовых переменных в Pre-request.

  • Option, PreRequest, Test: подготовка HTTP Options для создания и удаления пользователя.

  • Collection: логирование названий запросов и выполнение автотестов.

Также в нашем проекте будет подготовлена переменная среды test_api с переменными:

  • url — адрес подключения со значением http://localhost:

  • port — порт подключения со значением 9999.

  • logLevel — уровень логирования со значением info

Эта структура автоматизации в Рostman позволяет на каждом уровне определить необходимые скрипты и переменные для переиспользования в запросах. Например, при пользовательском тестировании API вместо уровня Collection может быть любое количество контроллеров или других элементов. 

Пишем автотесты в Postman

Подготовка PreRequest коллекции TestAPI

Во вкладке PreRequest на уровне коллекции TestAPI можно инициализировать переменные для использования в тестах Postman. В примере ниже я написал функцию для получения рандомного значения (не забываем про динамические переменные, реализованные в Postman, чтобы не изобретать колесо), а также условие для отображения заполненных глобальных переменных.

Код PreRequest:

function randInt(min, max) {
   return Math.round((Math.random() * Math.abs(max - min)) + min);
    return _.random(1, 1000);
}
//--------------------------------
//Переменные для user
var user_name = "user_name_"+ randInt(1, 10000);
var user_email = "user_email_"+ randInt(1, 10000) + "@test.com";


var user_name_update = "user_name_update"+ randInt(1, 10000);
var user_email_update = "user_email_update_"+ randInt(1, 10000) + "@test.com";


pm.globals.set("user_name", user_name);
pm.globals.set("user_email", user_email);
pm.globals.set("user_name_update", user_name_update);
pm.globals.set("user_email_update", user_email_update);


//Логирование переменных
if ("debug" == pm.environment.get("logLevel")) {
    console.log(pm.globals.get('user_name'))
    console.log(pm.globals.get('user_email'))
    console.log(pm.globals.get('user_name_update'))
    console.log(pm.globals.get('user_email_update'))
}

Подготовка Option, PreRequest, Test

В Option, PreRequest, Test во вкладке PreRequest подготовлены option для запросов в тестах с публикацией их в глобальные переменные.

Код PreRequest:

//-----------------------------------------------------------------------
//Создание user
let createUserOption = {
    url: pm.environment.get('url') + pm.environment.get('port') + "/api/users",
    method: 'POST',
    header: { 
        'content-type': 'application/json'
    },
    body: {
        mode: 'raw',
        raw: JSON.stringify({
    "email": pm.environment.get('user_email'),
    "name": pm.environment.get('user_name')
})
    }
};
pm.globals.set('createUserOption', createUserOption);
//-----------------------------------------------------------------------
//Удаление user
let deleteUserOption = {
    url: pm.environment.get('url') + pm.environment.get('port') + "/api/users/"+pm.globals.get('user_name'),
    method: 'DELETE',
    header: { 
        'content-type': 'application/json'
    }
};
pm.globals.set('deleteUserOption', deleteUserOption);

Подготовка Collection

Удобно, если в консоли Postman логируется название запроса, который мы выполняем. Для этого в PreRequest на уровне Collection подготовим скрипт для его отображения.

Код PreRequest:

console.log("Running: "+ pm.info.requestName); 

Написание запросов Postman с RreRequest и Tests

1. Создайте запрос Get all users с заполненным test:

// Проверка статус-кода
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

2. Создайте запрос Get user by Id c path {{url}}{{port}}/api/users/161 (в моем случае был id пользователя =161)  с заполненным test:

// Проверка статус-кода
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

3. Создайте запрос Post new user c path {{url}}{{port}}/api/users с заполненным test:

let user_request = JSON.parse(pm.request.body.raw);
let user_response = pm.response.json();
console.log("Request JSON:", user_request)
console.log("Response JSON:", user_response)
// Проверка статус-кода
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});


pm.test("Удаление тестового пользователя", function () {
    pm.sendRequest(pm.globals.get('deleteUserOption'), function (err, res) {
        pm.expect(res.code).to.equal(204)
    });
})

Body запроса raw json:

{
    "email": "{{user_email}}",
    "name": "{{user_name}}"
}

4. Создайте запрос Put update user c path {{url}}{{port}}/api/users/{{id_user}} с заполненным prerequest и test

PreRequest:

pm.test("Создание тестового пользователя", function () {
    pm.sendRequest(pm.globals.get('createUserOption'), function (err, res) {
        pm.expect(res.code).to.equal(200);
        let responsePrePrequestJson = JSON.parse(JSON.stringify(res.json()));
        let id_user = responsePrePrequestJson.id;
        pm.collectionVariables.set("responsePrePrequestJson", responsePrePrequestJson);
        pm.collectionVariables.set("id_user", id_user);
        console.log("ResponsePrePrequestJson JSON:", responsePrePrequestJson)
        console.log("ID USER :", id_user)
    });
})

Test:

let user_request = JSON.parse(pm.request.body.raw);
let user_response = pm.response.json();
console.log("Request JSON:", user_request)
console.log("Response JSON:", user_response)
// Проверка статус-кода
pm.test("Проверка обновления пользователя SC=200", function () {
    pm.response.to.have.status(200);
});
pm.test("Удаление тестового пользователя", function () {
    pm.sendRequest(pm.globals.get('deleteUserOption'), function (err, res) {
        pm.expect(res.code).to.equal(204)
    });
})

Body запроса raw json:

{
    "email": "{{user_email_update}}",
    "name": "{{user_name_update}}"
}

5. Создайте запрос Delete delete user c path {{url}}{{port}}/api/users/{{user_name}} с заполненным prerequest и test

PreRequest:

pm.test("Создание тестового пользователя", function () {
    pm.sendRequest(pm.globals.get('createUserOption'), function (err, res) {
        pm.expect(res.code).to.equal(200);
        let responsePrePrequestJson = JSON.parse(JSON.stringify(res.json()));
        pm.collectionVariables.set("responsePrePrequestJson", responsePrePrequestJson);
        console.log("ResponsePrePrequestJson JSON:", responsePrePrequestJson)
    });
})

Test:

// Проверка статус-кода
pm.test("Status code is 204", function () {
    pm.response.to.have.status(204);
});

Проверка работы запросов

При этом подходе на примере запроса PUT для обновления тестового запроса видны несколько этапов выполнения:

  1. Подготовка тестовых данных путем создания тестового пользователя.

  2. Выполнение тестового запроса по обновлению тестового пользователя.

  3. Удаление тестового пользователя.

Также у вас отрабатывают тесты на каждом этапе:

Как еще можно улучшить проект автоматизации в Postman и убрать дублирование?

  • Переиспользовать скрипт   

  • Вынести проверку status code за пределы запроса (на уровень Collection)

  • Сделать проверку полей

  • Подготовить ID пользователя для запроса Get By ID 

и другие шаги. 

Публикация автотестов в Test IT

Подготовьте параметры перед публикацией автотестов:

  1. Запустите тестовый проект из GitHub.

  2. Подготовьте коллекцию запросов в Postman.

  3. Экспортируйте тестовую коллекцию и переменные седы в удобный для вас каталог.

  4. Для проверки тест-кейсов экспорта автотестов Postman в Test IT вам потребуется проект. Если у вас его нет, то зарегистрируйтесь и создайте проект — например, test-api.  

  5. Скопируйте project ID и configuration ID из вашего проекта в Test IT. Можно собрать ID из консоли разработчика в разделе Network в запросах конфигурации и переходе в тестовый проект.

6. Скопируйте токен вашего пользователя из Test IT для публикации результатов автотестов.

7. Установите Newman: npm install -g newman.

Создание отчета c помощью Newman + Allure Report и публикация в Test IT  

1. Выполните запуск автотестов Postman через Newman с помощью команды для формирования отчета Allure:

newman run TestAPI.postman_collection.json -e test_api.postman_environment.json -r allure  --reporter-allure-export ./allure-results

2. Установите импортер Allure от Test IT для отчета:

pip install testit-importer-allure

3. Выполните экспорт результатов в TMS Test IT с помощью команды:

testit -pt [TMS TOKEN] -u [URL TESTIT] \
-pi [Ваш PROJECT_ID] -ci [Ваш CONFIGURATIN_ID] -rd [Путь к каталогу с отчетом Allure]

В Test IT появится запуск автотестов с вашими тест-кейсами и их статусом выполнения:

Создание отчета c помощью Newman + JUNIT и публикация в Test IT 

1. Выполните запуск автотестов Postman через Newman с помощью команды для формирования отчета junit-export results:

newman run TestAPI.postman_collection.json -e test_api.postman_environment.json -r cli,junit --reporter-junit-export results/test-results.xml

2. Установите testit-cli: 

pip install testit-cli  

3. Выполните экспорт результатов в Test IT с помощью команды:

testit results import --token [TMS TOKEN] --url [URL TESTIT] \
--project-id [Ваш PROJECT_ID] --configuration-id [Ваш CONFIGURATIN_ID] \
--testrun-name "Postman test run" --results [Путь к каталогу с отчетом junit]

В Test IT появится запуск автотестов с вашими тест-кейсами и их статусом выполнения:

Подробнее об импорте результатов автотестов в Test IT читайте в документации по ссылке.   

Результаты и преимущества

В результате мы не только реализовали автотесты в Postman, но и настроили их запуск и публикацию в системе управления тестированием Test IT. Ознакомьтесь с результатом обновления тестового пользователя и списком выполненных шагов:

Это дает нам следующие преимущества:

  • Упрощение работы: Postman позволяет быстро автоматизировать даже сложные сценарии.

  • Скорость: Использование автоматизации уменьшает затраты времени на ручное тестирование.

  • Интеграция: Возможность интеграции с CI/CD и системами управления тестами.

Начать автоматизацию в Postman — это первый шаг к более быстрому и качественному тестированию API. С Test IT вы сможете эффективно управлять результатами и улучшать процессы тестирования.


Оцените возможности Test IT прямо сейчас на бесплатном тарифе

Была ли статья полезной?