AI-система автоматичного тестування API під ключ

Ручний регрес API не встигає за частотою релізів: контракти ламаються на проді, а команда витрачає дні на повторну перевірку тих самих сценаріїв. Ми розробляємо AI-систему тестування API під ключ — вона сама знаходить розбіжності у відповідях сервісів і скорочує час регресійного циклу в рази. Обговоримо задачу та повернемося з оцінкою й планом.
Часті запитання

AI тестування API: де ламаються контракти сервісів

Найдорожча відмова — не сервіс, що впав, а тихо змінений контракт. Поле перейменували, тип звузили, з відповіді зникло обов'язкове поле — сервіс повертає код успіху, а споживач розбирає порожній об'єкт. Помилка спливає не на розгортанні, а через добу, у звіті, який рахує не те.

Класичні автотести API таку деградацію ловлять погано: вони написані під конкретний сценарій і перевіряють те, що хтось зафіксував руками. Між перевіркою й фактичною відповіддю накопичується розбіжність схем — поле додали, тест не розширили. Автотести API зелені, а сумісність уже порушена.

Ручний регрес впирається в темп змін: поки інженер проходить сценарії за чек-лістом, команда викочує наступну версію, і перевіряється вже застарілий стан. Частина шляхів не покрита взагалі — їх просто нікому пам'ятати, а зміна в них виявляється лише скаргою з експлуатації.

Причина не в дисципліні, а в тому, що перевірка контрактів живе окремо від коду й опису API. AI тестування API це розриває: перевірки будуються зі специфікації OpenAPI і фактичних відповідей сервісу, а не з пам'яті автора тесту.

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

Розбираємо, як це закривається на живих сервісах: що саме порівнюється, які розбіжності блокують розгортання і що свідомо залишається на ручну перевірку.

Що змінюється в регресійному циклі після впровадження

Регресійний цикл до впровадження впирається в три вузькі місця: покриття тримається на ручних перевірках, прогін займає ніч, розбір падінь з'їдає ранок команди. Контрольні точки нижче показують, що саме змінюється після впровадження — і наскільки.

  • Покриття сценаріїв. Система розбирає специфікацію OpenAPI, добудовує негативні гілки, перевірки прав доступу та граничні значення. Частка покритих сценаріїв зростає з 20–30% до 80–90%, нові методи потрапляють у регрес автоматично.
  • Час прогону перевірок. Набір іде паралельно, повний регрес займає хвилини замість ночі, димовий прогін — на кожен коміт. Розбіжність контракту виявляється до збирання релізної гілки.
  • Розбір падінь. Автотріаж відділяє реальні дефекти від нестійких перевірок і додає запит, відповідь та різницю в контракті. Час розбору одного падіння падає з 30–40 хвилин до 5–10.
  • Зниклі класи відмов. Несумісні зміни схеми, зниклі обов'язкові поля, змінені коди відповідей і просівший відклик під навантаженням не доходять до експлуатації. Разом із ними йде вартість простою та аварійних випусків.
  • Навантаження на команду. Ручний прогін замінюється роботою з правилами та розбором звіту: інженери займаються розвитком сервісу, а не проклікуванням колекції.

Способи перевірки API: генеративні та контрактні тести

Вибір режиму перевірки визначається двома факторами: зрілістю сервісу та якістю документації. Якщо схема запитів актуальна й версіонується разом із кодом, контрактні тести API дають найшвидший зворотний зв'язок — розбіжність видно на кожній зміні, а не на прийманні.

Коли документація відстає від реальної поведінки, генеративні перевірки відновлюють модель із накопиченого трафіку й самі пропонують сценарії. Нижче — порівняння за застосовністю та обмеженнями.

Порівняння режимів перевірки

Режим перевірки Коли підходить Обмеження підходу
Контрактні тести за схемою Схема запитів актуальна й змінюється разом із кодом Ловить розбіжності з контрактом, але не перевіряє сенс даних і наскрізні сценарії
Генеративні перевірки за специфікацією Потрібно покрити багато сполучень параметрів і типів Якість залежить від повноти опису, можливі спрацьовування на нестрогих типах
Генеративні перевірки за трафіком Документації немає або вона застаріла, сервіс давно в роботі Не знає про непокриті гілки й відтворює частину старих дефектів
Гібридний режим Частина контрактів стабільна, частина активно змінюється Потребує налаштування пріоритетів і розбору розбіжностей між джерелами

На практиці режими майже завжди комбінуються: контрактний шар закриває стабільне ядро, генеративний — нові та слабко описані методи. Обмеження кожного підходу ми фіксуємо заздалегідь, щоб не видавати шум генератора за знайдений дефект.

Як ми впроваджуємо: етапи інженерної роботи

Починаємо не з написання перевірок, а з інвентаризації: інакше автоматизація закриває другорядні методи й пропускає те, що ламається на релізі. Кожен етап закінчується артефактом, за яким видно результат.

  1. Аудит сервісів. Збираємо специфікації та фактичні контракти, звіряємо їх між собою, позначаємо зовнішні залежності й методи, які змінюються найчастіше. На виході — перелік сервісів із пріоритетом перевірки.
  2. Карта покриття. Зіставляємо методи зі сценаріями: успішний виклик, граничні значення, відмова авторизації, повторне надсилання, недоступна залежність. Окремо фіксуємо, що свідомо залишається ручним.
  3. Налаштування оточення. Ізольований стенд із передбачуваними даними: зовнішні сервіси підміняються, стан скидається між прогонами. Це прибирає «плаваючі» результати через порядок запуску.
  4. Наповнення перевірок. Модель пропонує перевірки за специфікацією та свіжими змінами, інженери відсіюють зайве й дописують логіку там, де потрібен контекст предметної області.
  5. Вбудовування в конвеєр збирання. Прогін іде на кожну зміну, звіт називає конкретний метод і розбіжність, а не «впало сорок тестів».
  6. Перевірка на реальних сценаріях. Проганяємо набір на копії робочого контуру з живим трафіком, звіряємо з журналами, гасимо хибні спрацьовування — так перевірки не розсипаються на першому ж релізі.
  7. Передача команді. Розбір логіки, регламент додавання перевірок, супровід перших прогонів: ваші інженери правлять набір без нас.

Що залишається в проєкті після впровадження

Впровадження закінчується не показом працюючого прототипу, а передачею контуру, який ваша команда веде сама. Ось що залишається в проєкті.

  • Набори перевірок. Згруповані за сервісами та критичністю: основні сценарії, граничні значення, негативні відповіді, розмежування прав. У кожної перевірки — пріоритет і зрозуміла причина спрацьовування.
  • Схеми інтеграції. Де система вбудовується у ваш конвеєр збирання, що запускається на кожну зміну в репозиторії, куди йдуть звіти й як налаштувати повідомлення в прийнятий у вас канал.
  • Правила доступу до даних. Які тестові дані використовуються, що маскується, що не покидає ваш контур, у кого права на зміну перевірок і перегляд результатів.
  • Регламент запуску. Періодичність прогонів, хто і в який строк розбирає падіння, що вважається блокуючим для релізу, як тимчасово вимкнути шумну перевірку.
  • Документація. Як додати перевірку, розібрати хибне спрацьовування, оновити схему після зміни контракту — з прикладами й розбором типових помилок.
  • Панель результатів. Зведення за прогонами: частка пройдених перевірок, час прогону, історія падінь для кожного сервісу.
  • Передача команді. Розбір з інженерами, які поведуть систему далі, і період, коли ми залишаємося на зв'язку.

Кожен артефакт робочий, а не описовий: його можна відкрити, застосувати й передати новому інженеру без нас.

Кейс: регрес платіжних сценаріїв до і після

До автоматизації

Платіжний контур — це десятки зв'язок: створення платежу, підтвердження, часткове повернення, повторне повернення, відмова банку, таймаут провайдера, повторне надсилання того самого запиту.

Регрес за ними ганяли вручну перед кожним релізом: інженери проходили чек-ліст, частину перевірок — через веб-інтерфейс, частину — прямими запитами до API. Повний прогін займав два дні, а рідкісні відмови в нього не потрапляли — руки доходили лише до «зелених» сценаріїв.

Що змінили

Контракт провайдера зафіксували у специфікації OpenAPI і зробили її джерелом правди: перевірки будуються від неї, а не від пам'яті інженера. Сценарії розібрали на атомарні кроки, а негативні гілки — таймаут, повтор запиту, відмову банку — винесли в окремий набір.

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

Метрики до і після

Метрика До Після
Час повного регресу два дні ручної роботи 35–40 хвилин на кожну зміну коду
Частка покритих перевірками шляхів близько 45% понад 90%
Пропущені дефекти на реліз 2–3 у платіжних сценаріях нуль на покритих шляхах за квартал

Релізи платіжного контуру перестали бути нічним чергуванням: поломки ловляться на прогоні, а не в продакшні, і відкат до попередньої версії більше не потребує ручної переперевірки всього контуру.

Що робити, якщо частину сервісів покрито ручними регресами

Ручну регресію не можна вимикати в день старту автоматизації — перехід іде паралельно. AI-система відтворює ті самі сценарії на тому самому стенді, а вердикти звіряються з ручними: розбіжність розбирається як дефект набору, а не як привід відкотити перехід.

З ручного списку сценарій зникає лише після серії прогонів, де автоматика стабільно дає той самий результат.

Пріоритет задаємо трьома ознаками: як часто сервіс змінюється, наскільки дорогий пропущений дефект і чи відтворювані тестові дані. Першими оцифровуємо контрактні перевірки — коди відповідей, схему тіла, обов'язкові поля, ідемпотентність повторного запиту з тим самим ключем. Це дешеві в підтримці сценарії, і саме вони ловлять більшість поломок під час випуску змін.

Далі вмикається гібридний режим: автоматичний набір проганяється на кожне злиття в основну гілку й дає вердикт за хвилини, а ручна регресія стискається до приймальної.

У ній залишаються бізнес-ланцюжки, зав'язані на зовнішні системи, перевірка нових можливостей до стабілізації контракту та дослідницькі сценарії, де важливий досвід інженера, а не звірка з еталоном.

Дорожня карта покриття йде трьома хвилями: спочатку димові та контрактні перевірки, потім критичні бізнес-ланцюжки, потім негативні сценарії та комбінації даних.

Просування вимірюємо часткою критичних шляхів під автоматичною перевіркою та часом до вердикту після зміни коду, а не числом написаних тестів.

Технічні сумніви: хибні спрацьовування, доступи, підтримка

Хибні спрацьовування — головна причина, через яку команда перестає дивитися на звіт автотестів: перевірка падає на коректній відповіді, і довіра до прогону втрачається за тиждень.

Тому перевірки будуються від контракту OpenAPI, а не від поточної поведінки сервісу: валідуються схема, коди відповідей, обов'язковість і типи полів, а не побайтовий збіг тіла.

Другий шар — ізоляція тестових даних: кожен прогін піднімається на окремому контурі, отримує власний набір даних і не залежить від порядку запуску та від активності сусідніх команд. Нижче — питання, які найчастіше задають інженери на прийманні.

Що буде, якщо контракт зміниться?

Перевірки генеруються зі специфікації, а не пишуться руками під кожну відповідь. При зміні схеми достатньо оновити джерело — перевірки перезбираються з нього, а розбіжності падають окремою категорією «контракт змінився», а не змішуються з випадковими помилками.

Як ви гарантуєте ізоляцію даних?

Тестові облікові записи з обмеженими правами, окрема база та черга, недоступність продуктивного контуру. Дані позначаються й видаляються після прогону, персональні поля маскуються — перевірки не залишають слідів у спільних оточеннях.

Що з підтримкою після передачі?

Передаємо репозиторій перевірок, схеми, опис стендів і регламент правки при зміні контракту. Супровід обмежений обумовленим періодом: закриваємо збої прогонів і оновлюємо перевірки; далі підтримку веде ваша команда або ми за окремою угодою.

Обговоримо задачу: що потрібно для старту

Щоб оцінка була предметною, а не «за відчуттями», на старті потрібен мінімум вхідних даних. Повне технічне завдання не потрібне — достатньо того, що у команди вже є під рукою. Чим конкретніше введення, тим точніша схема перевірок і план робіт.

  • опис сервісів і методів, які потрібно покрити автотестами, з пріоритетами: що критично для продукту, а що можна відкласти;
  • приклади реальних запитів і відповідей, включно з кодами й текстами помилок — на них будується модель перевірок і набір еталонних сценаріїв;
  • доступи до тестового контуру, тестових облікових записів і наборів даних;
  • опис авторизації, ролей і обмежень за правами: від цього залежить структура сценаріїв і порядок їх виконання;
  • список відомих проблем — сценарії, що падали, нестабільні методи, історія ручних перевірок та інцидентів;
  • вимоги до прогонів: як часто запускати перевірки, що вважати блокуючим, куди і в якому вигляді надсилати звіт;
  • обмеження за навантаженням і за роботою з персональними даними на тестових стендах.

Далі розбираємо задачу: вивчаємо введення, уточнюємо прогалини, збираємо схему рішення — які перевірки автоматизуємо, як вбудовуємо прогони в процес збирання та розбору помилок.

Потім повертаємося з оцінкою та планом робіт: етапи, результат на кожному з них і точки, де потрібен доступ або рішення з вашого боку. Опишіть задачу — повернемося з оцінкою та планом.

Напрямки AI-розробки

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1141