TestMace — мощна IDE за работа с API

Здравейте на всички! Днес искаме да представим нашия продукт — IDE за работа с API на IT общността. 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

На пръв поглед панелът с отговори също не предлага никакви неочаквани изненади. Въпреки това, бих искал да обърна внимание на някои моменти:

  1. Тялото на отговора е представено под формата на дърво, което от една страна добавя информативност и от друга страна позволява да добавим някои интересни функции, които ще обсъдим по-долу.
  2. Има таб за Assertions, в който се показва списък с тестове за това запитване.

Както можете да забележите, нашият инструмент може да се използва като удобен REST клиент. Въпреки това, нямаше да сме тук, ако възможностите му се ограничават само до изпращане на запитвания. По-нататък ще изложа основните понятия и функционалности на TestMace.

Основни понятия и възможности

Възел

Функционалността на TestMace е разделена на различни типове възли. На примера по-горе демонстрирахме работата на RequestStep възел. Въпреки това, в приложението в момента са достъпни следните типове възли:

  • RequestStep. Това е възел, с който можете да създадете запитване. Като дъщерен елемент, той може да има само един Assertion възел.
  • 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). Но ние не сме от тези!) Отмяната/повторът при нас е внедрена в целия проект, което позволява да отмените не само редактирането на определен възел, но и неговото създаване, изтриване, преместване и т.н. Най-критичните операции изискват потвърждение.

Създаване на тестове

За създаването на тестове отговаря възел Assertion. Една от основните му характеристики е възможността за създаване на тестове без програмиране, с използване на вградените редактори.

Възелът Assertion се състои от набор от assertion-и. Всеки assertion има свой тип, в момента съществуват няколко типа assertion-и.

  1. Сравняване на стойности — просто сравнява 2 стойности. Има няколко оператора за сравнение: "равно", "не равно", "по-голямо", "по-голямо или равно", "по-малко", "по-малко или равно".

  2. Съдържа стойност — проверява включването на подстринг в низ.

  3. XPath — проверява, че за селектора в XML е зададена определена стойност.

  4. JavaScript assertion — произволен скрипт на JavaScript, който връща true при успех и false при провал.

Забележете, че само последният изисква от потребителя умения за програмиране, останалите 3 assertion-а се създават с помощта на графичния интерфейс. Ето как изглежда диалогът за създаване на assertion за сравняване на стойности:

TestMace — мощна IDE за работа с API

Вишенката на тортата е бързото създаване на assertion-и от отговора, просто погледнете това!

TestMace — мощна IDE за работа с API

Обаче такива assertion-и имат очевидни ограничения, при сблъсък с които можете да използвате javascript assertion. И тук TestMace предлага комфортна среда с автоматично допълване, подсветка на синтаксиса и дори статичен анализатор.

Описание на API

TestMace не само просто предоставя API, но и го документира. Описанието има иерархична структура и е органично интегрирано в останалата част на проекта. В момента съществува и възможност за импорт на описание на API от Swagger 2.0 / OpenAPI 3.0 формати. Самото описание не е мъртво, а тясно интегрирано с останалата част на проекта, включително автоматично допълване на URL адреси, HTTP заглавия, параметри на заявката и други, а в бъдеще планираме добавяне на тестове за съответствие на отговора с описанието на API.

Споделяне на ноди

Пример: искате да споделите проблемна заявка или дори целия сценарий с колега, или просто да я прикачите към бъг. TestMace покрива и този случай: приложението позволява сериализиране на всяка нода и дори поддърво в URL. Копирате-ваш и вече лесно прехвърляте заявката на друга машина или проект.

Човеконбираем формат за съхранение на проекта

В момента всеки възел се съхранява в отделен файл с разширение yml (както при случая с нода за проверка), или в папка с името на нода и файл index.yml в нея.
Ето как изглежда файлът със заявка, който направихме в прегледа по-горе:

index.yml

деца: []
променливи: {}
тип: RequestStep
присвойтеПроменливи: []
данни за заявката:
  заявка:
    метод: GET
    url: 'https://next.json-generator.com/api/json/get/NJv-NT-U8'
  заглавия: []
  деактивираниНаследствениЗаглавия: []
  параметри: []
  тяло:
    тип: Json
    jsonBody: ''
    xmlBody: ''
    textBody: ''
    formData: []
    файл: ''
    formURLEncoded: []
  строгSSL: Наследи
data за удостоверяване:
  тип: наследи
име: Scratch 1

Както виждате, всичко е напълно ясно. При желание, този формат може да се редактира удобно и ръчно.

Иерархията на папките в файловата система напълно повтаря иерархията на възлите в проекта. Например сценарий, който изглежда така:

TestMace — мощна IDE за работа с API

Мапва се в файловата система на следната структура (показана е само иерархията на папките, но същността е ясна)

TestMace — мощна IDE за работа с API

Това улеснява процеса на преглед на проекта.

Импорт от Postman

След като прочетете всичко по-горе, някои потребители ще искат да пробват (нали?) новия продукт или (чем черт не шутит!) напълно да го използват в проекта си. Въпреки това, миграцията може да бъде спряна от голямо количество работа в същия Postman. За такива случаи TestMace поддържа импорт на колекции от Postman. В момента поддържа внос без тестове, но в бъдеще не изключваме и тяхната поддръжка.

Планове

Надявам се много от вас, които прочетохте до този момент, да се заинтересувахте от нашия продукт. Но това не е всичко! Работата по продукта продължава с пълна сила и ето някои функции, които планираме да добавим в близко време.

Облачна синхронизация

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

CLI

Както беше споменато по-горе, продуктите от клас IDE не могат да минат без разнообразие от интеграции с вече съществуващи приложения или работни процеси. CLI е абсолютно необходим за интеграция на тестовете, написани в TestMace, в процеса на непрекъсната интеграция. Работата по CLI се извършва с пълна сила, в ранните версии ще се задейства проект с прост конзолен отчет. В бъдеще планираме да добавим извеждане на отчета в формат JUnit.

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

Въпреки цялата мощ на нашия инструмент, наборът от случаи, които изискват решение, е безкраен. В крайна сметка, има задачи, специфични за конкретен проект. Именно затова планираме добавяне на SDK за разработка на плъгини, така че всеки разработчик да може да добави функционалност по свой вкус.

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

Този набор от възли не покрива всички случаи, необходими на потребителя. Възлите, които планираме да добавим:

  • Script възел — преобразува и разполага данни, използвайки js и съответния API. Използвайки такъв тип възел, могат да бъдат направени неща като pre-request и post-request скриптове в Postman.
  • GraphQL възел — поддръжка на graphql
  • Custom assertion възел — ще позволи разширяване на набора от налични assertion-и в проекта
    Разбира се, това не е окончателният списък, той постоянно ще се допълва, благодарение на вашите отзиви.

ЧЗВ

Какво ви различава от Postman?

  1. Концепцията за възли, която позволява практически безкрайно разширяване на функционалността на проекта
  2. Човешко четим формат на проекта, записан в файловата система, което улеснява работата с използването на системи за контрол на версиите
  3. Възможност за създаване на тестове без програмиране и по-усъвършенствана поддръжка на js в редактора за тестове (автодопълване, статичен анализатор)
  4. Разширено автоматично допълване и подсветка на текущите стойности на променливите

Това ли е open-source продукт?

Не, в момента изходният код е затворен, но в бъдеще разглеждаме възможността за отваряне на изходния код.

Как с какво печелите?

Седоседно с безплатната версия, планираме да пуснем платена версия на продукта. В нея основно ще отидат елементи, които изискват сървърна част, например, синхронизация.

Заключение

Нашият проект напредва бързо към стабилен релиз. Вече сега продуктът може да се използва, а положителните отзиви на нашите ранни потребители го потвърдиха. Активно събираме обратна връзка, защото без тясно сътрудничество с общността е невъзможно да се изгради добър инструмент. Може да ни намерите тук:

Официален сайт

Telegram

Slack

Facebook

Тракер за проблеми

Очакваме с нетърпение вашите желания и предложения!

Източник: habr.com

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster