Wprowadzenie
Postman jest narzędziem, które wykorzystuję codziennie i bez którego nie wyobrażam sobie pracy. Dzisiaj chciałbym Ci pokazać, w jaki sposób można zaimportować żądanie z DevTools (Chrome) do Postmana, aby ułatwić sobie pracę i testowanie aplikacji. W szczególności, gdy jakieś żądanie powoduje błąd (np. 500).
Dodatkowo, gdy nauczymy naszych testerów, aby do zadań wrzucali tak wyeksportowane żądania, to praca w szczególności nad problemami staje dużo łatwiejsza i szybsza. Na ogół nie musimy przechodzić całego scenariusza, aby odtworzyć problem. Wystarczy tylko zaimportować żądanie i można już działać.
Export żądania
Wcześniej czy później w naszej aplikacji pojawi się błąd. A to serwer zwraca błąd 500, a to programiści źle zrozumieli wymagania i aplikacja zachowuje się nie tak, jak powinna.
Na potrzeby dzisiejszego przykładu utworzyłem nową aplikację webową w Visual Studio (.NET Core Web Api + Angular + uwierzytelnienie), w której wprowadziłem błąd. W efekcie w pewnym momencie działania aplikacji jedno z żądań kończy się statusem 500:

Oczywiście pracując nad tym problemem, można za każdym razem przeklikiwać aplikację, aby odtwarzać błąd. Ale dużo fajniejszą opcją jest wyeksportowanie i import problematycznego żądania do Postmana. Dzięki czemu później możemy wykonywać tylko to jedno żądanie. Zyskujemy na czasie i szybciej możemy rozwiązać problem.
Dodatkowo plusem takiego wyeksportowanego żądania jest to, że z czasem możemy również dodać je do listy żądań wykonywanych podczas wdrażania aplikacji lub nocnych buildów (tak jak to opisywałem we wpisie o automatycznym wykonywaniu testów Postmana), dzięki czemu możemy szybciej wyłapać błędy regresji.
Eksport żądania jest bardzo prosty. Wystarczy kliknąć na nie prawym klawiszem myszy. Następnie wybrać opcję Copy i później Copy as cURL (bash):

W efekcie skopiujemy coś takiego:
curl 'https://localhost:44339/weatherforecast' \ | |
-H 'authority: localhost:44339' \ | |
-H 'accept: application/json, text/plain, */*' \ | |
-H 'authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IkRldmVsb3BtZW50IiwidHlwIjoiYXQrand0In0.eyJuYmYiOjE2MDIwNDM0NjgsImV4cCI6MTYwMjA0NzA2OCwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzMzkiLCJhdWQiOiJXZWJBcHBsaWNhdGlvbjE2QVBJIiwiY2xpZW50X2lkIjoiV2ViQXBwbGljYXRpb24xNiIsInN1YiI6IjBkNThjOWZlLTlkNmQtNDUzYi05NjYwLTRiODNkNTIzZWJmYSIsImF1dGhfdGltZSI6MTYwMjA0MzQ2MiwiaWRwIjoibG9jYWwiLCJzY29wZSI6WyJvcGVuaWQiLCJwcm9maWxlIiwiV2ViQXBwbGljYXRpb24xNkFQSSJdLCJhbXIiOlsicHdkIl19.YLh2OffyTtW2P3J-T9YyiwuWb-YSUGoWB4LeaAFgQxkHw9HopNqjo09e5BG9l-kU18EqDl9jnvnHb2SpqjDuZJiAQ6xy2D8viHiLkyqUMy30lSVh_2VtUfPLgxMP0q8hTWPMix5OiKDTF11i-OlbvPY1qqVIKX398uU3jxMmA8ADFC0nn6cy5M01KPyAiUO2LzdZlMvAdOCMRB98463lApoKTKfaySCLSbzSOZihsqGkvK9rwMN9y5bD8H0uLx3I_5_E3jvWIhhA1ACZlcW0QWZVkMbN-a6V8hY11uYggcfxwAKGH59PdbD0qUvtWihxuCm0uZ2Yv826Jdj8bTucbA' \ | |
-H 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36' \ | |
-H 'sec-fetch-site: same-origin' \ | |
-H 'sec-fetch-mode: cors' \ | |
-H 'sec-fetch-dest: empty' \ | |
-H 'referer: https://localhost:44339/fetch-data' \ | |
-H 'accept-language: pl' \ | |
-H 'cookie: .AspNetCore.Antiforgery.jqUYYlXpeZc=CfDJ8NZO8_kWbotGmLvBdCuyHrPmVCtrDIDiiybPjImVnop71XRzPS1f7MokB_KMb20yHMLc5lfF4pL15tqwr2960qc7QUnhK7VolzpP7ub_mJntxzS0rGhsfUcD0epcAPAiD_-R6b6KmQf4GLf1cK6atKs; .AspNetCore.Antiforgery.CNK0KkBWJV4=CfDJ8NZO8_kWbotGmLvBdCuyHrP7o0g4ohu5FEqYG4__YK4qTeQ-6m3HfhhlMJ-WKOZm5vyv0wHc1E4go8fXsLHWTrEygMwVcpRet_ixbErBv-70D44JhxMZJGuDPv9jfO2aZZ66il5EzGocmpTJcxC2evg; idsrv.session=NjuN6B-SuuKE0XWhVkPAQg; .AspNetCore.Mvc.CookieTempDataProvider=CfDJ8NZO8_kWbotGmLvBdCuyHrM0CsGFDk_25lmKjNjN3JeHFJ9yH5vvt4o7KUhoSGALtzwY1J6XmOfpUccfvufU12jpO_rg5xftJ1PEppjdiaJn2K_rdtiF33J3-IGl1QCYyiii3aDqt01HMtW4sYIdWUqgPsxiXdEP0upPZ_e37EWADaIuyhyeCSXmdtZ9lgblIQ; .AspNetCore.Identity.Application=CfDJ8NZO8_kWbotGmLvBdCuyHrNk7rfdXkY8w37ll6Jd98UCDNyCInQRrquTRH8YtLRAudyvwa452Kov4WIjnMf-vdi64tGJpHSDNF2pyIxyeJifCbWbZ1la3xMFTgtXNQZPD2XE73zJAQRSTlgkVJmaGMIngl-3vRSlpvG0V_bw3z5VxJp8ymoMSWPweSVUPqle0GHsGDiNywLJVbt9jp_LSQoIrBgOp1AWId6fd-keCJp8bqsrIJ4mBB4rMtm6bSWDsfh1fPccvaso5jefX_aRXuy8fGLZvrKpDxCl4l4DiD16KZAkUG7EIpLOpSR8EL7VOhkPQDnOrORStjmv3lAsl0Sc5BGku5KN5ewqBiUOeVHNHY8CjY6j068n5upqZP91S294ecrIPVaFaminfzxSA4cuIOdxzvYFh30OIEylUEul9QqG4VgvD4Gu1HuXIOfACjMgkZtDNop7g7ImWCtOpdDyw8ywzqM_7i9xDJp3gKle_3aUSt-1kCr8r7BnKKZTDTXTR2jKKxBT9m01zQ_j4gU-aDAELMANvh7mJBllPgUtxVDWNirA2qOHvFWqBascEsyxyzByvsJ_LvlPC1wh4UXOGeH1Tme0exYEET-y8C0wt63Lr6Ut04Ck2AxysNiLLnMr278IwwTDiaAagrdyeRYj_cRcQLAY2y51nxssUEeHgIldDwXVfyClC1dhP5D05Di78oHAgBngHv0oK8vkCMXRPUBp3Phvpsh8S3gOZSfAgy_Nf6tg-G5LJzMajDKaghMyYxsv_IbdSd6V8zFTaO-3FnaaNkfTVr340HiKS0AstOphKYphl2ZDLIKFAcEqB8NMSxKsBTRQRnkkOM3wEJyzaCLoPXthP40Fkxoz-QEKpscus1-azPxXaNs3kGeY7ui74Ude6inLGniTLBYU_mEShStv0iXTWXzMKqQYM5xa0rSnmCSp-l_5-7r3UW9YBA' \ | |
--compressed |
Import żądania do Postmana
Mając już skopiowany request, wystarczy go już tylko zaimportować. Robi się to w podobny sposób jak import żądań z swagger. Czyli klikamy w przycisk Import, później przechodzimy do zakładki Raw text i wklejamy skopiowane żądanie:

Następnie klikamy na przycisk Continue i po chwili widzimy podsumowanie importu, który za chwilę nastąpi:

Klikamy w przycisk Import i widzimy nowe żądanie w Postmanie. Jest ładnie ustawiony adres oraz wszystkie nagłówki. Możemy teraz wykonać żądanie i sprawdzić, co dzieje się w aplikacji. A następnie naprawić problem:

Podsumowanie
Importowanie żądań z DevToolsów (inne przeglądarki niż Chrome mają podobne możliwości) bardzo przyśpiesza proces naprawiania problemów występujących w aplikacji. W szczególności gdy z testerami aplikacji ustalimy, że podejrzane żądania będą dodawali do zgłoszeń.
Dzięki temu unikniemy wielu niepotrzebnych problemów. Na przykład sprawdzamy nie te środowisko, nie tego użytkownika (o ile na przykład skopiowany token jwt jest jeszcze ważny). W efekcie jesteśmy bardziej wydajni w pracy nad problemami.
A Ty importujesz żądania do Postmana z DevToolsów?
Dzięki – na pewno kiedyś skorzystam!
Już trochę używam, a nigdy nie korzystałem z tej funkcji. Dlatego warto przeglądać takie blogi.
Dzięki