{"id":26703,"date":"2024-02-05T05:00:00","date_gmt":"2024-02-05T04:00:00","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=26703"},"modified":"2024-02-14T13:00:55","modified_gmt":"2024-02-14T12:00:55","slug":"wydajnosc-pod-kontrola-z-k6-tworzenie-rozszerzen-do-k6","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/wydajnosc-pod-kontrola-z-k6-tworzenie-rozszerzen-do-k6\/","title":{"rendered":"Wydajno\u015b\u0107 pod kontrol\u0105 z k6 \u2013 tworzenie rozszerze\u0144 do k6"},"content":{"rendered":"\n<p>Narz\u0119dzia do test\u00f3w wydajno\u015bciowych stanowi\u0105 niezast\u0105pione wsparcie dla programist\u00f3w, pozwalaj\u0105c na badanie wydajno\u015bci i skalowalno\u015bci aplikacji podczas rosn\u0105cego obci\u0105\u017cenia. Warto jednak zaznaczy\u0107, \u017ce nie wszystkie funkcjonalno\u015bci s\u0105 dost\u0119pne w ka\u017cdym narz\u0119dziu, szczeg\u00f3lnie w przypadku rozwi\u0105za\u0144 open-source.<\/p>\n\n\n\n<p>W przypadku pracy z nowymi, mniej popularnymi narz\u0119dziami, cz\u0119sto potrzebujemy si\u0119gn\u0105\u0107 po niestandardowe rozwi\u0105zania. W takich momentach rozszerzenia odgrywaj\u0105 kluczow\u0105 rol\u0119, umo\u017cliwiaj\u0105c programistom dodawanie niestandardowych funkcji do narz\u0119dzi do test\u00f3w wydajno\u015bciowych. Dzi\u0119ki nim mo\u017cliwe jest <strong>zwielokrotnienie potencja\u0142u narz\u0119dzi<\/strong> oraz dostosowanie ich do konkretnych wymaga\u0144 projektu, niezale\u017cnie od tego, czy chodzi o symulacj\u0119 rzeczywistego obci\u0105\u017cenia, integracj\u0119 z innymi narz\u0119dziami, czy monitorowanie dodatkowych metryk.<\/p>\n\n\n\n<p>Rozszerzenia stanowi\u0105 zatem <strong>kluczowy element<\/strong>, \u0142\u0105cz\u0105cy dost\u0119pne funkcjonalno\u015bci narz\u0119dzi z indywidualnymi potrzebami projektu.<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Testy wydajno\u015bciowe z k6: Tworzenie rozszerze\u0144 | cz\u0119\u015b\u0107 8\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/BR3ZpdtHRRk?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>xk6<\/strong><\/h2>\n\n\n\n<p>W k6 istnieje mo\u017cliwo\u015b\u0107 tworzenia w\u0142asnych rozszerze\u0144 dzi\u0119ki <a href=\"https:\/\/github.com\/grafana\/xk6\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >narz\u0119dziu xk6<\/a>. Umo\u017cliwia ono programistom rozwijanie rozszerze\u0144 i plugin\u00f3w, znacz\u0105co zwi\u0119kszaj\u0105cych mo\u017cliwo\u015bci k6. Dzi\u0119ki tej elastyczno\u015bci, spo\u0142eczno\u015b\u0107 deweloper\u00f3w mo\u017ce \u0142atwo tworzy\u0107 niestandardowe narz\u0119dzia, kt\u00f3re doskonale spe\u0142niaj\u0105 specyficzne wymagania projekt\u00f3w testowych. Cz\u0119\u015b\u0107 z dost\u0119pnych rozszerze\u0144 mo\u017cna znale\u017a\u0107 w <a href=\"https:\/\/k6.io\/docs\/extensions\/get-started\/explore\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >dokumentacji<\/a> k6. <\/p>\n\n\n\n<p>Instalacja narz\u0119dzia jest prosta i wygl\u0105da nast\u0119puj\u0105co:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-01.png\"><img decoding=\"async\" width=\"962\" height=\"422\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-01.png\" alt=\"Instalacja xk6\" class=\"wp-image-26704\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-01.png 962w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-01-300x132.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-01-768x337.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-01-370x162.png 370w\" sizes=\"(max-width: 962px) 100vw, 962px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 1 Instalacja xk6<\/figcaption><\/figure>\n\n\n\n<p>Po pomy\u015blnej instalacji jeste\u015bmy gotowi do u\u017cycia xk6. Zanim jednak do tego przyst\u0105pimy, przejd\u017amy do napisania pierwszego rozszerzenia.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Implementacja pierwszego rozszerzenia<\/strong><\/h2>\n\n\n\n<p>Na pocz\u0105tek wybierzmy funkcjonalno\u015b\u0107, kt\u00f3r\u0105 b\u0119dziemy chcieli pokry\u0107 protok\u00f3\u0142 smtp. SMTP (ang. Simple Mail Transfer Protocol) to protok\u00f3\u0142 komunikacyjny u\u017cywany do przesy\u0142ania wiadomo\u015bci e-mail pomi\u0119dzy serwerami pocztowymi przez sie\u0107 internetow\u0105.<\/p>\n\n\n\n<p>Kolejnym krokiem jest napisanie prostego szablonu, kt\u00f3ry nast\u0119pnie b\u0119dziemy rozbudowywa\u0107 o dodatkowe cz\u0119\u015bci.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-02.png\"><img decoding=\"async\" width=\"1024\" height=\"815\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-02-1024x815.png\" alt=\"Napisanie szablonu\" class=\"wp-image-26706\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-02-1024x815.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-02-300x239.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-02-768x611.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-02.png 1066w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 2 Napisanie szablonu<\/figcaption><\/figure>\n\n\n\n<p>Skrypt rejestruje modu\u0142 o nazwie &#8222;k6\/x\/smtp&#8221; za pomoc\u0105 funkcji modules.Register. Rejestracja umo\u017cliwia p\u00f3\u017aniejsze u\u017cywanie tego modu\u0142u w skryptach testowych napisanych w j\u0119zyku JavaScript. Kolejnym etapem jest inicjalizacja modu\u0142u go. U\u017cyjemy do tego poni\u017cszego polecenia.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-03.png\"><img decoding=\"async\" width=\"584\" height=\"422\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-03.png\" alt=\"Inicjalizacja modu\u0142u GO\" class=\"wp-image-26708\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-03.png 584w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-03-300x217.png 300w\" sizes=\"(max-width: 584px) 100vw, 584px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 3 Inicjalizacja modu\u0142u GO<\/figcaption><\/figure>\n\n\n\n<p>Za\u0142\u00f3\u017cmy, \u017ce b\u0119dziemy chcieli zdefiniowa\u0107 w te\u015bcie jedn\u0105 funkcj\u0119 odpowiedzialn\u0105 za r\u00f3wnocze\u015bnie uwierzytelnienie jak i przes\u0142anie emaila. Na podstawie dost\u0119pnej <a href=\"https:\/\/pkg.go.dev\/net\/smtp\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >dokumentacji smtp<\/a> zaimplementujmy funkcjonalno\u015b\u0107, aby\u015bmy mogli wykorzysta\u0107 je jako rozszerzenie.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-04.png\"><img decoding=\"async\" width=\"808\" height=\"1024\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-04-808x1024.png\" alt=\"Implementacja funkcjonalno\u015bci\" class=\"wp-image-26710\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-04-808x1024.png 808w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-04-237x300.png 237w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-04-768x973.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-04-1213x1536.png 1213w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-04-1617x2048.png 1617w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-04.png 2048w\" sizes=\"(max-width: 808px) 100vw, 808px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 4 Implementacja funkcjonalno\u015bci<\/figcaption><\/figure>\n\n\n\n<p>W zaimplementowanej logice zawieraj\u0105 si\u0119 nast\u0119puj\u0105ce elementy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Struktura options \u2013 definiowana jest struktura o nazwie options, kt\u00f3ra zawiera pola: Subject, Message oraz UDW. S\u0105 to opcjonalne parametry, kt\u00f3re mog\u0105 by\u0107 przekazywane podczas wysy\u0142ania e-maila.<\/li>\n\n\n\n<li>Funkcja plainAuth \u2013 jest to pomocnicza funkcja, kt\u00f3ra tworzy obiekt smtp.Auth przy u\u017cyciu autentykacji PlainAuth. Autentykacja ta wymaga podania hosta, has\u0142a i nadawcy.<\/li>\n\n\n\n<li>Funkcja SendMail \u2013 g\u0142\u00f3wna funkcja, kt\u00f3ra realizuje wysy\u0142anie e-maila. Przyjmuje ona jako parametry: host, port, nadawc\u0119, has\u0142o, odbiorc\u0119 oraz opcje (struktur\u0119 options). Na podstawie tych parametr\u00f3w tworzona jest wiadomo\u015b\u0107 e-mail, a nast\u0119pnie jest ona wysy\u0142ana za pomoc\u0105 smtp.SendMail.<\/li>\n<\/ul>\n\n\n\n<p>Go mod tidy to polecenie, kt\u00f3re synchronizuje plik go .mod z rzeczywistymi zale\u017cno\u015bciami u\u017cywanymi w naszym kodzie. Zastosujmy je, aby zsynchronizowa\u0107 nasz projekt.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-05.png\"><img decoding=\"async\" width=\"498\" height=\"422\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-05.png\" alt=\"Synchronizacja projektu\" class=\"wp-image-26712\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-05.png 498w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-05-300x254.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-05-400x340.png 400w\" sizes=\"(max-width: 498px) 100vw, 498px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 5 Synchronizacja projektu<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Budowanie scenariusza<\/strong><\/h2>\n\n\n\n<p>Paczki binarne k6 mo\u017cemy budowa\u0107 za pomoc\u0105 xk6 na systemie lokalnym b\u0105d\u017a w dockerze. Drugie z rozwi\u0105za\u0144 jest bardziej stabilne, poniewa\u017c niweluje mo\u017cliwo\u015b\u0107 b\u0142\u0119d\u00f3w po stronie u\u017cywanego systemu b\u0105d\u017a dystrybucji. Do tego konieczne jest jednak zbudowanie obrazu. Jego przyk\u0142ad mo\u017cecie znale\u017a\u0107 <a href=\"https:\/\/github.com\/gpiechnik2\/xk6-anomaly\/blob\/main\/Dockerfile\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >w moim repozytorium.<\/a><\/p>\n\n\n\n<p>Przejd\u017amy do budowy obrazu lokalnie.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-06.png\"><img decoding=\"async\" width=\"774\" height=\"422\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-06.png\" alt=\"Budowa obrazu\" class=\"wp-image-26715\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-06.png 774w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-06-300x164.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-06-768x419.png 768w\" sizes=\"(max-width: 774px) 100vw, 774px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 6 Budowa obrazu<\/figcaption><\/figure>\n\n\n\n<p>W ten spos\u00f3b zostanie utworzony plik binarny o nazwie k6. Przyk\u0142ad skryptu, kt\u00f3ry mo\u017cemy uruchomi\u0107 za pomoc\u0105 rozszerzenia wygl\u0105da nast\u0119puj\u0105co.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-07.png\"><img decoding=\"async\" width=\"876\" height=\"1024\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-07-876x1024.png\" alt=\"Przyk\u0142adowy skrypt\" class=\"wp-image-26717\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-07-876x1024.png 876w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-07-257x300.png 257w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-07-768x898.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/p8-attachment-07.png 980w\" sizes=\"(max-width: 876px) 100vw, 876px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 7 Przyk\u0142adowy skrypt<\/figcaption><\/figure>\n\n\n\n<p>Po uruchomieniu k6 z pomoc\u0105 pliku binarnego zamiast systemowego polecenia, b\u0119dziemy mogli skorzysta\u0107 z biblioteki wewn\u0105trz scenariuszy testowych.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Podsumowanie<\/strong><\/h2>\n\n\n\n<p>W dzisiejszej, <a href=\"https:\/\/sii.pl\/blog\/all\/k6\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">\u00f3smej cz\u0119\u015bci serii<\/a>, zg\u0142\u0119bili\u015bmy temat rozszerze\u0144 w k6 i zrozumieli\u015bmy, jak istotn\u0105 rol\u0119 pe\u0142ni\u0105 w rozbudowie funkcjonalno\u015bci tego narz\u0119dzia. Poznali\u015bmy definicj\u0119 rozszerze\u0144 jako niestandardowych dodatk\u00f3w, kt\u00f3re umo\u017cliwiaj\u0105 programistom dostosowanie k6 do specyficznych potrzeb projektu.<\/p>\n\n\n\n<p>W artykule skonstruowali\u015bmy w\u0142asne rozszerzenie k6 od podstaw, co pozwoli\u0142o nam zrozumie\u0107, jak krok po kroku implementowa\u0107 niestandardowe funkcje w tym narz\u0119dziu. Dzi\u0119ki praktycznym przyk\u0142adom mieli\u015bmy okazj\u0119 zobaczy\u0107, jak elastyczny i adaptowalny jest k6 dzi\u0119ki mo\u017cliwo\u015bciom rozszerze\u0144.<\/p>\n\n\n\n<p>Jest to te\u017c ostatni artyku\u0142 z serii \u201e<a href=\"https:\/\/sii.pl\/blog\/all\/k6\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">Wydajno\u015b\u0107 pod kontrol\u0105 z k6<\/a>\u201d, w kt\u00f3rym ko\u0144czymy poznawanie k6 od zera. Dla wszystkich, kt\u00f3rzy wytrwali i \u015bledzili nasz\u0105 seri\u0119 od pierwszego artyku\u0142u, chcia\u0142bym wyrazi\u0107 szczere podzi\u0119kowania \ud83d\ude0a<\/p>\n\n\n\n<p><strong>Mam nadziej\u0119, \u017ce zyskali\u015bcie wgl\u0105d w mo\u017cliwo\u015bci i potencja\u0142, jakie oferuje k6, oraz \u017ce zdobyli\u015bcie cenne umiej\u0119tno\u015bci potrzebne do skutecznego testowania wydajno\u015bci aplikacji<\/strong>.<\/p>\n\n\n\n<p>***<\/p>\n\n\n\n<p>Je\u015bli jeszcze nie mieli\u015bcie okazji zapozna\u0107 si\u0119 z artyku\u0142ami z serii o narz\u0119dziu k6, znajdziecie je tutaj:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/sii.pl\/blog\/wydajnosc-pod-kontrola-co-sklania-mnie-do-wyboru-k6\/\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\"><u>Wydajno\u015b\u0107 pod kontrol\u0105 \u2013 co sk\u0142ania mnie do wyboru k6?<\/u><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/wydajnosc-pod-kontrola-z-k6-nagrywanie-parametryzacja-i-uruchamianie-pierwszego-scenariusza-testowego\/\" target=\"_blank\" rel=\"noreferrer noopener\"><u>Wydajno\u015b\u0107 pod kontrol\u0105 z k6 \u2013 nagrywanie, parametryzacja i uruchamianie pierwszego scenariusza testowego<\/u><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/wydajnosc-pod-kontrola-z-k6-metryki-progi-jakosci-tagowanie\/\" target=\"_blank\" rel=\"noreferrer noopener\"><u>Wydajno\u015b\u0107 pod kontrol\u0105 z k6 \u2013 metryki, progi jako\u015bci, tagowanie<\/u><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/wydajnosc-pod-kontrola-z-k6-dodatkowe-konfiguracje-typy-modeli-scenariuszy-oraz-executorow\/\" target=\"_blank\" rel=\"noreferrer noopener\"><u>Wydajno\u015b\u0107 pod kontrol\u0105 z k6 \u2013 dodatkowe konfiguracje, typy modeli scenariuszy oraz executor\u00f3w<\/u><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/wydajnosc-pod-kontrola-z-k6-inicjalizacja-frameworka\/\" target=\"_blank\" rel=\"noreferrer noopener\"><u>Wydajno\u015b\u0107 pod kontrol\u0105 z k6 \u2013 inicjalizacja frameworka<\/u><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/wydajnosc-pod-kontrola-z-k6-dobre-praktyki-tworzenie-zbiorow-testow-i-konfiguracja\/\" target=\"_blank\" rel=\"noreferrer noopener\"><u>Wydajno\u015b\u0107 pod kontrol\u0105 z k6 \u2013 dobre praktyki, tworzenie zbior\u00f3w test\u00f3w i konfiguracja<\/u><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/wydajnosc-pod-kontrola-z-k6-docker-oraz-integracja-z-influxdb-oraz-grafana\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">Wydajno\u015b\u0107 pod kontrol\u0105 z k6 \u2013 Docker oraz integracja z InfluxDB oraz Grafan\u0105<\/a><\/li>\n<\/ul>\n\n\n\n<p>Ponadto, zach\u0119cam do zapoznania si\u0119 z&nbsp;<a href=\"https:\/\/github.com\/gpiechnik2\/xk6-smtp\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Repozytorium projektu<\/a> oraz <a href=\"https:\/\/github.com\/gpiechnik2\/k6-boilerplate\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Repozytorium poprzednich cz\u0119\u015bci<\/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;26703&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;1&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;2&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5&quot;,&quot;size&quot;:&quot;30&quot;,&quot;title&quot;:&quot;Wydajno\u015b\u0107 pod kontrol\u0105 z k6 \u2013 tworzenie rozszerze\u0144 do k6&quot;,&quot;width&quot;:&quot;159&quot;,&quot;_legend&quot;:&quot;{score}\\\/5&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: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 159px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 24px;\">\n            5\/5    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Narz\u0119dzia do test\u00f3w wydajno\u015bciowych stanowi\u0105 niezast\u0105pione wsparcie dla programist\u00f3w, pozwalaj\u0105c na badanie wydajno\u015bci i skalowalno\u015bci aplikacji podczas rosn\u0105cego obci\u0105\u017cenia. Warto &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/wydajnosc-pod-kontrola-z-k6-tworzenie-rozszerzen-do-k6\/\">Continued<\/a><\/p>\n","protected":false},"author":517,"featured_media":26720,"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":[1701,1570,1546],"class_list":["post-26703","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-testowanie","tag-k6","tag-tosca","tag-przeglad-narzedzi"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/01\/Wydajnosc-pod-kontrola-\u2013-co-sklania-mnie-do-wyboru-k6.jpg","category_names":["Testowanie"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/26703"}],"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\/517"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=26703"}],"version-history":[{"count":3,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/26703\/revisions"}],"predecessor-version":[{"id":26802,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/26703\/revisions\/26802"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/26720"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=26703"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=26703"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=26703"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}