{"id":9526,"date":"2020-10-19T10:28:03","date_gmt":"2020-10-19T08:28:03","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=9526"},"modified":"2023-08-10T15:25:17","modified_gmt":"2023-08-10T13:25:17","slug":"charles-pomocne-narzedzie-w-testowaniu-rest-api","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/charles-pomocne-narzedzie-w-testowaniu-rest-api\/","title":{"rendered":"Charles &#8211; pomocne narz\u0119dzie w testowaniu REST API"},"content":{"rendered":"\n<p><span style=\"font-weight: 400;\">Charles jest ciekawym narz\u0119dziem, kt\u00f3re mo\u017ce okaza\u0107 si\u0119 pomocne w pracy testera.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\"> Dost\u0119pne do pobrania pod adresem: <a href=\"https:\/\/www.charlesproxy.com\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >https:\/\/www.charlesproxy.com\/<\/a><\/span><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Czym jest Charles?<\/h3>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/10\/Charles.png\"><img decoding=\"async\" width=\"976\" height=\"704\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/10\/Charles.png\" alt=\"strona g\u0142\u00f3wna Charles Proxy\" class=\"wp-image-9819\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/10\/Charles.png 976w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/10\/Charles-300x216.png 300w\" sizes=\"(max-width: 976px) 100vw, 976px\" \/><\/a><\/figure>\n\n\n\n<p>Charles Web Debugging Proxy to wieloplatformowa aplikacja serwera proxy do debugowania HTTP napisana w Javie. Umo\u017cliwia u\u017cytkownikowi przegl\u0105danie HTTP, HTTPS, HTTP \/ 2 i w\u0142\u0105cza ruch port\u00f3w TCP dost\u0119pny z, do, lub przez komputer lokalny (Wikipedia &#8211; przet\u0142umaczone z j\u0119zyka angielskiego).<\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Jest to narz\u0119dzie p\u0142atne. Przez 30 dni mo\u017cna skorzysta\u0107 z wersji pr\u00f3bnej. Bezp\u0142atn\u0105 alternatyw\u0105 jest Fiddler &#8211; niestety jest on mniej przyjazny, je\u017celi chodzi o interfejs i skonfigurowanie. W projekcie, w kt\u00f3rym pracowa\u0142em Fiddler nie chcia\u0142 wsp\u00f3\u0142pracowa\u0107, natomiast wdro\u017cenie Charlesa okaza\u0142o si\u0119 szybkie i bezproblemowe.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Projekt, w kt\u00f3rym jestem testerem dotyczy aplikacji medycznej dla pacjent\u00f3w (umawianie spotka\u0144, przegl\u0105danie wynik\u00f3w bada\u0144), kt\u00f3ra poprzez REST API \u0142\u0105czy si\u0119 z wielkim systemem do obs\u0142ugi plac\u00f3wek medycznych (aplikacja desktopowa).<\/span><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">REST API<\/h3>\n\n\n\n<p><span style=\"font-weight: 400;\">W przypadku testowania REST API w projekcie u\u017cywany jest Postman. Jednak w trakcie trwania, do stacka technologicznego doszed\u0142 r\u00f3wnie\u017c Charles i narz\u0119dzie to zrobi\u0142o na mnie du\u017ce wra\u017cenie.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Deweloper doda\u0142 do naszej aplikacji mobilnej przekierowanie proxy, kt\u00f3re umo\u017cliwi\u0142o aplikacji Charles na Windows 10 wy\u015bwietlanie request\u00f3w z aplikacji mobilnej (wielkie dzi\u0119ki dla Tomka&nbsp;Marzeion&nbsp;?)<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/Settings.png\"><img decoding=\"async\" width=\"1024\" height=\"556\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/Settings-1024x556.png\" alt=\"\" class=\"wp-image-9529\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/Settings-1024x556.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/Settings-300x163.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/Settings.png 1904w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p><span style=\"font-weight: 400;\">Charles umo\u017cliwia podgl\u0105d endpoint\u00f3w, a tak\u017ce wysy\u0142anych requst\u00f3w i otrzymywanych odpowiedzi na \u017cywo w trakcie korzystania z aplikacji:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/wyniki.png\"><img decoding=\"async\" width=\"1024\" height=\"281\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/wyniki-1024x281.png\" alt=\"\" class=\"wp-image-9531\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/wyniki-1024x281.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/wyniki-300x82.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/wyniki.png 1094w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p><span style=\"font-weight: 400;\">Charles pozwala tak\u017ce przegl\u0105da\u0107 dane strukturalnie:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/2020-07-30-11_15_30-Charles-4.5.6-Session-1-_.png\"><img decoding=\"async\" width=\"1024\" height=\"556\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/2020-07-30-11_15_30-Charles-4.5.6-Session-1-_-1024x556.png\" alt=\"\" class=\"wp-image-9532\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/2020-07-30-11_15_30-Charles-4.5.6-Session-1-_-1024x556.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/2020-07-30-11_15_30-Charles-4.5.6-Session-1-_-300x163.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/2020-07-30-11_15_30-Charles-4.5.6-Session-1-_.png 1904w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p><span style=\"font-weight: 400;\">Podgl\u0105d odbieranych i wysy\u0142anych danych jest bardzo przejrzysty i wygodny. Przechwycone endpointy mo\u017cna za pomoc\u0105 kopiuj\/wklej doda\u0107 do Postmana. Moim zdaniem w tym aspekcie Charles przydaje si\u0119&nbsp;<\/span>bardziej&nbsp;ni\u017c Postman i w spos\u00f3b przejrzysty wida\u0107 jakie zapytania s\u0105 odbierane i wysy\u0142ane.<\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Przechwytuj\u0105c request mo\u017cna ustawi\u0107 \u201cBreakpoint\u201d, kt\u00f3ry w momencie, kiedy aplikacja natrafi na dany request, pozwoli go modyfikowa\u0107 i przejrze\u0107 jego zawarto\u015b\u0107.\u00a0<\/span><\/p>\n\n\n\n<p><b>Punkt wstrzymania<\/b>&nbsp;lub&nbsp;<b>pu\u0142apka<\/b>&nbsp;(ang.&nbsp;<i>breakpoint<\/i>) \u2013 miejsce celowego wstrzymania wykonania&nbsp;programu&nbsp;w celu&nbsp;przeanalizowania jego dzia\u0142ania. Uruchomiony pod kontrol\u0105&nbsp;debuggera&nbsp;program przerywa wykonanie we wskazanym punkcie i przekazuje sterowanie do debugera, kt\u00f3ry zazwyczaj wy\u015bwietla&nbsp;kod \u017ar\u00f3d\u0142owy&nbsp;w miejscu wywo\u0142ania wskazanej instrukcji. Po wstrzymaniu mo\u017cliwe jest m.in. \u015bledzenie aktualnych warto\u015bci&nbsp;zmiennych&nbsp;oraz zawarto\u015bci&nbsp;rejestr\u00f3w procesora.&nbsp;Zintegrowane \u015brodowiska programistyczne&nbsp;pozwalaj\u0105 na ustawienie takich punkt\u00f3w bezpo\u015brednio w&nbsp;edytorze kodu&nbsp;oraz definiowanie warunk\u00f3w, jakie musi spe\u0142nia\u0107 stan wykonania programu, aby pu\u0142apka spowodowa\u0142a przerwanie wykonania programu<sup id=\"cite_ref-1\" class=\"reference\"><\/sup>&nbsp;(Wikipedia)<\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Oczywi\u015bcie ustawione \u201cBrakpointy\u201d w ustawieniach (Proxy -> Breakpoint Settings) mo\u017cna modyfikowa\u0107 na przyk\u0142ad poprzez ustawienia tzw.\u00a0<\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Wildcard_character\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" ><span style=\"font-weight: 400;\">\u201cwild card\u201d.<\/span><\/a><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/B-Settings.png\"><img decoding=\"async\" width=\"402\" height=\"533\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/B-Settings.png\" alt=\"\" class=\"wp-image-9533\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/B-Settings.png 402w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/B-Settings-226x300.png 226w\" sizes=\"(max-width: 402px) 100vw, 402px\" \/><\/a><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/DD.png\"><img decoding=\"async\" width=\"1024\" height=\"344\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/DD-1024x344.png\" alt=\"\" class=\"wp-image-9534\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/DD-1024x344.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/DD-300x101.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/DD.png 1313w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p><span style=\"font-weight: 400;\">Dla przyk\u0142adu ni\u017cej wida\u0107 request, kt\u00f3ry odwo\u0142uje si\u0119 do pojedynczego konkretnego spotkania.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\"> Je\u017celi u\u017cytkownik kliknie w to spotkanie, takie zapytanie zostanie wys\u0142ane i zwr\u00f3cone zostan\u0105 szczeg\u00f3ly spotkania. Inne spotkania b\u0119d\u0105 ju\u017c mia\u0142y inny numer, wi\u0119c w tym miejscu mo\u017cemy zastosowa\u0107 \u201cwild card\u201d i u\u017cy\u0107 * podobny znak u\u017cywamy w SQL, gdy chcemy przejrze\u0107 wszystkie wyniki np. select * from nazwa_tabeli. Po zmodyfikowaniu \u201cBreakpointu\u201d b\u0119dzie dzia\u0142a\u0107 na ka\u017cdym innym spotkaniu:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/10\/2020-10-23-17_09_25-Clipboard.png\"><img decoding=\"async\" width=\"598\" height=\"369\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/10\/2020-10-23-17_09_25-Clipboard.png\" alt=\"\" class=\"wp-image-9817\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/10\/2020-10-23-17_09_25-Clipboard.png 598w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/10\/2020-10-23-17_09_25-Clipboard-300x185.png 300w\" sizes=\"(max-width: 598px) 100vw, 598px\" \/><\/a><\/figure>\n\n\n\n<p><span style=\"font-weight: 400;\">Charles jest r\u00f3wnie\u017c przydatny w sprawdzeniu odpowiedzi, jakie otrzymujemy. Mo\u017cemy \u0142atwo przejrze\u0107 JSON, a tak\u017ce ilo\u015b\u0107 obiekt\u00f3w i ich w\u0142a\u015bciwo\u015bci.<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/JSON.png\"><img decoding=\"async\" width=\"1024\" height=\"556\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/JSON-1024x556.png\" alt=\"\" class=\"wp-image-9536\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/JSON-1024x556.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/JSON-300x163.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/JSON.png 1904w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/Object.png\"><img decoding=\"async\" width=\"1024\" height=\"556\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/Object-1024x556.png\" alt=\"\" class=\"wp-image-9537\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/Object-1024x556.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/Object-300x163.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/Object.png 1904w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p><span style=\"font-weight: 400;\">W moim projekcie Charles ma du\u017ce zastosowanie, je\u017celi chodzi o modyfikowanie <a aria-label=\" (opens in a new tab)\" href=\"https:\/\/pl.wikipedia.org\/wiki\/Kod_odpowiedzi_HTTP\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >kodu odpowiedzi.<\/a>\u00a0Na przyk\u0142ad, w przypadku jak aplikacja zachowa si\u0119 w momencie, kiedy zmodyfikujemy status odpowiedzi z kodu 200(OK) na kod 500 (Internal Server Error).<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/2020-07-30-11_34_42-Settings.png\"><img decoding=\"async\" width=\"1024\" height=\"497\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/2020-07-30-11_34_42-Settings-1024x497.png\" alt=\"\" class=\"wp-image-9538\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/2020-07-30-11_34_42-Settings-1024x497.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/2020-07-30-11_34_42-Settings-300x145.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/2020-07-30-11_34_42-Settings.png 1561w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Network throttling<\/h3>\n\n\n\n<p><span style=\"font-weight: 400;\">W Charles mo\u017cemy tak\u017ce skorzysta\u0107 z opcji pozwalaj\u0105cej nam ustawi\u0107 parametry po\u0142\u0105czenia internetowego. (Throttle Settings -&gt; Enable Throttling)<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/10\/2020-07-31-10_39_42-Window.png\"><img decoding=\"async\" width=\"1024\" height=\"554\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/10\/2020-07-31-10_39_42-Window-1024x554.png\" alt=\"\" class=\"wp-image-9818\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/10\/2020-07-31-10_39_42-Window-1024x554.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/10\/2020-07-31-10_39_42-Window-300x162.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/10\/2020-07-31-10_39_42-Window.png 1474w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p><span style=\"font-weight: 400;\">Nale\u017cy pami\u0119ta\u0107, \u017ce gdy mamy w\u0142\u0105czon\u0105 funkcje zwolnieniu ulegnie przepustowo\u015b\u0107 tak\u017ce, gdy b\u0119dziemy korzysta\u0107 z przegl\u0105darki internetowej na komputerze, wi\u0119c jest to dobre narz\u0119dzie do testowania aplikacji webowej i sprawdzenia jak b\u0119dzie dzia\u0142a\u0107 aplikacja w warunkach s\u0142abszego po\u0142\u0105czenia internetowego.<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/10\/Net.png\"><img decoding=\"async\" width=\"1024\" height=\"564\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/10\/Net-1024x564.png\" alt=\"\" class=\"wp-image-9822\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/10\/Net-1024x564.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/10\/Net-300x165.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/10\/Net.png 1892w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p><span style=\"font-weight: 400;\">Ikona \u201c\u017c\u00f3\u0142wia\u201d pozwala nam kontrolowa\u0107 t\u0119 funkcj\u0119 (w\u0142\u0105czenie \/ wy\u0142\u0105czenie):<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/10\/ikonki.png\"><img decoding=\"async\" width=\"531\" height=\"54\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/10\/ikonki.png\" alt=\"\" class=\"wp-image-9823\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/10\/ikonki.png 531w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/10\/ikonki-300x31.png 300w\" sizes=\"(max-width: 531px) 100vw, 531px\" \/><\/a><\/figure>\n\n\n\n<p><span style=\"font-weight: 400;\">Narz\u0119dzie to posiada tak\u017ce wiele innych opcji np. tworzenie mock response. Podsumowuj\u0105c, Charles mo\u017ce by\u0107 w pracy testera ciekaw\u0105 alternatyw\u0105 dla Postmana i w niekt\u00f3rych aspektach by\u0107 bardzo pomocny (breakpointy, modyfikowanie request\u00f3w, podgl\u0105d w czasie rzeczywistym zapyta\u0144 i odpowiedzi). W projekcie, w kt\u00f3rym mam przyjemno\u015b\u0107 pracowa\u0107, korzystanie z tego narz\u0119dzia jest wygodne i znacznie u\u0142atwia prac\u0119 testerom. <\/span><\/p>\n\n\n\n<p>Zach\u0119cam do wypr\u00f3bowania i poznania Charles \ud83d\ude42<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Chcesz lepiej zrozumie\u0107 aplikacje i systemy, kt\u00f3re testujesz? Do\u0142\u0105cz do ModernTester, poznaj najpotrzebniejsze narz\u0119dzia, frameworki oraz j\u0119zyki programowania i \u0107wicz na specjalnie przygotowanych \u015brodowiskach testowych: <a href=\"https:\/\/moderntester.sii.pl\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Platforma e-learningowa ModernTester<\/a><\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;9526&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;9&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5 ( votes: 9)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Charles - pomocne narz\u0119dzie w testowaniu REST API&quot;,&quot;width&quot;:&quot;139.5&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 139.5px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            5\/5 ( votes: 9)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Charles jest ciekawym narz\u0119dziem, kt\u00f3re mo\u017ce okaza\u0107 si\u0119 pomocne w pracy testera. Dost\u0119pne do pobrania pod adresem: https:\/\/www.charlesproxy.com\/ Czym jest &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/charles-pomocne-narzedzie-w-testowaniu-rest-api\/\">Continued<\/a><\/p>\n","protected":false},"author":190,"featured_media":9810,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1317],"tags":[953,954,955,957,956],"class_list":["post-9526","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-testowanie","tag-charles","tag-charles-proxy","tag-http","tag-postman","tag-rest-api"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/07\/Charles-pomocne-narz\u0119dzie-w-testowaniu-REST-API.jpg","category_names":["Testowanie"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/9526"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/190"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=9526"}],"version-history":[{"count":3,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/9526\/revisions"}],"predecessor-version":[{"id":23414,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/9526\/revisions\/23414"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/9810"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=9526"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=9526"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=9526"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}