Привет всем!

Давайте знакомиться.

Я, Надежда Дудник, главный инженер по тестированию в СБЕРе, а ещё ментор по тестированию ПО.

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

В рамках своего блога я поделилась информацией как составлять тест-кейсы по бэкенду, и захотелось также поделиться этой информацией здесь. Эта информация, в основном, для тех, кто начинает изучать основы тестирования, и вся информация находится в гугл таблицах, ссылки которых указаны ниже.

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

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

Как вы знаете, что каждый тест состоит из предусловий, шагов и ожидаемых результатов.

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

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

  • корректность статуса кода;

  • полезную нагрузку ответа;

  • сам ответ от сервера: сообщение, ключ, значение, тип данных, структуру объектов;

  • заголовки ответа от сервера;

  • авторизацию с использованием методов аутентификации;

  • протокол HTTP / HTTPS согласно спецификации;

  • дополнительно доступы разных ролей, время ответа API, стиль формата обмена данными.


Сейчас я хочу продемонстрировать пример тест-кейса "Добавить нового питомца в магазин (Вызов метода POST)", используя сайт https://petstore.swagger.io/

Тест-кейс API "Добавление нового питомца в магазин"
Тест-кейс API "Добавление нового питомца в магазин"

Важно выполнить следующие шаги:

Отправить POST запрос https://petstore.swagger.io/v2/pet с телом:

{
    "id": 10,
    "category": {
        "id": 1,
        "name": "animal"
    },
    "name": "Bulldog",
    "photoUrls": [
        "https: //site.com/bulldog/photo"
    ],
    "tags": [
        {
            "id": 1,
            "name": "#dog"
        }
    ],
    "status": "available"
}

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

Проверить тело ответа от сервера

Проверить структуру ответа

Проверить заголовки ответа

Ожидаемый результат:

HTTP Status: 200 OK 
Тело ответа в формате JSON возращается от сервера 
и будет иметь следующий вид:
{
    "id": 10,
    "category": {
        "id": 1,
        "name": "animal"
    },
    "name": "Bulldog",
    "photoUrls": [
        "https: //site.com/bulldog/photo"
    ],
    "tags": [
        {
            "id": 1,
            "name": "#dog"
        }
    ],
    "status": "available"
}

Ожидаемый результат структуры ответа (более подробно):

Схема JSON отображена корректно, 
имена и типы полей соответствуют ожидаемым 
{
"id": 10 - number,
если "id" будет в таком виде "id": 0, то будет сгенерировано числовое значение

включая вложенные объекты: 
"category": {
    "id": 1,
    "name": "animal"
} 
"name": "Bulldog", - string
"photoUrls": [
    "https://site.com/bulldog/photo"
], - array 
вложенная структура данных, 
содержащая объекты и массивы: 
"tags": [
    {
        "id": 1,
        "name": "#dog"
    }
],
"status": "available" - string
}
значения полей соответствуют 
ожидаемым значениям из тестовых данных 


отдельно проверить:
"category": {
    "name": "animal" - string
} - object 
 
"tags": [
    {
        "name": "#dog" - string
    }
] - array with objects

Шаблон тест-кейсов API данного примера предлагаю просмотреть по ссылке.


Рассмотрим пример тест-кейсов для сайта https://try.vikunja.io/login .

Тест-кейс API: регистрация и авторизация пользователя.
Тест-кейс API: регистрация и авторизация пользователя.

Регистрация пользователя:

Отправить POST запрос https://try.vikunja.io/api/v1/register с телом

Postman: Body -> Raw -> JSON 
{
    "email": "protestirovaniye@mail.ru",
    "id": 0,
    "password": "hard389sS",
    "username": "NadezhdaQA"
}

Ожидаемый результат:

Запрос успешно отправлен на сервер.
HTTP Status: 200 OK

Пользователь успешно зарегистрировован.
Тело ответа в формате JSON 
возращается от сервера и будет иметь следующий вид: 
{

"created": "format of date",    
"email": "protestirovaniye@mail.ru",    
"id": 1254,    
"updated": "format of date",    
"username": "NadezhdaQA",    
"web.Auth": null
}

где "id": 1254 - значение сгенерировано системой

Шаблон тест-кейсов API для сайта Vikunja смотреть по ссылке.


Дополнительно я подготовила тест-кейсы на «Проверку идемпотентности» для тех, кто в начале пути по изучению основ тестирования и этот материал для закрепления знаний.
В данной информации можно скачать коллекцию, в которой я указала просто запросы на методы POST, PUT, GET, DELETE. Ваша задача в некоторых запросах подставить свои значения.

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

Если у вас возник вопрос, что такое "Идемпотентность", то по вышеуказанной ссылке имеется полезный материал на теорию идемпотентности.

Пример тест-кейсов по идемпотентности:

Добавить нового питомца в магазин (Вызов метода POST  /add_pet не идемпотентен)
Добавить нового питомца в магазин (Вызов метода POST /add_pet не идемпотентен)

Основные шаги при отправке запроса методом POST:

Отправить POST запрос https://petstore.swagger.io/v2/pet с телом:

Тело запроса: {
    "category": {
        "id": 1,
        "name": "animal"
    },
    "name": "Bulldog",
    "photoUrls": [
        "https://site.com/bulldog/photo"
    ],
    "tags": [
        {
            "id": 1,
            "name": "#dog"
        }
    ],
    "status": "pending"
}

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

Проверить тело ответа от сервера

Повторно отправить POST запрос https://petstore.swagger.io/v2/pet с телом

и

Ещё раз отправить POST запрос https://petstore.swagger.io/v2/pet с телом

Ожидаемый результат:

HTTP Status: 200 OK
Создан объект питомца с id = <генерируется новое значение>
Тело ответа в формате JSON возращается от сервера и будет иметь следующий вид:
{
    "id": <генерация нового значения типа int (number)>,
    "category": {
        "id": 1,
        "name": "animal"
    },
    "name": "Bulldog",
    "photoUrls": [
        "https://site.com/bulldog/photo"
    ],
    "tags": [
        {
            "id": 1,
            "name": "#dog"
        }
    ],
    "status": "pending"
}
POST /add_pet не идемпотентен. 
При каждом его вызове будет добавлен новый питомец в магазин. 
Происходит изменение состояния. 

В заключении, хочу сказать, что должно быть сгенерировано достаточно тест-кейсов, чтобы обеспечить функциональное покрытие в полном объеме.

Хочу поблагодарить за прочтение и рекомендую использовать данные шаблоны при выполнении тестовых и проектных задач.

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


  1. SergeyDeryabin
    00.00.0000 00:00
    +1

    Вы в таблицах пишите только для статьи или для работы тоже? Почему встроенные инструменты Postman не используете для описания сценариев тестирования?


    1. ProTestingInfo_QA Автор
      00.00.0000 00:00

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


      1. SergeyDeryabin
        00.00.0000 00:00

        Описанные кейсы, это тот минимум, который делает разработчик, по ходу выполнения задачи.

        Расскажите лучше про автоматические тесты, как вы организовываете весь процесс в Postman (если речь про API), как его автоматизируете, в таком духе


        1. ProTestingInfo_QA Автор
          00.00.0000 00:00

          Хорошая идея, постараюсь рассказать в следующей статье. Спасибо за ваши комментарии


  1. SergeyDeryabin
    00.00.0000 00:00

    В примере с магазином животных в API принимается два варианта запроса - XML и JSON. Почему не тестируете разные входные форматы одних и тех же запросов?

    В примере ошибка или это так и задумано, ответ выдается в формате запроса и accept заголовок игнорируется?


    1. SergeyDeryabin
      00.00.0000 00:00
      +1

      Насчет формата ответа отбой - мой косяк, все верно обрабатывается


  1. Cyber_BuLqa
    00.00.0000 00:00

    Полезный пост, возьму на заметку


    1. ProTestingInfo_QA Автор
      00.00.0000 00:00

      Благодарю!


  1. artsiom-rusau
    00.00.0000 00:00
    +1

    Молодец, Надя! Рад, что все получилось с публикацией. Всегда рекомендую твои шаблоны ребятам на своем курсе.


    1. fable_bob
      00.00.0000 00:00
      +1

      Привет! меня зовут Андрей, пользуясь моментом хотел сказать тебе спасибо, за твой вклад в развитие нашей сферы.

      Лично я по твоим урокам очень сильно прокачал скилы, а так же вдохновился на последующее развитие!


      1. ProTestingInfo_QA Автор
        00.00.0000 00:00
        +1

        Привет, очень приятно! Спасибо большое! Желаю ещё большего успеха в развитии!


  1. UserHome
    00.00.0000 00:00

    Надежда, судя по всему в вашей организации продолжают во всю пользоваться табличными процессорами, хотя VB макросы к документу не прекручены - это уже прогрессивный подход :) Почему описываете тестовые данные, вне форматов инструментов тестирования или у вас ноухау наработки (будьте осторожны чтобы чего не выложить). Например, как пишут выше можно описывать тестовые наборы, например в текстовом csv формате с разделителями, который бы понимала какая-нибудь тестирующая программа. Опять же судя по прогрессивности вашей организации, все тесты должны проходить автоматически для разрабатываемых апи сервисов при загрузке коммитов с измененным исходным кодом в репозитарий и развертывании приложений в тестовой среде.


    1. ProTestingInfo_QA Автор
      00.00.0000 00:00

      Суть статьи заключалась, научить составлять тест-кейсы, кто начинает изучать основы тестирования.

      Прошу организацию не трогать, так как она здесь не причём.

      Здесь описываю свои знания как ментор по тестированию, а не как сотрудник организации.

      «можно описывать тестовые наборы, например в текстовом csv формате с разделителями» - можно будет отнести к другой статье по автоматизации с Postman.

      Спасибо за комментарий.


      1. UserHome
        00.00.0000 00:00

        Надежда, а почему выбрали автоматизацию Postman, а не например, автоматизированное тестирование Webdriver-Cucumber-Ruby:
        https://www.youtube.com/watch?v=ZGmOxX0OEo0
        https://www.youtube.com/watch?v=MgEZqRsTnec

        https://github.com/larate/automation_practical_sqa

        или еще какойто вариант тестирования?