Как автоматизировать тестирование сложных API форм и не потратить время впустую

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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

Привет, Хабр! Наша компания создает множество полезных программ и сервисов, в том числе для автоматизации работы с данными граждан. Сегодня расскажем вам о том, как у нас тестируются сложные API формы и как мы справились с основными проблемами в автоматизации их тестирования.

Пример

Для системы записи ребенка в некой школе требуется передать его данные по API в виде структуры JSON, вида:

{“surname”: “Соколов”,
“name”: “Артур”,
“patronymic”: “Сергеевич”,
“birthdate”: “2008-06-26”,
“gender”: “m”,
“birth_no”: “XX-МЯ 123456‘:
“pass_no”: “4432123456”}

Для первичной проверки на каждое поле наложены ограничения (мы сильно сократили пример, так как нужно описать суть проблем, а не напугать читателя):

  • Фамилия “surname”

    • Буквы русского алфавита, римские цифры, дефис и апостроф 

    • 1-50 символов

    • Обязательное

      Возможные ошибки:

      • Фамилия может содержать только: буквы русского алфавита, римские цифры, дефис и апостроф

      • Фамилия не должна быть длиннее 50 символов

      • Фамилия обязательна для заполнения

  • Имя “name”:

    • Буквы русского алфавита, римские цифры, дефис, апостроф 

    • 1-50 символов

    • Обязательное

      Возможные ошибки:

      • Имя может содержать только: буквы русского алфавита, римские цифры, дефис и апостроф

      • Имя не должно быть длиннее 50 символов

      • Имя обязательно для заполнения

  • Отчество “patronymic”:

    • Буквы русского алфавита, римские цифры, дефис, апостроф 

    • 1-50 символов

    • Не обязательное

      Возможные ошибки:

      • Отчество может содержать только: буквы русского алфавита, римские цифры, дефис и апостроф

      • Отчество не должно быть длиннее 50 символов

  • Дата рождения “birthdate”:

    • Дата в формате ГГГГ-ММ-ДД

    • Ребенок не может быть старше 18 лет

    • Обязательное

      Возможные ошибки:

      • Дата рождения должна быть в формате ГГГГ-ММ-ДД

      • Ребенок не может быть старше 18 лет

      • Дата рождения обязательна для заполнения

  • Пол “gender”:

    • Символ m или f 

    • Не обязательное

      Возможные ошибки:

      • Пол может содержать только: символ m или f

  • Номер свидетельства о рождении “birth_no”:

    • Cтрока вида Х-ЯЯ 000000, где Х - римское число, подстрока длиной от 1 до 7, содержащая любые из следующих латинских букв: I, V, X, L, C, D, M; Я - любая русская буква, 0 - любая цифра 

    • 11-17 символов

    • Обязательно для детей младше 14 лет

      Возможные ошибки:

      • Неверно заполнен номер свидетельства о рождения

      • Номер свидетельства о рождении обязателен для заполнения

  • Серия и номер паспорта “pass_no”:

    • Только цифры

    • 10 символов

    • Обязательно для детей старше 14 лет

    • Отсутствует у детей младше 14 лет

      Возможные ошибки:

      • Неверно заполнены серия и номер паспорта

      • Серия и номер паспорта обязательны для заполнения

      • Серия и номер паспорта должны отсутствовать для ребенка младше 14 лет

Если ограничение не соблюдается, в ответе от системы мы должны получить ошибку для конкретного поля, например: “Пол может содержать только: символ m или f”. Если данные корректны: “Данные сохранены”

Проблема первая. Тестовые данные не увеличивают вероятность обнаружения дефекта

Давайте проанализируем поле «Фамилия» и ответим на вопросы: Какие значения мы можем передать? Какие из них система должна пропустить, а какие нет?

Представим все возможные значения этого поля в виде множества. Так как тестируем мы API форму, то это множество практически ничем не ограничено, так что будем считать его стремящимся к бесконечности. Тестируемый сервис из всего этого множества должен пропустить строку, содержащую только буквы русского алфавита, римские цифры, дефис и апостроф, размером от 1 до 50 символов. Все возможные вариации этой строки назовем искомыми.

Наши тесты будут делиться на два типа: заведомо верные (мы передали значение, входящее в искомое подмножество) и заведомо ложные (мы передали значение, заведомо не входящее в подмножество). К заведомо ложным значениям отнесем еще и пустое множество, так как поле обязательно. Можем ли мы проверить ВСЕ заведомо верные значения? Подсчитаем: 

Символьная группа:

33заглавные буквы+33строчные буквы+7римских цифр+2символа+1пустота = 76 возможных символов  

Количество возможных значений:
7650+ 7649+ 7648+ ... +762+76 = i=15076i  

Можете сами посчитать, если будет время

Источник: https://habr.com/ru/company/ppr/blog/721238/


Интересные статьи

Интересные статьи

NFT сегодня не обсуждает только ленивый! Невероятный всплеск роста цифрового искусства – самая интересная тенденция за последнее время. Популярность NFT растет не только среди коллекционеров, но и сре...
Значимые показатели производительности требуют глубокого понимания различных потенциальных узких мест, которые могут возникнуть в современных серверах и инфраструктурах ц...
Сколько стоит час работы сотрудника? Это обязаны знать в любой компании, которая продаёт свои часы. А тем, кто не продаёт, а покупает, не лишним будет понять, почему имен...
Добрый день, коллеги! С новым годом!Хочу поделиться с вами реальным опытом и кейсами за последние 2 года, которые были применены на промышленном предприятии, на пути к св...
Есть проблема: найден очень полезный способ описания процессов формирования и преобразования информации, сформирован теоретический базис этого способа публикация в чисто-теоретическом виде (...