{"id":54188,"date":"2019-12-20T00:00:00","date_gmt":"2019-12-19T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/chem-testmace-luchshe-postman"},"modified":"2020-02-18T14:02:10","modified_gmt":"2020-02-18T11:02:10","slug":"chem-testmace-luchshe-postman","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/news\/chem-testmace-luchshe-postman","title":{"rendered":"Co sprawia, \u017ce TestMace jest lepszy od Postman?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Co sprawia, \u017ce TestMace jest lepszy od Postman?\" src=\"\/wp-content\/uploads\/2019\/12\/4b61986c287c32a4cefeb2f805fc228f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cze\u015b\u0107 wszystkim, z tej strony <noindex><a rel=\"nofollow\" href=\"https:\/\/testmace.com\/\">TestMace<\/a><\/noindex>! Mo\u017cliwe, \u017ce wielu z was zna nas z <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/458372\/\">naszych<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/462585\/\">poprzednich<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/458964\/\">artyku\u0142\u00f3w<\/a><\/noindex>. Dla tych, kt\u00f3rzy dopiero zaczynaj\u0105: opracowujemy IDE do pracy z API TestMace. Najcz\u0119\u015bciej zadawane pytanie przy por\u00f3wnywaniu TestMace z konkurencyjnymi produktami to: \u201eCzym r\u00f3\u017cnicie si\u0119 od Postmana?\u201d. Zdecydowali\u015bmy, \u017ce nadszed\u0142 czas, aby odpowiedzie\u0107 na to pytanie w szczeg\u00f3\u0142ach. Poni\u017cej w punktach przedstawiamy nasze zalety w por\u00f3wnaniu do <noindex><a rel=\"nofollow\" href=\"https:\/\/www.getpostman.com\/\">Postman<\/a><\/noindex>.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"razdelenie-na-uzly\">Podzia\u0142 na w\u0119z\u0142y<\/h2>\n<p><\/p>\n<p>Je\u015bli korzystasz z Postmana, wiesz, \u017ce interfejs zapytania zawiera wszystkie niezb\u0119dne funkcje. S\u0105 tu i skrypty, i testy, i oczywi\u015bcie same zapytania. U\u0142atwia to prac\u0119 nowicjuszom, jednak przy wi\u0119kszych scenariuszach takie podej\u015bcie nie jest elastyczne. Co, je\u015bli chcesz stworzy\u0107 kilka zapyta\u0144 i zrobi\u0107 ich agregacj\u0119? Co, je\u015bli chcesz wykona\u0107 skrypt bez zapytania lub kilka logicznie oddzielonych skrypt\u00f3w z rz\u0119du? W ko\u0144cu dobrze by\u0142oby oddzieli\u0107 testy od zwyk\u0142ych skrypt\u00f3w u\u017cytkowych. Ponadto podej\u015bcie \u201edodajemy ca\u0142y funkcjonalno\u015b\u0107 do jednego w\u0119z\u0142a\u201d jest nie skalowalne \u2014 interfejs szybko staje si\u0119 prze\u0142adowany.<\/p>\n<p><\/p>\n<p>TestMace z za\u0142o\u017cenia dzieli wszystkie funkcje na r\u00f3\u017cne typy w\u0119z\u0142\u00f3w. Chcesz zrobi\u0107 zapytanie? Oto <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/requeststep\">request step<\/a><\/noindex> w\u0119ze\u0142. Chcesz napisa\u0107 skrypt? Oto <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/script\">script<\/a><\/noindex> w\u0119ze\u0142. Potrzebne testy? Prosz\u0119 \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/assertion\">Assertion<\/a><\/noindex> w\u0119ze\u0142. Ach tak, mo\u017cesz tak\u017ce wszystko to owin\u0105\u0107 w <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/folder\">folder<\/a><\/noindex> w\u0119ze\u0142. I wszystko to \u0142atwo \u0142\u0105czy si\u0119 ze sob\u0105. Takie podej\u015bcie jest nie tylko bardzo elastyczne, ale tak\u017ce, zgodnie z zasad\u0105 pojedynczej odpowiedzialno\u015bci, pozwala korzysta\u0107 tylko z tego, co naprawd\u0119 potrzebujesz w danym momencie. Po co mi skrypty i testy, je\u015bli chc\u0119 po prostu wykona\u0107 zapytanie?<\/p>\n<p><\/p>\n<h2 id=\"chelovekochitaemyy-format-proekta\">Czytelny format projektu<\/h2>\n<p><\/p>\n<p>Mi\u0119dzy TestMace a Postmanem istnieje konceptualna r\u00f3\u017cnica w sposobie przechowywania. W Postmanie wszystkie zapytania s\u0105 przechowywane gdzie\u015b w lokalnej pami\u0119ci. Je\u015bli konieczne jest udost\u0119pnienie zapyta\u0144 mi\u0119dzy kilkoma u\u017cytkownikami, trzeba skorzysta\u0107 z wbudowanej synchronizacji. W rzeczywisto\u015bci to powszechnie stosowane podej\u015bcie, kt\u00f3re ma swoje wady. A co z bezpiecze\u0144stwem danych? Bowiem polityka niekt\u00f3rych firm mo\u017ce nie pozwala\u0107 na przechowywanie danych u os\u00f3b trzecich. Uwa\u017camy jednak, \u017ce TestMace mo\u017ce zaoferowa\u0107 co\u015b lepszego! I nazywa si\u0119 to \u201eczytelny format projektu\u201d.<\/p>\n<p><\/p>\n<p>Zacznijmy od tego, \u017ce w TestMace istnieje poj\u0119cie \u201eprojektu\u201d. Aplikacja zosta\u0142a zaprojektowana z my\u015bl\u0105 o przechowywaniu projekt\u00f3w w systemach kontroli wersji: struktura drzewa projektu niemal jednoznacznie odwzorowuje struktur\u0119 folder\u00f3w, jako format przechowywania u\u017cywany jest yaml (bez zb\u0119dnych nawias\u00f3w i przecink\u00f3w), a reprezentacja plikowa ka\u017cdego w\u0119z\u0142a jest szczeg\u00f3\u0142owo opisana w dokumentacji z komentarzami. W wi\u0119kszo\u015bci przypadk\u00f3w nie b\u0119dziesz musia\u0142 do niej zagl\u0105da\u0107 \u2014 wszystkie nazwy p\u00f3l maj\u0105 logiczne nazwy. <\/p>\n<p><\/p>\n<p>Co to daje u\u017cytkownikowi? Umo\u017cliwia bardzo elastyczne zmienianie przep\u0142ywu pracy zespo\u0142u, korzystaj\u0105c ze znanych podej\u015b\u0107. Na przyk\u0142ad programi\u015bci mog\u0105 przechowywa\u0107 projekt w tym samym repozytorium, co backend. W ga\u0142\u0119ziach, opr\u00f3cz zmiany samej bazy kodu, programista mo\u017ce poprawi\u0107 istniej\u0105ce scenariusze zapyta\u0144 i testy. Po zatwierdzeniu zmian w repozytorium (git, svn, mercurial \u2014 co wolisz) CI (twoje ulubione, nie narzucone przez nikogo) uruchamia nasze narz\u0119dzie konsolowe <noindex><a rel=\"nofollow\" href=\"https:\/\/www.npmjs.com\/package\/@testmace\/cli\">testmace-cli<\/a><\/noindex>, a raport uzyskany po wykonaniu (na przyk\u0142ad w formacie junit, kt\u00f3ry r\u00f3wnie\u017c jest wspierany w testmace-cli) jest wysy\u0142any do odpowiedniego systemu. Oznacza to, \u017ce wcze\u015bniej wymieniony problem z bezpiecze\u0144stwem ju\u017c nie stanowi problemu.<\/p>\n<p><\/p>\n<p>Jak wida\u0107, TestMace nie narzuca swojej ekosystemu i paradygmatu. Zamiast tego \u0142atwo integruje si\u0119 z ju\u017c ustalonymi procesami.<\/p>\n<p><\/p>\n<h2 id=\"dinamicheskie-peremennye\">Zmienne dynamiczne<\/h2>\n<p><\/p>\n<p>TestMace pod\u0105\u017ca za koncepcj\u0105 no-code: je\u015bli problem mo\u017cna rozwi\u0105za\u0107 bez u\u017cycia kodu, staramy si\u0119 to umo\u017cliwi\u0107. Praca ze zmiennymi to w\u0142a\u015bnie ten funkcjonalno\u015b\u0107, gdzie w wi\u0119kszo\u015bci przypadk\u00f3w mo\u017cna oby\u0107 si\u0119 bez programowania.<\/p>\n<p><\/p>\n<p>Przyk\u0142ad: otrzymali\u015bmy odpowied\u017a z serwera i chcemy zapisa\u0107 cz\u0119\u015b\u0107 odpowiedzi w zmiennej. W Postmanie napisaliby\u015bmy w skrypcie testowym (co samo w sobie jest dziwne) co\u015b w stylu:<\/p>\n<p><\/p>\n<pre><code class=\"javascript\">var jsonData = JSON.parse(responseBody);\npostman.setEnvironmentVariable(\"data\", jsonData.data);<\/code><\/pre>\n<p><\/p>\n<p>Jednak naszym zdaniem pisanie skryptu dla tak prostego i cz\u0119sto u\u017cywanego scenariusza wydaje si\u0119 zb\u0119dne. Dlatego w TestMace istnieje mo\u017cliwo\u015b\u0107 przypisania zmiennej cz\u0119\u015bci odpowiedzi, korzystaj\u0105c z interfejsu graficznego. Zobacz, jak to jest proste:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Co sprawia, \u017ce TestMace jest lepszy od Postman?\" src=\"\/wp-content\/uploads\/2019\/12\/2ce8ce2f9aa2964cb5bd1d5eacead423.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A teraz przy ka\u017cdym \u017c\u0105daniu ta dynamiczna zmienna b\u0119dzie aktualizowana. Mo\u017cesz jednak mie\u0107 w\u0105tpliwo\u015bci, argumentuj\u0105c, \u017ce podej\u015bcie Postmana jest bardziej elastyczne i pozwala nie tylko na przypisanie, ale tak\u017ce na wykonanie pewnej wst\u0119pnej obr\u00f3bki. Oto jak mo\u017cna zmodyfikowa\u0107 poprzedni przyk\u0142ad:<\/p>\n<p><\/p>\n<pre><code class=\"javascript\">var jsonData = JSON.parse(responseBody);\npostman.setEnvironmentVariable(\"data\", CryptoJS.MD5(jsonData.data));<\/code><\/pre>\n<p><\/p>\n<p>C\u00f3\u017c, w TestMace jest na to <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/script\">script<\/a><\/noindex> w\u0119ze\u0142, kt\u00f3ry pokrywa ten scenariusz. Aby odtworzy\u0107 poprzedni przypadek, ale ju\u017c w wykonaniu TestMace, nale\u017cy po \u017c\u0105daniu utworzy\u0107 w\u0119ze\u0142 script i jako skrypt u\u017cy\u0107 nast\u0119puj\u0105cego kodu:<\/p>\n<p><\/p>\n<pre><code class=\"javascript\">const data = tm.currentNode.prev.response.body.data;\ntm.currentNode.parent.setDynamicVar('data', crypto.MD5(data));<\/code><\/pre>\n<p><\/p>\n<p>Jak wida\u0107, kompozycja w\u0119z\u0142\u00f3w znowu si\u0119 sprawdzi\u0142a. A w tak prostej sytuacji, jak opisano powy\u017cej, mo\u017cesz nawet po prostu przypisa\u0107 wyra\u017cenie <code>${crypto.MD5($response.data)}<\/code> do zmiennej tworzonej za pomoc\u0105 interfejsu graficznego!<\/p>\n<p><\/p>\n<h2 id=\"sozdanie-testov-cherez-gui\">Tworzenie test\u00f3w przez GUI<\/h2>\n<p><\/p>\n<p>Postman pozwala na tworzenie test\u00f3w poprzez pisanie skrypt\u00f3w (w przypadku Postmana jest to JavaScript). To podej\u015bcie ma same zalety \u2014 praktycznie nieograniczona elastyczno\u015b\u0107, dost\u0119pno\u015b\u0107 gotowych rozwi\u0105za\u0144 itd.<\/p>\n<p><\/p>\n<p>Jednak rzeczywisto\u015b\u0107 cz\u0119sto wygl\u0105da tak (to nie my tacy, \u017cycie takie), \u017ce tester nie ma umiej\u0119tno\u015bci programowania, a warto\u015bci\u0105 dla zespo\u0142u chcia\u0142by by\u0107 ju\u017c teraz. W takich przypadkach, zgodnie z koncepcj\u0105 no-code, TestMace pozwala na tworzenie prostych test\u00f3w za po\u015brednictwem interfejsu graficznego, bez pisania skrypt\u00f3w. Oto, jak wygl\u0105da proces tworzenia testu, kt\u00f3ry por\u00f3wnuje warto\u015bci pod k\u0105tem r\u00f3wno\u015bci:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Co sprawia, \u017ce TestMace jest lepszy od Postman?\" src=\"\/wp-content\/uploads\/2019\/12\/c0a8ce4cbe264dd76e3b5d90594eeff5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jednak tworzenie test\u00f3w w edytorze graficznym nie wyklucza mo\u017cliwo\u015bci <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/assertion\/script\">pisania test\u00f3w w kodzie<\/a><\/noindex>. Tutaj s\u0105 te same biblioteki, co w w\u0119\u017ale script, a <noindex><a rel=\"nofollow\" href=\"https:\/\/www.chaijs.com\/\">chai<\/a><\/noindex> do pisania test\u00f3w.<\/p>\n<p><\/p>\n<h2 id=\"vozmozhnost-zapustit-uzhe-suschestvuyuschiy-scenariy-po-ssylke-link-uzel\">Mo\u017cliwo\u015b\u0107 uruchomienia ju\u017c istniej\u0105cego scenariusza za pomoc\u0105 linku (w\u0119ze\u0142 Link)<\/h2>\n<p><\/p>\n<p>Cz\u0119sto zdarzaj\u0105 si\u0119 sytuacje, gdy pewne \u017c\u0105danie lub nawet ca\u0142y scenariusz nale\u017cy wykona\u0107 kilka razy w r\u00f3\u017cnych cz\u0119\u015bciach projektu. Przyk\u0142adami takich \u017c\u0105da\u0144 mog\u0105 by\u0107 niestandardowa wieloetapowa autoryzacja, doprowadzenie \u015brodowiska do po\u017c\u0105danego stanu itd. Generalnie m\u00f3wi\u0105c w terminach j\u0119zyk\u00f3w programowania, chcia\u0142oby si\u0119 mie\u0107 funkcje, kt\u00f3re mo\u017cna wykorzystywa\u0107 ponownie w r\u00f3\u017cnych cz\u0119\u015bciach aplikacji. W TestMace t\u0119 funkcj\u0119 spe\u0142nia <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/link\">link<\/a><\/noindex> w\u0119ze\u0142. Korzystanie z niego jest bardzo proste:<br \/>\n1) stw\u00f3rz \u017c\u0105danie lub skrypt<br \/>\n2) utw\u00f3rz w\u0119ze\u0142 typu Link<br \/>\n3) w parametrach wska\u017c link do skryptu stworzonego w kroku pierwszym<\/p>\n<p><\/p>\n<p>W bardziej zaawansowanej wersji, mo\u017cesz wskaza\u0107, kt\u00f3re dynamiczne zmienne ze skryptu powinny by\u0107 przekazywane na poziom wy\u017cej w stosunku do linku. Brzmi skomplikowanie? Powiedzmy, \u017ce stworzyli\u015bmy Folder o nazwie <strong>create-post<\/strong>, w kt\u00f3rym do danego w\u0119z\u0142a przypisuje si\u0119 dynamiczn\u0105 zmienn\u0105 <code>postId<\/code>. Teraz w w\u0119\u017ale Link <strong>create-post-link<\/strong> mo\u017cesz wyra\u017anie wskaza\u0107, \u017ce zmienna <code>postId<\/code> jest przypisywana do nadrz\u0119dnego <strong>create-post-link<\/strong>. Ten mechanizm (m\u00f3wi\u0105c j\u0119zykiem programist\u00f3w) mo\u017cna wykorzysta\u0107 do zwr\u00f3cenia wyniku z \u201efunkcji\u201d. W og\u00f3lno\u015bci super, zasada DRY w pe\u0142ni i znowu ani jedna linia kodu nie ucierpia\u0142a.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Co sprawia, \u017ce TestMace jest lepszy od Postman?\" src=\"\/wp-content\/uploads\/2019\/12\/5235473a43e5bc2e05aeb2779846245f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Je\u015bli chodzi o Postman, to pro\u015bba o funkcjonalno\u015b\u0107 ponownego wykorzystania \u017c\u0105da\u0144 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/postmanlabs\/postman-app-support\/issues\/1535\">wisia\u0142a od 2015 roku<\/a><\/noindex>, i podobno nawet istniej\u0105 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/postmanlabs\/postman-app-support\/issues\/1535#issuecomment-280305898\">pewne wskaz\u00f3wki<\/a><\/noindex>, \u017ce nad tym problemem pracuj\u0105. W obecnej formie Postman oczywi\u015bcie ma mo\u017cliwo\u015b\u0107 zmiany przep\u0142ywu wykonania, co teoretycznie mo\u017ce pozwala\u0107 na realizacj\u0119 podobnego zachowania, ale to raczej brudna sztuczka ni\u017c naprawd\u0119 dzia\u0142aj\u0105ce podej\u015bcie. <\/p>\n<p><\/p>\n<h2 id=\"prochie-otlichiya\">Inne r\u00f3\u017cnice<\/h2>\n<p><\/p>\n<ul>\n<li>Wi\u0119ksza kontrola nad zakresem widoczno\u015bci zmiennych. Najmniejszym zakresem, w kt\u00f3rym mo\u017cna zdefiniowa\u0107 zmienn\u0105 w Postman, jest kolekcja. TestMace pozwala zdefiniowa\u0107 zmienne dla dowolnego \u017c\u0105dania lub folderu. W Postman funkcja Share collection pozwala eksportowa\u0107 tylko kolekcje, podczas gdy w TestMace udost\u0119pnianie dzia\u0142a dla dowolnego w\u0119z\u0142a.<\/li>\n<li>TestMace wspiera <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/other\/default-http-headers\">dziedziczone nag\u0142\u00f3wki<\/a><\/noindex>, kt\u00f3re domy\u015blnie mog\u0105 by\u0107 przekazywane do podrz\u0119dnych \u017c\u0105da\u0144. W Postman w tej sprawie istnieje <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/postmanlabs\/postman-app-support\/issues\/1947\">zadanie<\/a><\/noindex>, kt\u00f3re zosta\u0142o nawet zamkni\u0119te, ale jako rozwi\u0105zanie proponuje si\u0119... <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/postmanlabs\/postman-app-support\/issues\/1947#issuecomment-292741840\">u\u017cywanie skrypt\u00f3w<\/a><\/noindex>. W TestMace wszystko to konfiguruje si\u0119 za pomoc\u0105 GUI i mo\u017cna opcjonalnie wy\u0142\u0105czy\u0107 dziedziczone nag\u0142\u00f3wki w konkretnych potomkach.<\/li>\n<li>Cofnij\/Odtw\u00f3rz. Dzia\u0142a nie tylko podczas edytowania w\u0119z\u0142\u00f3w, ale tak\u017ce przy przenoszeniu, usuwaniu, zmienianiu nazw i innych operacjach, kt\u00f3re zmieniaj\u0105 struktur\u0119 projektu.<\/li>\n<li>Pliki do\u0142\u0105czone do \u017c\u0105da\u0144 staj\u0105 si\u0119 cz\u0119\u015bci\u0105 projektu i s\u0105 przechowywane razem z nim, przy tym doskonale synchronizuj\u0105 si\u0119, w przeciwie\u0144stwie do Postman. (Tak, ju\u017c nie musisz za ka\u017cdym razem r\u0119cznie wybiera\u0107 plik\u00f3w przy ka\u017cdym uruchomieniu i przesy\u0142a\u0107 ich kolegom w archiwach).<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"fichi-kotorye-uzhe-na-podhode\">Funkcje, kt\u00f3re s\u0105 ju\u017c na horyzoncie<\/h2>\n<p><\/p>\n<p>Nie mogli\u015bmy si\u0119 oprze\u0107 pokusie uchylenia r\u0105bka tajemnicy dotycz\u0105cej nadchodz\u0105cych wyda\u0144, zw\u0142aszcza gdy funkcjonalno\u015b\u0107 jest bardzo smakowita i ju\u017c przechodzi faz\u0119 przedpremierowego dopracowywania. Oto poznajcie.<\/p>\n<p><\/p>\n<h3 id=\"funkcii\">Funkcje<\/h3>\n<p><\/p>\n<p>Jak wiadomo, do generowania warto\u015bci w Postmanie u\u017cywane s\u0105 tzw. dynamiczne zmienne. <noindex><a rel=\"nofollow\" href=\"https:\/\/learning.getpostman.com\/docs\/postman\/variables-and-environments\/variables-list\/\">Lista jest imponuj\u0105ca<\/a><\/noindex> a zdecydowana wi\u0119kszo\u015b\u0107 funkcji s\u0142u\u017cy do generowania fa\u0142szywych warto\u015bci. Na przyk\u0142ad, aby wygenerowa\u0107 losowy adres email, nale\u017cy napisa\u0107:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">{{$randomEmail}}<\/code><\/pre>\n<p><\/p>\n<p>Jednak poniewa\u017c s\u0105 to zmienne (cho\u0107 dynamiczne), nie mo\u017cna ich u\u017cywa\u0107 jak funkcji: nie s\u0105 parametryzowane, co oznacza, \u017ce nie mo\u017cna wzi\u0105\u0107 hasha z ci\u0105gu.<\/p>\n<p><\/p>\n<p>W TestMace planujemy doda\u0107 \u201euczciwe\u201d funkcje. Bezpo\u015brednio wewn\u0105trz ${} b\u0119dzie mo\u017cna nie tylko odwo\u0142a\u0107 si\u0119 do zmiennej, ale te\u017c wywo\u0142a\u0107 funkcj\u0119. Tzn. je\u015bli trzeba wygenerowa\u0107 s\u0142ynny fa\u0142szywy email, po prostu napiszemy<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">${faker.internet.email()}<\/code><\/pre>\n<p><\/p>\n<p>Opr\u00f3cz tego, \u017ce jest to funkcja, mo\u017cna zauwa\u017cy\u0107 mo\u017cliwo\u015b\u0107 wywo\u0142ania metody obiektu. Zamiast du\u017cej p\u0142askiej listy dynamicznych zmiennych, mamy zestaw logicznie pogrupowanych obiekt\u00f3w.<\/p>\n<p><\/p>\n<p>A co je\u015bli chcemy obliczy\u0107 hash z ci\u0105gu? Nic prostszego!<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">${crypto.MD5($dynamicVar.data)}<\/code><\/pre>\n<p><\/p>\n<p>Mo\u017cna zauwa\u017cy\u0107, \u017ce jako parametry mo\u017cna nawet przekazywa\u0107 zmienne! W tym miejscu dociekliwy czytelnik mo\u017ce poczu\u0107 si\u0119 zaniepokojony\u2026 <\/p>\n<p><\/p>\n<h3 id=\"ispolzovanie-javascript-v-vyrazheniyah\">U\u017cycie JavaScript w wyra\u017ceniach<\/h3>\n<p><\/p>\n<p>\u2026 I nie bez powodu! Kiedy zacz\u0119to formu\u0142owa\u0107 wymagania dla funkcji, nagle doszli\u015bmy do wniosku, \u017ce w wyra\u017ceniach nale\u017cy umo\u017cliwi\u0107 pisanie poprawnego javascriptu. Dlatego teraz mo\u017cesz pisa\u0107 wyra\u017cenia w stylu:<\/p>\n<p><\/p>\n<pre><code class=\"javascript\">${1 + '' + crypto.MD5('asdf')}<\/code><\/pre>\n<p><\/p>\n<p>I to wszystko bez skrypt\u00f3w, prosto w polach wej\u015bciowych!<\/p>\n<p><\/p>\n<p>Co do Postmana, to tutaj mo\u017cna u\u017cywa\u0107 tylko zmiennych, a przy pr\u00f3bie napisania cho\u0107by minimalnego wyra\u017cenia, walidator si\u0119 sprzeciwia i odmawia jego obliczenia.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Co sprawia, \u017ce TestMace jest lepszy od Postman?\" src=\"\/wp-content\/uploads\/2019\/12\/b301760640ff15ea682e9dfb1462116b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"prodvinutoe-avtodopolnenie\">Zaawansowane uzupe\u0142nianie<\/h3>\n<p><\/p>\n<p>Na chwil\u0119 obecn\u0105 TestMace ma standardowe uzupe\u0142nianie, kt\u00f3re wygl\u0105da nast\u0119puj\u0105co:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Co sprawia, \u017ce TestMace jest lepszy od Postman?\" src=\"\/wp-content\/uploads\/2019\/12\/1f5ec38a6a6da29e8308882d271b6b14.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tutaj opr\u00f3cz uzupe\u0142nianego ci\u0105gu wskazane jest, do czego nale\u017cy dany ci\u0105g. Mechanizm ten dzia\u0142a tylko w wyra\u017ceniach otoczonych nawiasami ${}.<\/p>\n<p><\/p>\n<p>Jak mo\u017cna zauwa\u017cy\u0107, dodano wizualne wska\u017aniki, kt\u00f3re wskazuj\u0105 na typ zmiennej (na przyk\u0142ad, ci\u0105g, liczba, tablica itd.). Mo\u017cna r\u00f3wnie\u017c zmienia\u0107 tryby autouzupe\u0142niania (na przyk\u0142ad, mo\u017cna wybra\u0107 autouzupe\u0142nianie zmiennymi lub nag\u0142\u00f3wkami). Ale nawet to nie jest najwa\u017cniejsze!<\/p>\n<p><\/p>\n<p>Po pierwsze, autouzupe\u0142nianie dzia\u0142a nawet w wyra\u017ceniach (gdzie to mo\u017cliwe). Oto jak to wygl\u0105da:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Co sprawia, \u017ce TestMace jest lepszy od Postman?\" src=\"\/wp-content\/uploads\/2019\/12\/676721c8d12f6c43970ed335deb238f7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I po drugie, teraz autouzupe\u0142nianie jest dost\u0119pne tak\u017ce w skryptach. Zobacz, jak to dzia\u0142a!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Co sprawia, \u017ce TestMace jest lepszy od Postman?\" src=\"\/wp-content\/uploads\/2019\/12\/3b6b4335447c0cbed7044d98831001dc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nie ma sensu por\u00f3wnywa\u0107 tej funkcjonalno\u015bci z Postmanem \u2014 tam autouzupe\u0142nianie ogranicza si\u0119 tylko do statycznych list zmiennych, nag\u0142\u00f3wk\u00f3w i ich warto\u015bci (popraw mnie, je\u015bli co\u015b pomin\u0105\u0142em). Skrypty nie s\u0105 autouzupe\u0142niane \ud83d\ude41<\/p>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">Podsumowanie<\/h1>\n<p><\/p>\n<p>W pa\u017adzierniku min\u0105\u0142 rok od rozpocz\u0119cia prac nad naszym produktem. W tym czasie uda\u0142o nam si\u0119 zrobi\u0107 wiele rzeczy i w niekt\u00f3rych aspektach dogonili\u015bmy naszych konkurent\u00f3w. Jakby nie by\u0142o, naszym celem jest stworzenie naprawd\u0119 wygodnego narz\u0119dzia do pracy z API. Przed nami jeszcze wiele pracy, oto przybli\u017cony plan rozwoju naszego projektu na najbli\u017cszy rok: <noindex><a rel=\"nofollow\" href=\"https:\/\/testmace.com\/roadmap\/\">https:\/\/testmace.com\/roadmap<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Twoje uwagi pomog\u0105 nam lepiej zorientowa\u0107 si\u0119 w obfito\u015bci funkcji, a twoje wsparcie daje nam si\u0142\u0119 i pewno\u015b\u0107, \u017ce robimy to, co jest potrzebne. Dzi\u015b przypadkiem przypada wa\u017cny dzie\u0144 dla naszego projektu \u2014 dzie\u0144 publikacji TestMace na <noindex><a rel=\"nofollow\" href=\"https:\/\/www.producthunt.com\/posts\/testmace\">ProductHunt<\/a><\/noindex>. Prosz\u0119, wspieraj nasz projekt, to dla nas bardzo wa\u017cne. Tym bardziej, \u017ce na naszej stronie PH dzisiaj jest kusz\u0105ca oferta i jest ona ograniczona.<\/p>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/480734\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442, \u043d\u0430 \u0441\u0432\u044f\u0437\u0438 TestMace! \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043c\u043d\u043e\u0433\u0438\u0435 \u0437\u043d\u0430\u044e\u0442 \u043e \u043d\u0430\u0441 \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439. \u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f: \u043c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c IDE \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API TestMace. \u0421\u0430\u043c\u044b\u0439 \u0447\u0430\u0441\u0442\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 TestMace \u0441 \u043a\u043e\u043d\u043a\u0443\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u043c\u0438 \u2014 &#171;\u0427\u0435\u043c \u0432\u044b \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0435\u0441\u044c \u043e\u0442 Postman?&#187;. \u041c\u044b \u0440\u0435\u0448\u0438\u043b\u0438, \u0447\u0442\u043e \u043f\u043e\u0440\u0430 \u0434\u0430\u0442\u044c \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441. \u041d\u0438\u0436\u0435 \u043c\u044b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-54188","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442, \u043d\u0430 \u0441\u0432\u044f\u0437\u0438\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/news\/chem-testmace-luchshe-postman\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0427\u0435\u043c TestMace \u043b\u0443\u0447\u0448\u0435 Postman | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442, \u043d\u0430 \u0441\u0432\u044f\u0437\u0438\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/news\/chem-testmace-luchshe-postman\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-12-19T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:10+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Czym TestMace jest lepsze od Postmana | ProHoster","description":"Cze\u015b\u0107 wszystkim, z tej strony","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/news\/chem-testmace-luchshe-postman","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0427\u0435\u043c TestMace \u043b\u0443\u0447\u0448\u0435 Postman | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442, \u043d\u0430 \u0441\u0432\u044f\u0437\u0438","og:url":"https:\/\/prohoster.info\/pl\/blog\/news\/chem-testmace-luchshe-postman","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-12-19T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:10+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54188","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 10:21:21","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:10:33","updated":"2026-01-24 10:21:21","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/54188","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=54188"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/54188\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=54188"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=54188"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=54188"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}