{"id":25010,"date":"2023-10-20T05:00:00","date_gmt":"2023-10-20T03:00:00","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=25010"},"modified":"2023-10-12T15:09:48","modified_gmt":"2023-10-12T13:09:48","slug":"wydajnosc-pod-kontrola-z-k6-dodatkowe-konfiguracje-typy-modeli-scenariuszy-oraz-executorow","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/wydajnosc-pod-kontrola-z-k6-dodatkowe-konfiguracje-typy-modeli-scenariuszy-oraz-executorow\/","title":{"rendered":"Wydajno\u015b\u0107 pod kontrol\u0105 z k6 \u2013 dodatkowe konfiguracje, typy modeli scenariuszy oraz executor\u00f3w"},"content":{"rendered":"\n<p>Na etapie, kiedy przechodzimy z uruchamiania prostych scenariuszy testowych do projektowania bardziej zaawansowanych framework\u00f3w, musimy wzi\u0105\u0107 pod uwag\u0119 wiele wi\u0119cej czynnik\u00f3w. Odpowiednio rozplanowane konfiguracje czy dok\u0142adna znajomo\u015b\u0107 cyklu \u017cycia test\u00f3w pozwala na ich skuteczne wdro\u017cenie oraz zaplanowanie.<\/p>\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\">cz\u0119\u015bci serii<\/a> om\u00f3wimy sobie konfiguracje w k6, typy scenariuszy, executor\u00f3w oraz cykl \u017cycia test\u00f3w.<\/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: Konfiguracje, typy modeli scenariuszy i executor\u00f3w | cz\u0119\u015b\u0107 4\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/jC17U4xdqL8?start=23&#038;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<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Cykl \u017cycia testu<\/strong><\/h2>\n\n\n\n<p>Cykl \u017cycia tekstu w k6 dzieli si\u0119 na cztery sekcje. S\u0105 nimi:<\/p>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\">\n<li>Inicjacja (init) \u2013 wszystkie akcje, kt\u00f3re dziej\u0105 si\u0119 za trzema g\u0142\u00f3wnymi funkcjami. Mo\u017cna powiedzie\u0107, \u017ce ca\u0142y kod, kt\u00f3ry jest poza nimi (omawianymi w kolejnych punktach), to kod nale\u017c\u0105cy do sekcji init. Kod w tej sekcji wykonuje si\u0119 jako pierwszy. W ramach cyklu &#8222;init&#8221; mo\u017cemy przeprowadzi\u0107 operacje, kt\u00f3re s\u0105 niezb\u0119dne do przygotowania \u015brodowiska testowego. Obejmuj\u0105 one wczytanie danych testowych z plik\u00f3w, ustawienie globalnych zmiennych, inicjalizacj\u0119 po\u0142\u0105czenia z baz\u0105 danych lub serwerem i wiele innych czynno\u015bci.<\/li>\n\n\n\n<li>Przygotowanie (setup) \u2013 jest to specjalna funkcja przetrzymuj\u0105ca kod, kt\u00f3ry wywo\u0142ywany jest mi\u0119dzy cz\u0119\u015bci\u0105 inicjacji a faktycznym testem (cz\u0119\u015b\u0107 default).<\/li>\n\n\n\n<li>Cz\u0119\u015b\u0107 domy\u015blna (default) \u2013 ca\u0142y kod odpowiedzialny za wykonywanie operacji przez wirtualnego u\u017cytkownika. Z za\u0142o\u017cenia, w momencie uruchomienia testu o d\u0142u\u017cszym przebiegu ni\u017c jeden, funkcja default jest uruchamiana w k\u00f3\u0142ko w por\u00f3wnaniu do cz\u0119\u015bci init, setup i teardown, kt\u00f3re wywo\u0142ywane s\u0105 tylko raz.<\/li>\n\n\n\n<li>Zako\u0144czenie (teardown) \u2013 funkcja, kt\u00f3ra uruchamia si\u0119 raz po zako\u0144czeniu testu. S\u0142u\u017cy mi\u0119dzy innymi do generowania niestandardowych raport\u00f3w.<\/li>\n<\/ol>\n\n\n\n<p>Kto\u015b m\u00f3g\u0142by powiedzie\u0107, \u017ce cz\u0119\u015b\u0107 setup nie r\u00f3\u017cni si\u0119 od cz\u0119\u015bci init. Praktyczna r\u00f3\u017cnica polega na tym, \u017ce sekcja init wykonuje si\u0119 tylko raz dla ka\u017cdego wirtualnego u\u017cytkownika. Natomiast setup i teardown wywo\u0142uj\u0105 si\u0119 raz dla pe\u0142nego scenariusza obejmuj\u0105cego wszystkich wirtualnych u\u017cytkownik\u00f3w.<\/p>\n\n\n\n<p>Implementacja stage\u2019y 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\/2023\/10\/p4-attachment-01.png\"><img decoding=\"async\" width=\"860\" height=\"934\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-01.png\" alt=\"Implementacja stage\u2019y\" class=\"wp-image-25011\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-01.png 860w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-01-276x300.png 276w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-01-768x834.png 768w\" sizes=\"(max-width: 860px) 100vw, 860px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 1 Implementacja stage\u2019y<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Konfiguracja<\/strong><\/h2>\n\n\n\n<p>Konfigurowanie opcji (obiekt options) scenariuszy testowych mo\u017ce odbywa\u0107 si\u0119 na trzy sposoby:<\/p>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\">\n<li>bezpo\u015brednio w scenariuszu testowym,<\/li>\n\n\n\n<li>definiuj\u0105c odpowiednie zmienne \u015brodowiskowe,<\/li>\n\n\n\n<li>definiuj\u0105c parametr &#8211;config z odpowiedni\u0105 \u015bcie\u017ck\u0105 do pliku z konfiguracj\u0105.<\/li>\n<\/ol>\n\n\n\n<p>Pierwszy ze sposob\u00f3w jest dosy\u0107 toporny i w przypadku kilku \u015brodowisk \u2013 niezbyt elastyczny.<\/p>\n\n\n\n<p>Drugi natomiast wymaga od nas wpisywania za ka\u017cdym razem wielu parametr\u00f3w, co mo\u017ce by\u0107 nieczytelne. W niewielkich i szybkich projektach mog\u0142oby to by\u0107 wystarczaj\u0105ce, natomiast do budowania ca\u0142ego frameworku \u2013 jest nieefektywne.<\/p>\n\n\n\n<p>W zwi\u0105zku z powy\u017cszym osobi\u015bcie <strong>wybieram trzeci ze sposob\u00f3w<\/strong>, kt\u00f3ry pozwala na zdefiniowanie kilku konfiguracji r\u00f3wnocze\u015bnie dla kilku r\u00f3\u017cnych \u015brodowisk. W ten spos\u00f3b jeste\u015bmy w stanie dopasowa\u0107 konfiguracje do stanu faktycznego \u015brodowiska.<\/p>\n\n\n\n<p>Przyjrzyjmy si\u0119 przyk\u0142adowej konfiguracji w pliku config.json.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-02.png\"><img decoding=\"async\" width=\"1024\" height=\"603\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-02-1024x603.png\" alt=\"Przyk\u0142adowa konfiguracja w pliku config.json\" class=\"wp-image-25013\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-02-1024x603.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-02-300x177.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-02-768x452.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-02.png 1152w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 2 Przyk\u0142adowa konfiguracja w pliku config.json<\/figcaption><\/figure>\n\n\n\n<p>Po zdefiniowaniu konfiguracji mo\u017cemy wskaza\u0107 j\u0105 jako t\u0105, kt\u00f3ra powinna zosta\u0107 u\u017cyta w te\u015bcie.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-03.png\"><img decoding=\"async\" width=\"1024\" height=\"419\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-03-1024x419.png\" alt=\"Konfiguracja u\u017cyta w te\u015bcie\" class=\"wp-image-25015\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-03-1024x419.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-03-300x123.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-03-768x314.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-03.png 1032w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 3 Konfiguracja u\u017cyta w te\u015bcie<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Typy modeli scenariuszy<\/strong><\/h2>\n\n\n\n<p>Zanim przejdziemy do najci\u0119\u017cszej kwestii dotycz\u0105cej konfiguracji k6 \u2013 executor\u00f3w, musimy dok\u0142adnie zrozumie\u0107 koncept <strong>otwartego oraz zamkni\u0119tego modelu uruchomie\u0144<\/strong> (open and closed models). S\u0105 one podstaw\u0105 do zaprojektowania executor\u00f3w, czyli kontroler\u00f3w iteracji oraz wirtualnych u\u017cytkownik\u00f3w w testach.<\/p>\n\n\n\n<p>Kr\u00f3tko m\u00f3wi\u0105c, <strong>w modelu zamkni\u0119tym<\/strong> iteracje wirtualnych u\u017cytkownik\u00f3w (VU) rozpoczynaj\u0105 si\u0119 dopiero po zako\u0144czeniu ostatniej iteracji. Oznacza to, \u017ce nowe VU nie do\u0142\u0105czaj\u0105 do testu, dop\u00f3ki poprzednie iteracje nie zostan\u0105 zako\u0144czone. Z kolei <strong>w modelu otwartym<\/strong> VU pojawiaj\u0105 si\u0119 niezale\u017cnie od zako\u0144czenia iteracji. Oznacza to, \u017ce nowe VU mog\u0105 do\u0142\u0105cza\u0107 do testu w dowolnym momencie, bez czekania na zako\u0144czenie poprzednich iteracji.<\/p>\n\n\n\n<p>Oba modele maj\u0105 swoje zastosowanie <strong>w r\u00f3\u017cnych celach testowych<\/strong>.<\/p>\n\n\n\n<p>Model zamkni\u0119ty jest przydatny, gdy chcemy kontrolowa\u0107 liczb\u0119 VU i zapewni\u0107, \u017ce test zostanie wykonany przez okre\u015blon\u0105 liczb\u0119 VU bez interakcji z nowymi u\u017cytkownikami. Jest to szczeg\u00f3lnie istotne w testach, kt\u00f3re maj\u0105 na celu ocen\u0119 wydajno\u015bci systemu przy sta\u0142ej liczbie u\u017cytkownik\u00f3w.<\/p>\n\n\n\n<p>Z kolei model otwarty jest przydatny w scenariuszach, gdzie istotne jest testowanie skalowalno\u015bci systemu i jego zdolno\u015bci do obs\u0142ugi du\u017cej liczby u\u017cytkownik\u00f3w. Dzi\u0119ki temu, \u017ce nowe VU mog\u0105 do\u0142\u0105cza\u0107 w dowolnym momencie, da si\u0119 zaobserwowa\u0107, jak system reaguje na dynamicznie zmieniaj\u0105ce si\u0119 obci\u0105\u017cenie. Co sta\u0142o za implementacj\u0105 modelu otwartego?<\/p>\n\n\n\n<p>W modelu zamkni\u0119tym d\u0142u\u017csze czasy odpowiedzi aplikacji oznaczaj\u0105 d\u0142u\u017csze iteracje i ni\u017csz\u0105 cz\u0119stotliwo\u015b\u0107 pojawiania si\u0119 nowych iteracji \u2013 i odwrotnie, w przypadku szybszych czas\u00f3w reakcji. W literaturze dotycz\u0105cej testowania problem ten znany jest jako <strong>skoordynowane pomijanie<\/strong>. W zwi\u0105zku z tym zosta\u0142 wymy\u015blony pomys\u0142 implementacji mechanizmu, kt\u00f3ry by\u0142by bardziej niezale\u017cny od stanu aplikacji.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Typy executor\u00f3w<\/strong><\/h2>\n\n\n\n<p>Na podstawie opisanych powy\u017cej modeli w k6 dost\u0119pnych jest siedem executor\u00f3w. Jak ju\u017c wcze\u015bniej wspomnia\u0142em, s\u0105 to mechanizmy odpowiedzialne za manipulowanie ilo\u015bci\u0105 wirtualnych u\u017cytkownik\u00f3w (VU) oraz iteracjami. Rodzaj executora definiuje si\u0119 w obiekcie options, kt\u00f3ry jest nam ju\u017c znany. W zale\u017cno\u015bci od wybranego rodzaju executora, b\u0119d\u0105 dost\u0119pne r\u00f3\u017cne konfiguracje. Nie b\u0119dziemy tutaj omawia\u0107 ka\u017cdej z nich. Na tym etapie <strong>wa\u017cne jest zrozumienie, kiedy nale\u017cy u\u017cy\u0107 konkretnego executora<\/strong>.<\/p>\n\n\n\n<p>Warto zauwa\u017cy\u0107, \u017ce aby skorzysta\u0107 z danego executora, musimy go najpierw zdefiniowa\u0107 jako osobny scenariusz w polu scenario. To pole mo\u017ce zawiera\u0107 kilka kolejnych nast\u0119puj\u0105cych po sobie scenariuszy, co umo\u017cliwia dynamiczn\u0105 manipulacj\u0119 obci\u0105\u017ceniem.<\/p>\n\n\n\n<p>Przejd\u017amy teraz po kolei przez ka\u017cdy rodzaj executora wraz z przyk\u0142adem kodu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Shared iterations<\/strong><\/h3>\n\n\n\n<p>Typ shared iterations to rodzaj executora, kt\u00f3ry r\u00f3wnomiernie rozdziela iteracje pomi\u0119dzy okre\u015blon\u0105 liczb\u0119 jednostek VU. Jest to szczeg\u00f3lnie przydatne w przypadku test\u00f3w regresji, gdy chcemy w prosty i szybki spos\u00f3b oceni\u0107 wp\u0142yw dokonanych zmian w kodzie aplikacji.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-04.png\"><img decoding=\"async\" width=\"928\" height=\"806\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-04.png\" alt=\"Executor shared iterations\" class=\"wp-image-25017\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-04.png 928w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-04-300x261.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-04-768x667.png 768w\" sizes=\"(max-width: 928px) 100vw, 928px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 4 Executor shared iterations<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Per VU iterations<\/strong><\/h3>\n\n\n\n<p>Typ per-vu-iterations jest odpowiedzialny za przypisanie ka\u017cdemu wirtualnemu u\u017cytkownikowi (VU) dok\u0142adnej liczb\u0119 iteracji do wykonania. Przy u\u017cyciu tego typu executora, je\u015bli zdefiniujemy na przyk\u0142ad 10 wirtualnych u\u017cytkownik\u00f3w z 30 iteracjami w ci\u0105gu maksymalnie 30 sekund, \u0142\u0105czna liczba iteracji wyniesie 300 iteracji \/ 30 sekund, co daje 10 iteracji na sekund\u0119.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-05.png\"><img decoding=\"async\" width=\"928\" height=\"806\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-05.png\" alt=\"Executor per VU iterations\" class=\"wp-image-25019\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-05.png 928w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-05-300x261.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-05-768x667.png 768w\" sizes=\"(max-width: 928px) 100vw, 928px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 5 Executor per VU iterations<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Constant VUs<\/strong><\/h3>\n\n\n\n<p>Dzi\u0119ki opcji constant-vu mo\u017cemy wskaza\u0107, \u017ce okre\u015blona liczba wirtualnych u\u017cytkownik\u00f3w powinna kontynuowa\u0107 wykonywanie iteracji w niesko\u0144czono\u015b\u0107 przez okre\u015blony czas. Oznacza to, \u017ce po zako\u0144czeniu jednej iteracji natychmiast rozpoczyna si\u0119 kolejna iteracja do maksymalnego czasu zdefiniowanym w polu maxDuration.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-06.png\"><img decoding=\"async\" width=\"842\" height=\"764\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-06.png\" alt=\"Executor constant VUs\" class=\"wp-image-25021\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-06.png 842w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-06-300x272.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-06-768x697.png 768w\" sizes=\"(max-width: 842px) 100vw, 842px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 6 Executor constant VUs<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Ramping VUs<\/strong><\/h3>\n\n\n\n<p>Executor ramping-vus jest podobny do constant-vus, ale r\u00f3\u017cni si\u0119 od niego tym, \u017ce pozwala na bardziej zaawansowan\u0105 konfiguracj\u0119 testu. G\u0142\u00f3wn\u0105 rozbie\u017cno\u015bci\u0105 mi\u0119dzy nimi jest mo\u017cliwo\u015b\u0107 definiowania dodatkowych parametr\u00f3w, kt\u00f3re maj\u0105 wp\u0142yw na przebieg testu. Przede wszystkim, testowanie jest podzielone na etapy (stages), kt\u00f3rymi mo\u017cemy manipulowa\u0107. Dodatkowo, mo\u017cemy okre\u015bli\u0107 pocz\u0105tkow\u0105 liczb\u0119 wirtualnych u\u017cytkownik\u00f3w oraz czas, po kt\u00f3rym ka\u017cda iteracja zostanie przerwana.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-07.png\"><img decoding=\"async\" width=\"1024\" height=\"927\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-07-1024x927.png\" alt=\"Executor ramping VUs\" class=\"wp-image-25023\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-07-1024x927.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-07-300x272.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-07-768x695.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-07.png 1032w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 7 Executor ramping VUs<\/figcaption><\/figure>\n\n\n\n<p>Test rozpoczyna si\u0119 od dziesi\u0119ciu jednoczesnych wirtualnych u\u017cytkownik\u00f3w, a ta liczba jest utrzymywana przez 20 sekund. Nast\u0119pnie, w ci\u0105gu 30 sekund, liczba u\u017cytkownik\u00f3w zostaje zmniejszona do zera. Je\u015bli w tym czasie trwa jakakolwiek iteracja, test jest przerywany (ze wzgl\u0119du na zdefiniowane pole gracefulRampDown o warto\u015bci 0).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Constant arrival rate<\/strong><\/h3>\n\n\n\n<p>Typ constant-arrival-rate wykonuje okre\u015blon\u0105 liczb\u0119 iteracji w okre\u015blonym czasie. Jest to otwarty model, kt\u00f3ry dzia\u0142a niezale\u017cnie od czas\u00f3w odpowiedzi serwera. Oznacza to, \u017ce w przypadku spowolnienia odpowiedzi serwera, obci\u0105\u017cenie b\u0119dzie si\u0119 zwi\u0119ksza\u0107.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-08.png\"><img decoding=\"async\" width=\"998\" height=\"848\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-08.png\" alt=\"Executor Constant arrival rate\" class=\"wp-image-25025\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-08.png 998w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-08-300x255.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-08-768x653.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-08-400x340.png 400w\" sizes=\"(max-width: 998px) 100vw, 998px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 8 Executor Constant arrival rate<\/figcaption><\/figure>\n\n\n\n<p>W powy\u017cszym przypadku wskazali\u015bmy wykonanie 30 iteracji na sekund\u0119 przez 30 sekund. Dodatkowo, zarezerwowali\u015bmy 30 wirtualnych u\u017cytkownik\u00f3w do wykonania testu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Ramping arrival rate<\/strong><\/h3>\n\n\n\n<p>ramping-arrival-rate dzia\u0142a podobnie jak poprzedni typ z t\u0105 r\u00f3\u017cnic\u0105, \u017ce wskazujemy w nim kilka etap\u00f3w testu.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-09.png\"><img decoding=\"async\" width=\"962\" height=\"1024\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-09-962x1024.png\" alt=\"Executor ramping arrival rate\" class=\"wp-image-25027\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-09-962x1024.png 962w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-09-282x300.png 282w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-09-768x817.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/10\/p4-attachment-09.png 998w\" sizes=\"(max-width: 962px) 100vw, 962px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 9 Executor ramping arrival rate<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Externally controlled<\/strong><\/h3>\n\n\n\n<p>Ostatnim z typ\u00f3w executora jest externally-controlled. Jest to kontroler, kt\u00f3rego g\u0142\u00f3wnym zadaniem jest dynamiczne kontrolowanie dzia\u0142ania testu (poprzez polecenia pause, resume, scale) z poziomu konsoli.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Podsumowanie<\/strong><\/h2>\n\n\n\n<p>W dzisiejszej cz\u0119\u015bci om\u00f3wili\u015bmy cykl \u017cycia testu w k6, typy executor\u00f3w oraz porozmawiali\u015bmy o konfiguracjach.<\/p>\n\n\n\n<p>W kolejnej cz\u0119\u015bci zajmiemy si\u0119 projektowaniem rzeczywistych przyk\u0142ad\u00f3w scenariuszy testowych wydajno\u015bciowych oraz skupimy si\u0119 na tworzeniu naszego frameworka testowego.<\/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\/?category=testowanie&amp;tag=k6,przeglad-narzedzi,testy-wydajnosci,tosca,zalety-i-wady\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\">Wydajno\u015b\u0107 pod kontrol\u0105 \u2013 co sk\u0142ania mnie do wyboru k6?<\/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\/?category=testowanie&amp;tag=scenariusz-testowy,k6,tosca,przeglad-narzedzi\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\">Wydajno\u015b\u0107 pod kontrol\u0105 z k6 \u2013 nagrywanie, parametryzacja i uruchamianie pierwszego scenariusza testowego<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/wydajnosc-pod-kontrola-z-k6-metryki-progi-jakosci-tagowanie\/?category=testowanie&amp;tag=k6,przeglad-narzedzi,tosca\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">Wydajno\u015b\u0107 pod kontrol\u0105 z k6 \u2013 metryki, progi jako\u015bci, tagowanie<\/a><\/li>\n<\/ul>\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;25010&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;2&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: 2)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Wydajno\u015b\u0107 pod kontrol\u0105 z k6 \u2013 dodatkowe konfiguracje, typy modeli scenariuszy oraz executor\u00f3w&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: 2)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Na etapie, kiedy przechodzimy z uruchamiania prostych scenariuszy testowych do projektowania bardziej zaawansowanych framework\u00f3w, musimy wzi\u0105\u0107 pod uwag\u0119 wiele wi\u0119cej &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/wydajnosc-pod-kontrola-z-k6-dodatkowe-konfiguracje-typy-modeli-scenariuszy-oraz-executorow\/\">Continued<\/a><\/p>\n","protected":false},"author":517,"featured_media":25044,"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-25010","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\/2023\/10\/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\/25010"}],"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=25010"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/25010\/revisions"}],"predecessor-version":[{"id":25046,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/25010\/revisions\/25046"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/25044"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=25010"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=25010"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=25010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}