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

Увогуле-то на першы погляд response панэль таксама не падкідвае якіх бы там ні было нечаканасцяў. Аднак зверну вашу ўвагу на некаторыя моманты:

  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 не выключэнне). Але мы не з такіх!) Undo/redo у нас рэалізавана ў рамках усяго праекту, што дазваляе адмяніць не толькі рэдагаванне вызначанай ноды, але і яе стварэнне, выдаленне, перасоўванне, і т.д. Найбольш крытычныя аперацыі патрабуюць пацверджання.

Стварэнне тэстаў

За стварэнне тэстаў адказвае Assertion вузел. Адной з галоўных асаблівасцяў з'яўляецца магчымасць стварэння тэстаў без праграмавання з выкарыстаннем убудаваных рэдактараў.

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

  1. Compare values ​​- проста параўноўвае 2 значэння. Ёсць некалькі аператараў параўнання "роўна", "не роўна", "больш", "больш або роўна", "менш", "менш або роўна".

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

  3. XPath - правярае, што па селектары ў XML ляжыць вызначанае значэнне.

  4. JavaScript assertion - адвольны скрыпт на мове javascript, які вяртае true у выпадку поспеху і false у выпадку няўдачы.

Заўважу, што толькі апошні патрабуе ад карыстача навыкаў праграмавання, астатнія 3 assertion-а ствараюцца з дапамогай графічнага інтэрфейсу. Вось, напрыклад, як выглядае дыялог стварэння 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-ов у праекце
    Натуральна, гэта не канчатковы спіс, ён будзе ўвесь час папаўняцца за кошт, у тым ліку, і вашага фідбэка.

Часта задаваныя пытанні

Чым вы адрозніваецеся ад Postman?

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

Гэта open-source прадукт?

Не, на дадзены момант зыходнікі зачыненыя, аднак у будучыні мы разглядаем магчымасць адкрыцця зыходнікаў.

За рахунак чаго вы жывяце?)

Нараўне з бясплатнай версіяй мы плануем выпусціць платную версію прадукта. У яе ў першую чаргу ўвойдуць штукі, якія патрабуюць сервернай часткі, напрыклад, сінхранізацыя.

Заключэнне

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

Афіцыйны сайт

Тэлеграма

Млявы

Facebook

Issues-трэкер

Чакаем з нецярпеннем вашых пажаданняў і прапаноў!

Крыніца: habr.com

Дадаць каментар