TestMace – потужна IDE для роботи з API

Всім привіт! Сьогодні ми хочемо представити на суд IT-громадськості наш продукт – IDE для роботи з API TestMace. Можливо, деякі з вас вже знають про нас з попередніх статей. Однак всеосяжного огляду інструменту не було, тому усуваємо цей прикрий недолік.

TestMace – потужна IDE для роботи з API

Мотивація

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

  • Створення та виконання запитів та сценаріїв (послідовності запитів)
  • Написання різноманітних тестів
  • Генерація тестів
  • Робота з описом API, включаючи імпорт таких форматів як Swagger, OpenAPI, WADL і т.д.
  • Мокування запитів
  • Хороша підтримка одного або кількох ЯП для написання скриптів, включаючи інтеграцію з популярними бібліотеками
  • тощо.

Список можна доповнити до смаку. Причому важливо створити не тільки саму IDE, а й певну інфраструктуру, типу синхронізації хмар, інструментів командного рядка, сервісу онлайн-моніторингу і т.д. Зрештою, тренди останніх років диктують нам не лише потужний функціонал програми, а й його приємний інтерфейс.

Для кого потрібний такий інструмент? Очевидно, всі ті, хто хоч якось пов'язані з розробкою та тестуванням API – розробники та тестувальники =). Причому якщо для перших часто достатньо виконання одиночних запитів і простих сценаріїв, то для тестувальників це один з основних інструментів, який також повинен включати потужний механізм написання тестів з можливістю їх прогону в CI.

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

Швидкий старт

Почнемо з першого знайомства із додатком. Завантажити його можна на нашому сайті. На даний момент підтримуються всі три основні платформи - Windows, Linux, MacOS. Завантажуємо, встановлюємо, запускаємо. При першому запуску ви можете побачити наступне вікно:

TestMace – потужна IDE для роботи з API

Натисніть на плюсик вгорі області контенту для створення першого запиту. Таб із запитом виглядає так:

TestMace – потужна IDE для роботи з API

Зупинимося на ньому детальніше. Інтерфейс запиту дуже нагадує інтерфейс популярних rest-клієнтів, що полегшує міграцію з таких інструментів. Давайте виконаємо перший запит на url https://next.json-generator.com/api/json/get/NJv-NT-U8

TestMace – потужна IDE для роботи з API

Загалом на перший погляд response панель теж не підкидає будь-яких несподіванок. Однак зверну вашу увагу на деякі моменти:

  1. Тіло відповіді має уявлення у вигляді дерева, що по-перше додає інформативності і по-друге дозволяє додати деякі цікаві фішки про які нижче
  2. Є вкладка Assertions, де відображається список тестів для даного запиту

Як можна побачити, наш інструмент можна використовувати як зручний rest-клієнт. Однак ми б тут не зібралися, якби його можливості обмежувалися лише надсиланням запитів. Далі я викладу основні поняття та функціональні можливості TestMace.

Основні поняття та можливості

вузол

Функціонал TestMace розділений за різними типами вузлів. На прикладі вище, ми продемонстрували роботу RequestStep вузла. Однак зараз у додатку також доступні такі типи вузлів:

  • RequestStep. Це вузол, за допомогою якого можна створити запит. Як дочірній елемент він може мати лише один Assertion вузол.
  • Надання. Вузол використовується для написання тестів. Може бути дочірнім вузлом лише для RequestStep вузла.
  • Folder. Дозволяє групувати Folder та RequestStep вузли всередині себе.
  • Project. Це кореневий вузол, що створюється автоматично при створенні проекту. В іншому повторює функціональні можливості Folder вузла.
  • Link. Посилання на Folder або RequestStep вузол. Дозволяє перевикористовувати запити та сценарії.
  • тощо.

Вузли розташовуються в scratches (панель ліворуч внизу, служить для швидкого створення «одноразових» запитів) і в project (панель ліворуч вгорі), на якій зупинимося докладніше.

Проект

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

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

Змінні

Змінні – це один із ключових механізмів програми. Ті з вас, хто працює з інструментами, подібними до TestMace, можливо, вже зрозуміли про що піде мова. Отже, змінні - це спосіб збереження загальних даних та комунікації між нодами. Аналогом, наприклад, є змінні середовища Postman або Insomnia. Однак ми пішли далі та розвинули тему. У TestMace змінні можна встановлювати лише на рівні ноди. Будь-який. Також існує механізм успадкування змінних від предків та перекриття змінних у нащадках. Крім цього існує ряд вбудованих змінних, імена вбудованих змінних починаються з $. Ось деякі з них:

  • $prevStep - Посилання на змінні попередньої ноди
  • $nextStep - Посилання на змінні наступної ноди
  • $parent — те саме, але тільки для предка
  • $response - Відповідь від сервера
  • $env - поточні змінні оточення
  • $dynamicVar — динамічні змінні, що створюються під час виконання сценарію чи запиту

$env — це по суті звичайні змінні рівня Project вузла, проте набір змінних оточення змінюється залежно від обраного оточення.

Звернення до змінної здійснюється через ${variable_name}
Як значення змінної може бути інша змінна, або навіть цілий вираз. Наприклад, як змінна url може бути вираз виду
http://${host}:${port}/${endpoint}.

Окремо варто відзначити можливість надання змінних під час виконання скрипту. Наприклад, часто виникає необхідність зберегти авторизаційні дані (токен або весь заголовок), які прийшли із сервера після успішного логіну. TestMace дозволяє зберігати подібні дані динамічні змінні одного з предків. Для того, щоб уникнути колізій із вже існуючими «статичними» змінними, динамічні змінні винесені в окремий об'єкт $dynamicVar.

Сценарії

Використовуючи всі наведені вище можливості, ви можете виконувати цілі сценарії запитів. Наприклад, створення сутності -> запит сутності -> видалення сутності. У цьому кейсі ви, наприклад, можете використовувати Folder ноду для угрупування кількох RequestStep вузлів.

Автодоповнення та підсвічування значення виразу

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

TestMace – потужна IDE для роботи з API

Варто відзначити, що автодоповнення реалізовано не тільки для змінних, але і, наприклад, для заголовків, значень певних заголовків (наприклад, автодоповнення для Content-Type заголовка), протоколів та багато іншого. Список постійно поповнюється зі зростанням програми.

Скасувати/повторити

Скасування/повтор змін є дуже зручною штукою, проте чомусь реалізується далеко не скрізь (і інструменти для роботи з API не є винятком). Але ми не з таких!) Undo/redo у нас реалізовано в рамках усього проекту, що дозволяє скасувати не лише редагування певної ноди, але й її створення, видалення, переміщення тощо. Найбільш критичні операції потребують підтвердження.

Створення тестів

За створення тестів відповідає Assertion вузол. Однією з головних особливостей є можливість створення тестів без програмування з використанням вбудованих редакторів.

Assertion нода складається з набору assertion-ів (затверджень). Кожен assertion має свій тип, на даний момент існує кілька типів assertion-ів

  1. Compare values ​​– просто порівнює 2 значення. Є кілька операторів порівняння «рівно», «не рівно», «більше», «більше чи одно», «менше», «менше чи одно».

  2. Contains value - перевіряє входження підрядка в рядок.

  3. XPath - перевіряє, що по селектору в XML лежить певне значення.

  4. JavaScript assertion — довільний скрипт мовою javascript, який повертає true у разі успіху та false у разі невдачі.

Зауважу, що тільки останній вимагає від користувача навичок програмування, решта 3 asertion-а створюються за допомогою графічного інтерфейсу. Ось, наприклад, як виглядає діалог створення compare values ​​assertion-а:

TestMace – потужна IDE для роботи з API

Вишнею на торті є швидке створення assertion-ів з респонсу, просто погляньте на це!

TestMace – потужна IDE для роботи з API

Однак такі assertion-и мають очевидні обмеження, при зіткненні з якими ви можете використовувати javascript assertion. І тут TestMace також надає комфортне середовище з автодоповненням, підсвічуванням синтаксису і навіть зі статичним аналізатором.

Опис API

TestMace дозволяє не тільки скористатися API, та й документувати його. При цьому саме опис має також ієрархічну структуру та органічно вписується в решту проекту. Крім цього, на даний момент існує можливість імпорту опису API із Swagger 2.0 / OpenAPI 3.0 форматів. Сам опис не просто лежить мертвим вантажем, а тісно інтегрується з рештою проекту, зокрема, доступне автодоповнення url-ів, HTTP-заголовків, query параметрів та інше, а в майбутньому ми плануємо додати тести на відповідність відповіді опису API.

Шаринг нод

Кейс: вам хотілося б розшарити проблемний запит чи навіть цілий сценарій колезі чи просто приточити його до бага. TestMace покриває і цей кейс: програма дозволяє серіалізувати будь-яку ноду і навіть поддерево в url. Copy-paste і ви вже легко перенесли запит на іншу машину або проект.

Форма зберігання проекту

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

index.yml

children: []
variables: {}
type: RequestStep
assignVariables: []
requestData:
  request:
    method: GET
    url: 'https://next.json-generator.com/api/json/get/NJv-NT-U8'
  headers: []
  disabledInheritedHeaders: []
  params: []
  body:
    type: Json
    jsonBody: ''
    xmlBody: ''
    textBody: ''
    formData: []
    file: ''
    formURLEncoded: []
  strictSSL: Inherit
authData:
  type: inherit
name: Scratch 1

Як бачите, все дуже ясно. За бажання такий формат цілком комфортно редагувати і вручну.

Ієрархія папок у файловій системі повністю повторює ієрархію вузлів у проекті. Наприклад сценарій типу:

TestMace – потужна IDE для роботи з API

Маппится у файловій системі на наступну структуру (показана лише ієрархія папок, але суть зрозуміла)

TestMace – потужна IDE для роботи з API

Що полегшує процес ревію проекту.

Імпорт із Postman

Прочитавши все вищевикладене, деякі користувачі захочуть спробувати (так?) новий продукт або (чим чорт не жартує!) на повну заюзати у своєму проекті. Однак міграцію може зупинити велика кількість напрацювань у тому самому Postman-і. Для таких випадків TestMace підтримує імпорт колекцій із Postman. На даний момент підтримується імпорт без тестів, проте надалі ми не виключаємо їх підтримку.

Плани

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

Хмарна синхронізація

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

CLI

Як уже було сказано вище, продукти рівня IDE не обходяться без усіляких інтеграцій з вже існуючими програмами або workflow. CLI якраз необхідний для інтеграції тестів, написаних у TestMace, у процес continuous integration. Робота над CLI ведеться повним ходом, у ранніх версіях буде запуск проекту із простим консольним репортом. Надалі планується додати виведення звіту у форматі JUnit.

Плагінна система

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

Розширення асортименту типів вузлів

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

  • Script нода — перетворює та розміщує дані, використовуючи js та відповідний API. Використовуючи такий тип ноди, можна зробити штуки, на зразок pre-request і post-request скриптів у Postman.
  • GraphQL нода - підтримка graphql
  • Custom assertion нода – дозволить розширити набір наявних assertion-ів у проекті
    Природно, це не остаточний список, він постійно поповнюватиметься за рахунок, у тому числі, і вашого фідбека.

FAQ

Чим ви відрізняється від Postman?

  1. Концепція нід, яка дозволяє практично нескінченно масштабувати функціональність проекту
  2. Людський формат проекту із збереженням його у файловій системі, що спрощує роботу з використанням систем контролю версій
  3. Можливість створення тестів без програмування та більш просунута підтримка js у редакторі тестів (автодоповнення, статичний аналізатор)
  4. Просунуте автодоповнення та підсвічування поточного значення змінних

Це open-source продукт?

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

За рахунок чого ви мешкаєте?)

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

Висновок

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

Офіційний сайт

Telegram

Млявий

Facebook

Issues-трекер

Чекаємо з нетерпінням ваших побажань та пропозицій!

Джерело: habr.com

Додати коментар або відгук