
Ahoj všichni, tady je ! Mnozí o nás možná vědí z . Pro ty, kteří se právě připojili: vyvíjíme IDE pro práci s API TestMace. Nejčastější otázka při porovnávání TestMace s konkurenčními produkty zní: „Čím se lišíte od Postmanu?“. Rozhodli jsme se, že je čas poskytnout podrobnou odpověď na tuto otázku. Níže jsme bodově sepsali naše výhody před .
Rozdělení na uzly
Pokud pracujete s Postmanem, víte, že rozhraní požadavku obsahuje veškerou potřebnou funkcionalitu. Jsou zde skripty, testy a vlastně samotné požadavky. To usnadňuje práci pro začátečníky, ale u větších scénářů není takový přístup flexibilní. Co když chcete vytvořit několik požadavků a udělat na nich agregaci? Co když chcete provést skript bez požadavku nebo několik logicky oddělených skriptů za sebou? Nakonec by nebylo špatné oddělit testy od běžných utilitárních skriptů. Kromě toho, přístup „přidáváme veškerou funkcionalitu do jednoho uzlu“ není škálovatelný — rozhraní se rychle stává přetíženým.
TestMace od začátku dělí veškerou funkcionalitu na různé typy uzlů. Chcete udělat požadavek? Tady máte uzel. Chcete napsat skript? Tady máte uzel. Potřebujete testy? Prosím — uzel. Aha, ještě můžete všechny tyto věci zabalit do uzlu. A to vše se snadno kombinuje. Tento přístup je nejen velmi flexibilní, ale také v souladu s principem jediné odpovědnosti, což umožňuje používat pouze to, co skutečně potřebujete v daném okamžiku. Proč bych měl potřebovat skripty a testy, když chci jen udělat požadavek?
Člověku čitelný formát projektu
Mezi TestMace a Postmanem existuje konceptuální rozdíl v způsobu ukládání. V Postmanu jsou všechny požadavky uloženy kdesi v lokálním úložišti. Pokud je potřeba sdílet požadavky mezi více uživateli, je třeba využít vestavěnou synchronizaci. Ve skutečnosti je to běžný přístup, který není bez nedostatků. Jak je to s bezpečností dat? Politika některých společností může dovolovat uchovávat data pouze u třetích stran. Nicméně věříme, že TestMace může nabídnout něco lepšího! A tímto zlepšením je „člověku čitelný formát projektu“.
Začneme tím, že v TestMace existuje entita „projekt“. A aplikace byla původně navržena s cílem ukládat projekty v systémech pro správu verzí: struktura projektu se prakticky zcela promítá do souborové struktury, jako formát ukládání se používá yaml (bez zbytečných závorek a čárek), a souborové zobrazení každého uzlu je podrobně popsáno v dokumentaci s komentáři. Většinou ale nebudete muset do dokumentace nahlížet — všechna názvy polí mají logická označení.
Co to uživatelovi přináší? To umožňuje velmi flexibilně měnit workflow týmu, přičemž se využívají běžné přístupy. Například, vývojáři mohou uchovávat projekt ve stejném repozitáři jako backend. Ve větvích, kromě změn přímo v kódové základně, může vývojář upravit stávající scénáře požadavků a testy. Po zafixování změn v repozitáři (git, svn, mercurial — co preferujete) CI (váš oblíbený, nikým nevnucovaný) spouští naši konzolovou utilitu , a výstupní zpráva (například ve formátu junit, který také podporuje testmace-cli) se odesílá do příslušného systému. A výše uvedený problém s bezpečností už není problémem.
Jak vidíte, TestMace nenutí svou ekosystémy a paradigmata. Místo toho se snadno integruje do již zavedených procesů.
Dynamické proměnné
TestMace se řídí konceptem no-code: pokud je problém možné vyřešit bez použití kódu, snažíme se takovou možnost nabídnout. Práce s proměnnými je právě ta funkce, kde se ve většině případů dá obejít bez programování.
Příklad: dostali jsme odpověď ze serveru a chceme uložit část odpovědi do proměnné. V Postmanu bychom v testovacím skriptu (což je samo o sobě divné) napsali něco ve smyslu:
var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("data", jsonData.data);Ale podle našeho názoru vypadá psaní skriptu pro tak jednoduchý a často používaný scénář nadbytečně. Proto v TestMace existuje možnost přiřadit proměnné část odpovědi pomocí grafického rozhraní. Podívejte se, jak je to jednoduché:

A nyní se při každém požadavku tato dynamická proměnná aktualizuje. Můžete však namítnout, že přístup Postmana je flexibilnější a umožňuje nejen přiřazení, ale také provedení určité předzpracování. Zde je způsob, jak lze upravit předchozí příklad:
var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("data", CryptoJS.MD5(jsonData.data));Což je v TestMace uzel, který pokrývá tento scénář. Abychom reprodukovali předchozí případ, ale už v provedení TestMace, je třeba po požadavku vytvořit script uzel a jako skript použít následující kód:
const data = tm.currentNode.prev.response.body.data;
tm.currentNode.parent.setDynamicVar('data', crypto.MD5(data));Jak vidíte, kompozice uzlů zde také dobře posloužila. A pro tak jednoduchý případ, jako je uvedený výše, můžete dokonce jednoduše přiřadit výraz ${crypto.MD5($response.data)} proměnné vytvořené prostřednictvím grafického rozhraní!
Vytváření testů prostřednictvím GUI
Postman umožňuje vytvářet testy pomocí psaní skriptů (v případě Postmana to je JavaScript). Tento přístup má spoustu výhod - prakticky neomezenou flexibilitu, existenci hotových řešení atd.
Realita je však často taková (nejsme takoví, život je takový), že tester nemá programátorské dovednosti, a přesto by chtěl týmu přinášet přínos už nyní. Pro takové případy, v souladu s konceptem no-code, TestMace umožňuje vytvářet jednoduché testy prostřednictvím grafického rozhraní, aniž by bylo nutné psát skripty. Takhle například vypadá proces vytváření testu, který porovnává hodnoty na rovnost:

Nicméně vytváření testů v grafickém editoru neodstraňuje možnost . Zde jsou všechny stejné knihovny jako ve script uzlu, a pro psaní testů.
Možnost spustit již existující scénář prostřednictvím odkazu (Link uzel)
Se často vyskytují situace, kdy je třeba provést určitý požadavek nebo dokonce celý scénář několikrát na různých místech projektu. Příkladem takových požadavků může být vlastní vícestupňová autorizace, uvedení prostředí do požadovaného stavu atd. Obecně, pokud mluvíme v termínech programovacích jazyků, chtěli bychom mít funkce, které lze znovu používat na různých místech aplikace. V TestMace tuto funkci vykonává uzel. Používání je velmi jednoduché:
1) vytvořte požadavek nebo scénář
2) vytvořte uzel typu Link
3) v parametrech uveďte odkaz na scénář vytvořený v prvním kroku
V pokročilejší variantě můžete určit, jaké dynamické proměnné ze scénáře přenášet na úroveň výše vzhledem k odkazu. Zní to zmateně? Představme si, že jsme vytvořili složku s názvem vytvořit-příspěvek, uvnitř které je k tomuto uzlu přiřazena dynamická proměnná postId. Nyní v uzlu Link create-post-link můžete jasně uvést, že proměnná postId by měla být přiřazena rodiči create-post-link. Tento mechanismus (opět se vyjadřujeme programátorsky) lze použít k vrácení výsledku z "funkce". Celkově je to skvělé, DRY v plném proudu a opět ani jedna řádka kódu nebyla poškozena.

Pokud jde o Postman, feature request na znovupoužití požadavků , a zdá se, že dokonce existují , že na tomto problému se pracuje. V aktuální podobě má Postman samozřejmě možnost změnit tok vykonávání, což teoreticky možná umožňuje realizovat podobné chování, ale to je spíše špinavý hack než opravdu funkční přístup.
Další rozdíly
- Větší kontrola nad oblastí viditelnosti proměnných. Nejmenší scope, uvnitř kterého lze v Postman určovat proměnnou, je collection. TestMace umožňuje definovat proměnné pro jakýkoliv požadavek nebo složku. V Postman Share collection umožňuje exportovat pouze sbírky, zatímco v TestMace sharing funguje pro jakýkoliv uzel.
- TestMace podporuje , které se ve výchozím nastavení mohou zavádět do podřízených požadavků. V Postman k tomu existuje , a je dokonce uzavřena, ale jako řešení se navrhuje… . V TestMace je to vše konfigurováno přes GUI a existuje možnost volitelného vypnutí dědičných hlaviček v konkrétních potomcích.
- Undo/Redo. Funguje nejen při úpravě uzlů, ale také při přesouvání, mazání, přejmenování a dalších operacích, které mění strukturu projektu.
- Soubory připojené k požadavkům se stávají součástí projektu a jsou ukládány spolu s ním, přičemž se skvěle synchronizují, na rozdíl od Postman. (Ano, už není nutné každýkrát ručně vybírat soubory při každém spuštění a posílat je kolegům v archivech).
Funkce, které jsou již na cestě.
Nemohli jsme odolat pokušení poodhalit roušku tajemství ohledně našich plánovaných vydání, zejména když je funkčnost velmi lákavá a již probíhá předpublikační ladění. Takže, přivítejte.
Funkce
Jak je známo, pro generování hodnot v Postmanu se používají takzvané dynamické proměnné. a drtivá většina funkcí slouží k generování falešných hodnot. Například pro generaci náhodného e-mailu je třeba napsat:
{{$randomEmail}}Je však třeba mít na paměti, že jako proměnné (i když dynamické) je nelze používat jako funkce: nejsou parametrizovatelné, a proto nelze získat hash ze řetězce.
V TestMace plánujeme přidat "poctivé" funkce. Přímo uvnitř ${} bude možné nejen odkazovat na proměnnou, ale také volat funkci. Tedy, pokud potřebujeme generovat známý falešný e-mail, jednoduše napíšeme
${faker.internet.email()}Kromě toho, že se jedná o funkci, si lze povšimnout, že existuje možnost volání metod objektu. A místo velkého plochého seznamu dynamických proměnných máme sadu logicky seskupených objektů.
A co když chceme spočítat hash ze řetězce? Snadno!
${crypto.MD5($dynamicVar.data)}Je možné si všimnout, že jako parametry lze předávat dokonce i proměnné! V tomto okamžiku by si zvídavý čtenář mohl pomyslet, že něco není v pořádku...
Použití JavaScriptu ve výrazech
... A není divu! Když jsme formulovali požadavky na funkce, náhle jsme došli k závěru, že je třeba umožnit psaní platného JavaScriptu ve výrazech. Proto nyní máte volnost psát výrazy ve stylu:
${1 + '' + crypto.MD5('asdf')}A to vše bez skriptů přímo v textových polích!
Pokud jde o Postman, zde je možné používat pouze proměnné, a při pokusu napsat jakýkoli výraze, validátor protestuje a odmítá ho vyhodnocovat.
![]()
Pokročilé automatické doplňování
V současné době má TestMace standardní automatické doplňování, které vypadá následovně:

Zde je kromě automaticky doplňované řetězce uvedeno, k čemu patří daný řetězec. Tento mechanismus funguje pouze ve výrazech uzavřených v závorkách ${}.
Jak můžete vidět, přibyly vizuální markery, které ukazují typ proměnné (například řetězec, číslo, pole atd.). Také můžete měnit režimy automatického doplňování (například si můžete vybrat automatické doplňování proměnnými nebo hlavičkami). Ale to ještě není to hlavní!
Za prvé, automatické doplňování funguje i ve výrazech (kde je to možné). Takto to vypadá:

A za druhé, nyní je automatické doplňování dostupné i ve skriptech. Podívejte se, jak to funguje!

Tento funkční prvek nemá smysl srovnávat s Postman — tam je automatické doplňování omezeno pouze na statické seznamy proměnných, hlaviček a jejich hodnot (opravte mě, pokud jsem něco zapomněl). Skripty se nedoplňují 🙁
Závěr
V říjnu uplynul rok od zahájení vývoje našeho produktu. Během této doby jsme stihli udělat spoustu věcí a v některých ohledech jsme dohnali naše konkurenty. Ale ať už je to jakkoli, naším cílem je vytvořit opravdu pohodlný nástroj pro práci s API. Ještě nás čeká spousta práce, zde je přibližný plán rozvoje našeho projektu na příští rok: .
Vaše zpětná vazba nám umožní lépe se orientovat v množství funkcí, a vaše podpora nám dodává sílu a jistotu, že děláme správnou věc. Dnes se ukázalo, že je důležitý den pro náš projekt — den zveřejnění TestMace na . Prosím, podpořte náš projekt, je to pro nás velmi důležité. Tím spíše, že dnes máme na naší PH stránce lákavou nabídku, která je omezená
Zdroj: habr.com
