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

Здравейте на всички! Днес искаме да представим на IT общността нашия продукт — IDE за работа с API. TestMaceВъзможно е някои от вас вече да знаят за нас от предишните статии. Въпреки това не е имало всеобхватен преглед на инструмента, така че сега се заемаме с този неприятен недостиг.

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

Мотивация

Бихме искали да започнем с това как, всъщност, стигнахме до такова решение и решихме да разработим наш инструмент за напреднала работа с API. Започваме със списък на функционалностите, които продуктът, за който смятаме, че можем да кажем, че е «IDE за работа с API», трябва да съдържа:

  • Създаване и изпълнение на заявки и сценарии (последователности от заявки)
  • Писане на различни видове тестове
  • Генериране на тестове
  • Работа с описание на API, включително импорт от формати като Swagger, OpenAPI, WADL и т.н.
  • Мокиране на заявки
  • Добра поддръжка на един или повече езика за програмиране за писане на скриптове, включително интеграция с популярни библиотеки
  • и т.н.

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

За кого е нужен такъв инструмент? Очевидно за всички, които са свързани с разработка и тестване на API — разработчици и тестери =). И докато за първите често е достатъчно да изпълняват отделни заявки и прости сценарии, за тестерите това е един от основните инструменти, който трябва да включва мощен механизъм за писане на тестове с възможност за тяхното изпълнение в CI.

И така, следвайки тези насоки, започнахме да създаваме нашия продукт. Нека разгледаме какво сме постигнали до момента.

Бързо начало

Начало на първата запознанство с приложението. Можете да го изтеглите от на нашия сайт. В момента се поддържат всички 3 основни платформи — 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 — всъщност, това са обикновени променливи на проектно ниво, но наборът от променливи на околната среда се променя в зависимост от избраната среда.

Обращението към променлива се извършва чрез ${variable_name}
Като стойност на променливата може да бъде друга променлива или дори цяла израз. Например, като променлива url може да бъде израз от вида
http://${host}:${port}/${endpoint}.

Отделно ще отбележим възможността за присвояване на променливи по време на изпълнението на скрипта. Например, често се появява необходимостта да се запазят авторизационни данни (токен или целия заглавие), които са дошли от сървъра след успешен логин. TestMace позволява запазването на подобни данни в динамични променливи на един от предците. За да се избегнат колизии с вече съществуващите 'статични' променливи, динамичните променливи са изнесени в отделен обект $dynamicVar.

Сценарии

Използвайки всички горепосочени възможности, можете да изпълнявате цели сценарии на заявки. Например, създаване на същество -> заявка за същество -> изтриване на същество. В този случай можете да използвате Folder възел за групиране на няколко RequestStep възли.

Автодовършване и подсветка на стойността на израза

За удобна работа с променливи (и не само) е необходимо автоматично допълване. Разбира се, е важно и осветляването на стойността на израза, за да стане по-лесно и удобно да се уточни на какво точно равнява съответната променлива. Тук е именно случаят, когато е по-добре да видиш веднъж, отколкото сто пъти да чуеш:

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

Важно е да се отбележи, че автоматичното допълване е реализирано не само за променливи, но и, например, за заглавия, стойности на определени заглавия (например, автоматично допълване за заглавието Content-Type), протоколи и много други. Списъкът постоянно се допълва с разширяването на приложението.

Undo/redo

Отмяната/повторът на промени е много удобен, но по някаква причина се реализира далеч не навсякъде (и инструментите за работа с API не са изключение). Но ние не сме от такива!) Undo/redo е реализирано в рамките на целия проект, което позволява отменяне не само на редактиране на определен възел, но и на неговото създаване, изтриване, преместване и т.н. Най-критичните операции изискват потвърждение.

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

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

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

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

  2. Contains value — проверява за наличието на подстринга в строката.

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

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

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

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

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

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

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

Описание на API

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

Споделяне на възли

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

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

В момента всеки възел се съхранява в отделен файл с разширение 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. В момента се поддържа импорт без тестове, но в бъдеще не изключваме и тяхната поддръжка.

Планове

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

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

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

CLI

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

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

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

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

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

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

Често задавани въпроси

Чем се различавате от Postman?

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

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

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

С какво печелите?

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

Заключение

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

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

Телеграм

Slack

Facebook

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

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

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

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