Чым TestMace лепшы Postman

Чым TestMace лепшы Postman

Усім прывітанне, на сувязі TestMace! Магчыма, многія ведаюць пра нас з нашых папярэдніх артыкулаў. Для тых, хто толькі далучыўся: мы распрацоўваем IDE для працы з API TestMace. Самае часта задаюць пытанне пры параўнанні TestMace з канкуруючымі прадуктамі – «Чым вы адрозніваецеся ад Postman?». Мы вырашылі, што час даць разгорнуты адказ на дадзенае пытанне. Ніжэй мы па пунктах распісалі нашы перавагі перад Паштальён.

Падзел на вузлы

Калі вы працуеце з Postman, то ведаеце, што інтэрфейс запыту змяшчае ўвесь неабходны функцыянал. Тут і скрыпты, і тэсты, і, уласна, самі запыты. Гэта спрашчае працу для пачаткоўцаў, аднак на вялікіх сцэнарах такі падыход не гнуткі. Што калі жадаецца стварыць некалькі запытаў і зрабіць па іх агрэгацыю? Што калі жадаецца выканаць скрыпт без запыту ці некалькі лагічна падзеленых скрыптоў запар? У рэшце рэшт, нядрэнна было б аддзяліць тэсты ад звычайных утылітарных скрыптоў. Акрамя гэтага, падыход «дадаем увесь функцыянал у адзін вузел» з'яўляецца не які маштабуецца – інтэрфейс хутка становіцца перагружаным.

TestMace першапачаткова падзяляе ўвесь функцыянал на розныя тыпы вузлоў. Жадаеш зрабіць запыт? Вось табе request step вузел. Жадаеш напісаць скрыпт? Вось табе скрыпт вузел. Патрэбны тэсты? Калі ласка, Сцвярджэнне вузел. Ах так, вы яшчэ можаце загарнуць усю гэтую справу ў папка вузел. І ўсё гэта лёгка сябар з сябрам камбінуецца. Такі падыход не толькі вельмі гнуткі, але і, у адпаведнасці з прынцыпам адзінасці адказнасці, дазваляе выкарыстоўваць толькі тое, што табе сапраўды патрэбна ў дадзены момант. Навошта мне скрыпты і тэсты, калі я хачу проста зрабіць запыт?

Чалавекачытальны фармат праекта

Паміж TestMace і Postman ёсць канцэптуальнае адрозненне ў спосабе захоўвання. У Postman усе запыты захоўваюцца недзе ў лакальным сховішчы. Калі ёсць неабходнасць расшарыць запыты паміж некалькімі карыстальнікамі, тое трэба скарыстацца ўбудаванай сінхранізацыяй. Насамрэч гэта агульнапрыняты падыход, не пазбаўлены недахопаў. Як наконт бяспекі даных? Бо палітыка некаторых кампаній можа не дазваляць захоўваць дадзеныя ў трэціх асоб. Аднак мы лічым, што TestMace можа прапанаваць сёе-тое лепшае! І імя гэтым паляпшэнню – «чалавекачытальны фармат праекта».

Пачнём з таго, што ў TestMace у прынцыпе ёсць сутнасць "праект". І дадатак першапачаткова распрацоўвалася з прыцэлам на захоўванне праектаў у сістэмах кантролю версій: дрэва праекта практычна адзін у адзін праецыюецца на файлавую структуру, у якасці фармату захоўвання выкарыстоўваецца yaml (без лішніх клямарчыкаў і косак), а файлавае прадстаўленне кожнага вузла дэталёва апісана ў дакументацыі з каментарамі . Але ў большасці выпадкаў вы туды зазіраць не будзеце - усе імёны палёў маюць лагічныя назвы.

Што гэта дае карыстачу? Гэта дазваляе вельмі гнутка змяняць воркфлоў каманды, карыстаючыся звыклымі падыходамі. Напрыклад, распрацоўшчыкі могуць захоўваць праект у тым жа рэпазітары, што і backend. У галінках, апроч змены непасрэдна кодавай базы, распрацоўнік можа выправіць наяўныя сцэнары запытаў і тэсты. Пасля фіксавання змен у рэпазітары (git, svn, mercurial - што вам больш падабаецца) CI (ваша каханая, нікім не навязаная) запускае нашу кансольную ўтыліту testmace-cli, а атрыманая пасля выканання справаздача (напрыклад, у фармаце junit, які таксама падтрымліваецца ў testmace-cli) адпраўляецца ў адпаведную сістэму. Ды і вышэйазначанае пытанне з бяспекай ужо не з'яўляецца праблемай.

Як бачыце, TestMace не навязвае свае экасістэму і парадыгму. Замест гэтага ён лёгка ўбудоўваецца ва ўжо ўстояныя працэсы.

Дынамічныя зменныя

TestMace варта канцэпцыі no-code: калі праблему магчыма вырашыць без выкарыстання кода, мы імкнемся даць такую ​​магчымасць. Праца са зменнымі гэта якраз той функцыянал, дзе ў большасці выпадкаў можна абысціся без праграмавання.

Прыклад: нам прыйшоў адказ ад сервера, і мы жадаем захаваць частку адказу ў зменную. У Postman мы б у тэставым скрыпце (што само па сабе дзіўна) напісалі нешта ў духу:

var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("data", jsonData.data);

Але на нашу думку, напісанне скрыпту для такога простага і часта выкарыстоўванага сцэнара выглядае залішне. Таму ў TestMace ёсць магчымасць прысвоіць зменнай кавалак адказу, выкарыстоўваючы графічны інтэрфейс. Зірніце наколькі гэта проста:

Чым TestMace лепшы Postman

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

var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("data", CryptoJS.MD5(jsonData.data));

Што ж, для гэтага ў TestMace ёсць скрыпт вузел, які і пакрывае дадзены сцэнар. Для таго, каб прайграць папярэдні кейс, але ўжо ў выкананні TestMace, неабходна ўслед за запытам стварыць script вузел і ў якасці скрыпту выкарыстоўваць наступны код:

const data = tm.currentNode.prev.response.body.data;
tm.currentNode.parent.setDynamicVar('data', crypto.MD5(data));

Як бачыце, кампазіцыя вузлоў і тут саслужыла добрую службу. А для такога простага выпадку, які апісаны вышэй, вы і зусім можаце проста прысвоіць выраз ${crypto.MD5($response.data)} зменнай, якая ствараецца праз графічны інтэрфейс!

Стварэнне тэстаў праз GUI

Postman дазваляе ствараць тэсты з дапамогай напісання скрыптоў (у выпадку Postman-а гэта JavaScript). У дадзенага падыходу суцэльныя плюсы - практычна неабмежаваная гнуткасць, наяўнасць гатовых рашэнняў і г.д.

Аднак рэаліі часта такія (не мы такія, жыццё такое), што тэсціроўшчык не мае навыкаў праграмавання, а карысць камандзе хацелася б прыносіць ужо зараз. Для такіх выпадкаў, прытрымліваючыся канцэпцыі no-code, TestMace дазваляе ствараць простыя тэсты праз графічны інтэрфейс, не звяртаючыся да напісання скрыптоў. Вось, напрыклад, як выглядае працэс стварэння цеста, які параўноўвае значэнні на роўнасць:

Чым TestMace лепшы Postman

Аднак стварэнне тэстаў у графічным рэдактары не адмяняе магчымасці напісання тэстаў у кодзе. Тут усё тыя ж бібліятэкі, што і ў script вузле, і чай для напісання тэстаў.

Часцяком узнікаюць такія сітуацыі, калі некаторы запыт ці нават цэлы сцэнар неабходна выканаць некалькі разоў у розных частках праекту. Прыкладам такіх запытаў можа служыць кастамная шматэтапная аўтарызацыя, прывядзенне акружэння да патрэбнага стану і г.д. Увогуле, калі казаць у тэрмінах моў праграмавання, тое жадалася бы мець функцыі, якія можна перавыкарыстоўваць у розных частках прыкладання. У TestMace дадзеную функцыю выконвае спасылка вузел. Выкарыстоўваць яго вельмі проста:
1) стварыце запыт або сцэнар
2) стварыце вузел тыпу Link
3) у параметрах укажыце спасылку на сцэнар, створаны на першым кроку

У больш прасунутым варыянце, вы можаце паказаць, якія дынамічныя зменныя са сцэнара пракідваць на ўзровень вышэй адносна спасылкі. Гучыць заблытана? Дапусцім мы стварылі Folder з імем create-post, усярэдзіне якога на дадзены вузел прызначаецца дынамічная пераменная. postId. Цяпер у Link вузле create-post-link вы можаце відавочна паказаць, каб пераменная postId прызначалася продку create-post-link. Дадзены механізм (зноў-такі, кажучы праграмісткай мовай) можна выкарыстоўваць для вяртання выніку з "функцыі". Увогуле крута, DRY у поўны рост і зноў ніводнага радка кода не пацярпела.

Чым TestMace лепшы Postman

Што да Postman, то feature request на перавыкарыстанне запытаў вісіць з 2015 года, і накшталт нават ёсць некаторыя намёкі, што над гэтай праблемай працуюць. У бягучым выглядзе Postman вядома мае магчымасць змены струменя выканання, што ў тэорыі, мусіць, дазваляе рэалізаваць падобныя паводзіны, але гэта хутчэй брудны хак, чым сапраўды працоўны падыход.

Іншыя адрозненні

  • Большы кантроль над вобласцю бачнасці зменных. Найменшай скоупам, усярэдзіне якога можна вызначыць зменную ў Postman, з'яўляецца collection. TestMace дазваляе вызначыць зменныя для любога запыту ці тэчкі. У Postman Share collection дазваляе экспартаваць толькі калекцыі, тады як у TestMace шарынг працуе для любога вузла.
  • TestMace падтрымлівае спадчынныя загалоўкі, якія па змаўчанні могуць падстаўляцца ў даччыныя запыты. У Postman на гэты конт ёсць задача, і яна нават зачынена, але ў якасці рашэння прапануецца… выкарыстоўваць скрыпты. У TestMace гэта ўсё канфігуруецца праз GUI і ёсць магчымасць апцыянальнага адключэння спадчынных загалоўкаў у пэўных нашчадках
  • Undo/Redo. Працуе не толькі пры рэдагаванні вузлоў, але і пры перамяшчэнні, выдаленні, перайменаванні і іншых аперацыях, якія мяняюць структуру праекта
  • Файлы, прымацаваныя да запытаў, становяцца часткай праекту і захоўваюцца разам з ім, пры гэтым выдатна сінхранізуюцца, у адрозненне ад Postman. (Так, больш не трэба кожны раз уручную выбіраць файлы пры кожным запуску і перадаваць калегам у архівах)

Фічы, якія ўжо на падыходзе

Мы не змаглі выстаяць ад спакусы прыадчыніць заслону таямніцы над наступнымі рэлізамі, тым больш, калі функцыянал вельмі смачны і ўжо праходзіць предрелизную шліфоўку. Такім чынам, сустракаем.

функцыі

Як вядома, для генерацыі значэнняў у Postman выкарыстоўваюцца так званыя дынамічныя зменныя. Спіс іх вялікі і пераважная большасць функцый служаць для генерацыі фэйкавых значэнняў. Напрыклад, для генерацыі рандомнага email неабходна напісаць:

{{$randomEmail}}

Аднак, бо гэта зменныя (хай і дынамічныя), іх нельга выкарыстоўваць як функцыі: яны не параметрызуемы, такім чынам узяць хэш ад радка не атрымаецца.

У TestMace мы плануем дадаць "сумленныя" функцыі. Прама ўсярэдзіне ${} можна будзе не толькі звярнуцца да зменнай, але і выклікаць функцыю. Г.зн. калі трэба згенераваць праславуты фэйкавы email, мы проста напішам

${faker.internet.email()}

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

А што, калі мы хочам палічыць хэш ад радка? Лёгка!

${crypto.MD5($dynamicVar.data)}

Можна заўважыць, што ў якасці параметраў нават можна перадаваць зменныя! У гэтым месцы дапытлівы чытач можа западозрыць нядобрае…

Выкарыстанне JavaScript у выразах

… І не дарма! Калі фармаваліся патрабаванні да функцый, мы раптам прыйшлі да высновы, што ў выразах трэба даваць пісаць валідны javascript. Таму зараз вы вольныя пісаць выразы ў духу:

${1 + '' + crypto.MD5('asdf')}

І ўсё гэта без скрыптоў прама ў палях уводу!

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

Чым TestMace лепшы Postman

Прасунуты аўтададатак

На дадзены момант TestMace мае стандартны аўтададатак, які выглядае наступным чынам:

Чым TestMace лепшы Postman

Тут акрамя аўтадапаўняемай радкі паказваецца да чаго належыць дадзены радок. Працуе дадзены механізм толькі ў выразах, апраўленых дужкамі ${}.

Як можна заўважыць, дадаліся візуальныя маркеры, якія паказваюць на тып зменнай (напрыклад, радок, лік, масіў і г.д.). Таксама можна мяняць рэжымы аўтадапаўнення (напрыклад, можна выбраць аўтадапаўненне зменнымі або загалоўкамі). Але нават гэта не самае галоўнае!

Па-першае, аўтададатак працуе нават у выразах (дзе гэта магчыма). Вось як гэта выглядае:

Чым TestMace лепшы Postman

І па-другое, зараз аўтадапаўненне даступна і ў скрыптах. Зірніце, як гэта працуе!

Чым TestMace лепшы Postman

Дадзены функцыянал параўноўваць з Postman няма сэнсу - там аўтададатак абмяжоўваецца толькі статычнымі спісамі зменных, загалоўкаў і іх значэнняў (папраўце мяне, калі я што забыўся). Скрыпты не аўтадапаўняюцца 🙁

Заключэнне

У кастрычніку споўніўся год з пачатку распрацоўкі нашага прадукта. За гэты час мы паспелі зрабіць шмат чаго і па некаторых параметрах дагналі нашых канкурэнтаў. Але як бы там ні было, наша мэта - зрабіць сапраўды зручны інструмент для працы з API. Нас чакае яшчэ шмат працы, вось прыкладны план развіцця нашага праекта на бліжэйшы год: https://testmace.com/roadmap.

Ваш фідбэк дазволіць нам лепш зарыентавацца ў багацці фіч, а ваша падтрымка - надае нам сіл і ўпэўненасці ў тым, што мы робім патрэбную справу. Так атрымалася, што сёння важны дзень для нашага праекта - дзень публікацыі TestMace на ProductHunt. Калі ласка, падтрымайце наш праект, гэта вельмі важна для нас. Тым больш, што на нашай PH старонцы сёння прывабная прапанова, і яна абмежавана

Крыніца: habr.com

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