{"id":24104,"date":"2023-09-14T05:00:00","date_gmt":"2023-09-14T03:00:00","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=24104"},"modified":"2023-09-28T15:52:36","modified_gmt":"2023-09-28T13:52:36","slug":"wydajnosc-pod-kontrola-z-k6-nagrywanie-parametryzacja-i-uruchamianie-pierwszego-scenariusza-testowego","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/wydajnosc-pod-kontrola-z-k6-nagrywanie-parametryzacja-i-uruchamianie-pierwszego-scenariusza-testowego\/","title":{"rendered":"Wydajno\u015b\u0107 pod kontrol\u0105 z k6 \u2013 nagrywanie, parametryzacja i uruchamianie pierwszego scenariusza testowego"},"content":{"rendered":"\n<p>Aby skutecznie korzysta\u0107 z narz\u0119dzi i framework\u00f3w, konieczne jest pe\u0142ne zrozumienie ich fundamentalnych zasad i funkcjonalno\u015bci. W dzisiejszej cz\u0119\u015bci serii \u201e<a aria-label=\" (opens in a new tab)\" href=\"https:\/\/sii.pl\/blog\/wyszukiwarka\/k6\/\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\">Wydajno\u015b\u0107 pod kontrol\u0105 z k6<\/a>\u201d przedstawimy proces nagrywania scenariuszy testowych oraz sposoby ich parametryzacji. Om\u00f3wimy r\u00f3wnie\u017c, jak grupowa\u0107 scenariusze i przygotowa\u0107 kod w taki spos\u00f3b, aby by\u0142 \u0142atwy do d\u0142ugoterminowego utrzymania.<\/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: nagrywanie, parametryzacja i uruchamianie pierwszego scenariusza | cz\u0119\u015b\u0107 2\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/juEt_OL2_Cc?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>Nagrywanie scenariuszy testowych<\/strong><\/h2>\n\n\n\n<p>Podstawowym elementem przygotowania scenariuszy testowych jest pokrycie \u017c\u0105da\u0144 HTTP oraz operacji wykonywanych przez inne protoko\u0142y u\u017cywane w aplikacji. Najcz\u0119stszy przypadek stanowi tworzenie prostych \u017c\u0105da\u0144 do interfejsu API.<\/p>\n\n\n\n<p>Istniej\u0105 dwa g\u0142\u00f3wne sposoby przygotowania scenariuszy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>pierwszy z nich polega na r\u0119cznym tworzeniu \u017c\u0105da\u0144 na podstawie dokumentacji i widocznych \u017c\u0105da\u0144 w przegl\u0105darce,<\/li>\n\n\n\n<li>drugi spos\u00f3b to nagrywanie ruchu sieciowego za pomoc\u0105 dost\u0119pnego proxy.<\/li>\n<\/ul>\n\n\n\n<p>Om\u00f3wmy dwa najpopularniejsze sposoby nagrywania ruchu za po\u015brednictwem proxy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>przy u\u017cyciu rozszerzenia dla k6 stworzonego przez tw\u00f3rc\u00f3w narz\u0119dzia k6,<\/li>\n\n\n\n<li>korzystaj\u0105c z pliku HAR z przegl\u0105darki.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>K6 Browser Recorder<\/strong><\/h2>\n\n\n\n<p>K6 Browser Recorder to rozszerzenie dla przegl\u0105darek Firefox i Chrome, kt\u00f3re pozwala na generowanie skryptu w formacie k6 na podstawie ruchu wygenerowanego w przegl\u0105darce. Jest to odpowiednik rozszerzenia Blazemeter dla narz\u0119dzia JMeter. R\u00f3\u017cni\u0105 si\u0119 one jedynie tym, \u017ce dane s\u0105 zapisywane w chmurze k6, zamiast lokalnie jak w przypadku Blazemetera.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-01.png\"><img decoding=\"async\" width=\"860\" height=\"470\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-01.png\" alt=\"K6 Browser Recorder\" class=\"wp-image-24105\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-01.png 860w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-01-300x164.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-01-768x420.png 768w\" sizes=\"(max-width: 860px) 100vw, 860px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 1 K6 Browser Recorder<\/figcaption><\/figure>\n\n\n\n<p>Po klikni\u0119ciu przycisku \u201eStart recording\u201d i wykonaniu \u015bcie\u017cki testowej, nale\u017cy zatrzyma\u0107 nagrywanie, co przeniesie nas do panelu z zapisanym scenariuszem.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-02.png\"><img decoding=\"async\" width=\"1024\" height=\"543\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-02-1024x543.png\" alt=\"K6 Browser Recorder \u2013 zapisanie scenariusza\" class=\"wp-image-24107\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-02-1024x543.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-02-300x159.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-02-768x407.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-02-1536x814.png 1536w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-02-2048x1086.png 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 2 K6 Browser Recorder \u2013 zapisanie scenariusza<\/figcaption><\/figure>\n\n\n\n<p>Z panelu scenariusza b\u0119dziemy mieli mo\u017cliwo\u015b\u0107 wykonania r\u00f3\u017cnych dzia\u0142a\u0144, takich jak wykluczenie \u017c\u0105da\u0144 do domen trzecich, dodanie automatycznych op\u00f3\u017anie\u0144 (sleeps) oraz uwzgl\u0119dnienie plik\u00f3w statycznych.<\/p>\n\n\n\n<p>Nas interesuj\u0105 tylko \u017c\u0105dania dotycz\u0105ce g\u0142\u00f3wnej domeny, bez uwzgl\u0119dniania plik\u00f3w statycznych. Po kontynuacji procesu generacji, zostanie wygenerowany scenariusz testowy na podstawie wskazanej konfiguracji.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-025.png\"><img decoding=\"async\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-025-1024x539.png\" alt=\"Scenariusz testowy na podstawie wskazanej konfiguracji\" class=\"wp-image-24109\" width=\"840\" height=\"442\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-025-1024x539.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-025-300x158.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-025-768x404.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-025-1536x809.png 1536w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-025-2048x1079.png 2048w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 3 Scenariusz testowy na podstawie wskazanej konfiguracji<\/figcaption><\/figure>\n\n\n\n<p>W obecnej postaci wiele element\u00f3w, takich jak nag\u0142\u00f3wki, jest powtarzalnych. Ponadto, brakuje asercji i odpowiedniego nazewnictwa. Przed przyst\u0105pieniem do edycji om\u00f3wimy jednak drugi spos\u00f3b nagrywania scenariuszy testowych.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Konwersja plik\u00f3w HAR<\/strong><\/h2>\n\n\n\n<p>Deweloperzy Grafany przewidzieli mo\u017cliwo\u015b\u0107 generowania scenariuszy testowych z innych \u017ar\u00f3de\u0142 ni\u017c przegl\u0105darki Firefox i Chrome. Wszystkie przegl\u0105darki generuj\u0105 ruch sieciowy podczas interakcji u\u017cytkownika na stronie internetowej. Ten ruch mo\u017cna zapisywa\u0107 w formacie HAR (HTTP Archive).<\/p>\n\n\n\n<p>Plik HAR zawiera:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>opis \u017c\u0105da\u0144 HTTP,<\/li>\n\n\n\n<li>odpowiedzi,<\/li>\n\n\n\n<li>pliki zasob\u00f3w,<\/li>\n\n\n\n<li>czasy \u0142adowania,<\/li>\n\n\n\n<li>b\u0142\u0119dy i inne metadane zwi\u0105zane z interakcjami.<\/li>\n<\/ul>\n\n\n\n<p>Pliki HAR mo\u017cna generowa\u0107 za pomoc\u0105 r\u00f3\u017cnych narz\u0119dzi diagnostycznych i deweloperskich, takich jak narz\u0119dzia deweloperskie wbudowane w przegl\u0105darki internetowe, serwery proxy lub narz\u0119dzia do testowania wydajno\u015bci stron internetowych. Na przyk\u0142ad, w przegl\u0105darce Firefox mo\u017cemy \u015bci\u0105gn\u0105\u0107 plik HAR z \u017c\u0105daniami z zak\u0142adki \u201eNetwork\u201d w narz\u0119dziach deweloperskich.<\/p>\n\n\n\n<p>Przyk\u0142adowa cz\u0119\u015b\u0107 pliku HAR ma nast\u0119puj\u0105cy format:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-03.png\"><img decoding=\"async\" width=\"1024\" height=\"742\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-03-1024x742.png\" alt=\"Fragment pliku HAR\" class=\"wp-image-24111\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-03-1024x742.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-03-300x217.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-03-768x557.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-03-1536x1113.png 1536w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-03.png 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 4 Fragment pliku HAR<\/figcaption><\/figure>\n\n\n\n<p>Deweloperzy z Grafana Labs stworzyli narz\u0119dzie o nazwie \u201ehar-to-k6\u201d, kt\u00f3re umo\u017cliwia konwersj\u0119 plik\u00f3w w formacie HAR na scenariusze k6. Aby je zainstalowa\u0107, nale\u017cy skorzysta\u0107 z mened\u017cera pakiet\u00f3w Node.js.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-04.png\"><img decoding=\"async\" width=\"826\" height=\"428\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-04.png\" alt=\"Instalacja narz\u0119dzia har-to-k6\" class=\"wp-image-24113\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-04.png 826w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-04-300x155.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-04-768x398.png 768w\" sizes=\"(max-width: 826px) 100vw, 826px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 5 Instalacja narz\u0119dzia har-to-k6<\/figcaption><\/figure>\n\n\n\n<p>Po pomy\u015blnej instalacji, mo\u017cemy u\u017cy\u0107 konwertera do przetworzenia pobranego pliku w formacie HAR.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-05.png\"><img decoding=\"async\" width=\"928\" height=\"422\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-05.png\" alt=\"Wykorzystanie konwertera\" class=\"wp-image-24115\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-05.png 928w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-05-300x136.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-05-768x349.png 768w\" sizes=\"(max-width: 928px) 100vw, 928px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 6 Wykorzystanie konwertera<\/figcaption><\/figure>\n\n\n\n<p>Po u\u017cyciu narz\u0119dzia \u201ehar-to-k6\u201d zostanie wygenerowany scenariusz testowy k6 o nazwie scenario.js. Oto przyk\u0142adowa zawarto\u015b\u0107 wygenerowanego skryptu:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-06.png\"><img decoding=\"async\" width=\"931\" height=\"1024\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-06-931x1024.png\" alt=\"Zawarto\u015b\u0107 wygenerowanego skryptu\" class=\"wp-image-24117\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-06-931x1024.png 931w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-06-273x300.png 273w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-06-768x845.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-06-1397x1536.png 1397w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-06-1862x2048.png 1862w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-06.png 2048w\" sizes=\"(max-width: 931px) 100vw, 931px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 7 Zawarto\u015b\u0107 wygenerowanego skryptu<\/figcaption><\/figure>\n\n\n\n<p>W por\u00f3wnaniu z k6 Browser Recorder, korzystanie z konwertera \u201ehar-to-k6\u201d <strong>jest mniej elastyczne.<\/strong> Struktura pliku HAR nie ma swojej pe\u0142nej dokumentacji, co czasami prowadzi do problem\u00f3w z nieobs\u0142u\u017conymi polami w narz\u0119dziach. \u015awiadczy\u0107 o tym mo\u017ce <a href=\"https:\/\/github.com\/mitmproxy\/mitmproxy\/pull\/5814\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >niedawno wykryty problem w znanym narz\u0119dziu \u201emitmproxy\u201d.<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Om\u00f3wienie wygenerowanego scenariusza<\/strong><\/h2>\n\n\n\n<p>Po wygenerowaniu scenariusza testowego, konieczne jest jego edytowanie i dostosowanie. Wr\u00f3\u0107my do przyk\u0142adowego scenariusza utworzonego przez rozszerzenie k6 Browser, aby go om\u00f3wi\u0107.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-07.png\"><img decoding=\"async\" width=\"594\" height=\"1024\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-07-594x1024.png\" alt=\"Przyk\u0142adowy scenariusz testowy\" class=\"wp-image-24120\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-07-594x1024.png 594w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-07-174x300.png 174w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-07-768x1324.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-07-891x1536.png 891w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-07-1188x2048.png 1188w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-07.png 2048w\" sizes=\"(max-width: 594px) 100vw, 594px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 8 Przyk\u0142adowy scenariusz testowy<\/figcaption><\/figure>\n\n\n\n<p>Scenariusz w powy\u017cszym przypadku sk\u0142ada si\u0119 z dw\u00f3ch g\u0142\u00f3wnych element\u00f3w. Pierwszym z nich jest obiekt options.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-08.png\"><img decoding=\"async\" width=\"738\" height=\"550\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-08.png\" alt=\"Obiekt options\" class=\"wp-image-24122\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-08.png 738w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-08-300x224.png 300w\" sizes=\"(max-width: 738px) 100vw, 738px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 9 Obiekt options<\/figcaption><\/figure>\n\n\n\n<p>Definiuj\u0105c obiekt options, mo\u017cemy okre\u015bli\u0107 r\u00f3\u017cne parametry, takie jak:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>liczba r\u00f3wnocze\u015bnie dzia\u0142aj\u0105cych wirtualnych u\u017cytkownik\u00f3w (vus),<\/li>\n\n\n\n<li>czas trwania testu (duration),<\/li>\n\n\n\n<li>progi jako\u015bci (thresholds).<\/li>\n<\/ul>\n\n\n\n<p>Szczeg\u00f3\u0142owo om\u00f3wimy ten obiekt i jego mo\u017cliwo\u015bci w kolejnych cz\u0119\u015bciach serii. Obecnie istnieje ponad 50 r\u00f3\u017cnych opcji, kt\u00f3re mo\u017cna zdefiniowa\u0107.<\/p>\n\n\n\n<p>Drugim elementem wygenerowanego scenariusza jest funkcja main(). To w niej definiujemy \u017c\u0105dania HTTP i operacje na danych.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Parametryzacja<\/strong><\/h2>\n\n\n\n<p>Aktualnie jednym z najcz\u0119stszych b\u0142\u0119d\u00f3w jest brak mo\u017cliwo\u015bci wielokrotnego wykorzystania nag\u0142\u00f3wk\u00f3w HTTP i adres\u00f3w URL. Aby temu zaradzi\u0107, mo\u017cemy nieco zmodyfikowa\u0107 scenariusz, aby nie by\u0142o konieczne ponowne definiowanie ich przy ka\u017cdym \u017c\u0105daniu HTTP.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-09.png\"><img decoding=\"async\" width=\"1024\" height=\"850\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-09-1024x850.png\" alt=\"Scenariusz po modyfikacjach \" class=\"wp-image-24125\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-09-1024x850.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-09-300x249.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-09-768x638.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-09-1536x1275.png 1536w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-09.png 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 10 Scenariusz po modyfikacjach<\/figcaption><\/figure>\n\n\n\n<p>Kolejnym istotnym elementem testu jest czas interakcji mi\u0119dzy poszczeg\u00f3lnymi cz\u0119\u015bciami strony. W przypadku wygenerowanego scenariusza, czas spoczynku u\u017cytkownika wynosi 9,1s oraz 9,6s. Zak\u0142adamy, \u017ce czas reakcji mo\u017ce waha\u0107 si\u0119 od 3 do 10 sekund.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-10.png\"><img decoding=\"async\" width=\"826\" height=\"422\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-10.png\" alt=\"Zak\u0142adany czas reakcji \" class=\"wp-image-24127\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-10.png 826w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-10-300x153.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-10-768x392.png 768w\" sizes=\"(max-width: 826px) 100vw, 826px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 11 Zak\u0142adany czas reakcji<\/figcaption><\/figure>\n\n\n\n<p>Na tym etapie spr\u00f3bujmy r\u00f3wnie\u017c wprowadzi\u0107 nieco losowo\u015bci przy otwieraniu odpowiednich artyku\u0142\u00f3w. W ramach tego testu zak\u0142adamy, \u017ce istnieje jedynie pi\u0119\u0107 artyku\u0142\u00f3w, kt\u00f3re s\u0105 sta\u0142e. Aby wprowadzi\u0107 losowo\u015b\u0107, mo\u017cemy skorzysta\u0107 <a href=\"https:\/\/k6.io\/docs\/javascript-api\/jslib\/utils\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >z biblioteki k6-utils<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-11.png\"><img decoding=\"async\" width=\"649\" height=\"1024\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-11-649x1024.png\" alt=\"Wprowadzenie losowo\u015bci\" class=\"wp-image-24129\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-11-649x1024.png 649w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-11-190x300.png 190w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-11-768x1212.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-11-973x1536.png 973w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-11-1298x2048.png 1298w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-11.png 2048w\" sizes=\"(max-width: 649px) 100vw, 649px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 12 Wprowadzenie losowo\u015bci<\/figcaption><\/figure>\n\n\n\n<p>Do wydobycia danych z aplikacji, takich jak nazwa artyku\u0142u czy adres \u017ar\u00f3d\u0142owy, skorzystali\u015bmy z wbudowanych funkcji do manipulacji plikami HTML. Te funkcje mog\u0105 przypomina\u0107 inne, znane z framework\u00f3w do automatycznego testowania funkcjonalnego, takich jak Cypress czy Selenium.<\/p>\n\n\n\n<p>Zwr\u00f3\u0107my uwag\u0119 na umiejscowienie zmiennych articleName i articleHref \u2013 <strong>dlaczego s\u0105 one zdefiniowane przed grup\u0105?<\/strong> Porozmawiajmy o tym nieco szerzej.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Grupowanie \u017c\u0105da\u0144<\/strong><\/h2>\n\n\n\n<p>Aby utrzyma\u0107 sp\u00f3jno\u015b\u0107 w krokach testowych, warto stosowa\u0107 grupowanie. Mo\u017cna to por\u00f3wna\u0107 do kontroler\u00f3w transakcji w JMeterze. W k6 wszystkie zmienne zdefiniowane w grupie s\u0105 dost\u0119pne tylko w jej obr\u0119bie. Na przyk\u0142ad, je\u015bli zdefiniujemy articleName wewn\u0105trz drugiej grupy, jego warto\u015b\u0107 nie b\u0119dzie dost\u0119pna w trzeciej grupie.<\/p>\n\n\n\n<p>Grupowanie jest r\u00f3wnie\u017c przydatne w przypadku, gdy chcemy gromadzi\u0107 kilka \u017c\u0105da\u0144 wykonanych na tym samym etapie testu. Na przyk\u0142ad, gdy wchodzimy na stron\u0119 g\u0142\u00f3wn\u0105, cz\u0119sto wykonujemy kilka r\u00f3wnoleg\u0142ych \u017c\u0105da\u0144 HTTP. W takim przypadku wszystkie te \u017c\u0105dania mog\u0105 by\u0107 w jednej grupie o nazwie \u201eOpen main page\u201d. Wprowad\u017amy zmian\u0119 nazewnictwa w naszym 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\/09\/p2-attachment-12.png\"><img decoding=\"async\" width=\"1024\" height=\"897\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-12-1024x897.png\" alt=\"Zmiana nazewnictwa w te\u015bcie\" class=\"wp-image-24132\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-12-1024x897.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-12-300x263.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-12-768x673.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-12.png 1066w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 13 Zmiana nazewnictwa w te\u015bcie<\/figcaption><\/figure>\n\n\n\n<p>W ten spos\u00f3b b\u0119dziemy mogli utrzymywa\u0107 testy w prosty spos\u00f3b, nawet gdy dodamy lub usuniemy odpowiednie \u017c\u0105dania. Nie b\u0119dzie problemu z ich identyfikacj\u0105, a ponadto, jak przekonamy si\u0119 w kolejnych cz\u0119\u015bciach serii artyku\u0142\u00f3w, u\u0142atwi to analiz\u0119 w narz\u0119dziach trzecich.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Asercje i checki<\/strong><\/h2>\n\n\n\n<p>Zwr\u00f3\u0107my uwag\u0119 na brak asercji w naszym scenariuszu testowym. <strong>Asercja w programowaniu<\/strong> to mechanizm s\u0142u\u017c\u0105cy do sprawdzania warunk\u00f3w lub za\u0142o\u017ce\u0144 podczas wykonywania programu. Jest to spos\u00f3b weryfikacji, czy pewne oczekiwania s\u0105 spe\u0142nione, co pomaga w wykrywaniu b\u0142\u0119d\u00f3w. W przypadku nieprawid\u0142owej asercji podczas testu, jego uruchomienie jest przerywane.<\/p>\n\n\n\n<p>W implementacji narz\u0119dzia k6 <strong>zrezygnowano z asercji na rzecz check\u00f3w<\/strong>. Checki podobne do asercji, z t\u0105 r\u00f3\u017cnic\u0105, \u017ce test nie jest domy\u015blnie przerywany po otrzymaniu b\u0142\u0119dnej odpowiedzi.<\/p>\n\n\n\n<p>Checki przyjmuj\u0105 jako pierwszy argument obiekt <a href=\"https:\/\/k6.io\/docs\/javascript-api\/k6-http\/response\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >response<\/a>. Obiekt ten zawiera wiele p\u00f3l, na kt\u00f3rych mo\u017cna wykonywa\u0107 asercje.<\/p>\n\n\n\n<p>Najcz\u0119\u015bciej u\u017cywane w nich pola to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>status serwera (status),<\/li>\n\n\n\n<li>tre\u015b\u0107 odpowiedzi (body),<\/li>\n\n\n\n<li>nag\u0142\u00f3wki odpowiedzi (headers).<\/li>\n<\/ul>\n\n\n\n<p>Zdefiniujmy przyk\u0142adowy check, kt\u00f3ry sprawdza, czy status odpowiedzi jest poprawny, a tre\u015b\u0107 odpowiedzi zawiera oczekiwany tekst.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-13.png\"><img decoding=\"async\" width=\"1024\" height=\"296\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-13-1024x296.png\" alt=\"Definiowanie przyk\u0142adowego checka\" class=\"wp-image-24135\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-13-1024x296.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-13-300x87.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-13-768x222.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-13-1536x444.png 1536w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-13.png 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 14 Definiowanie przyk\u0142adowego checka<\/figcaption><\/figure>\n\n\n\n<p>Wykorzystuj\u0105c powy\u017cszy mechanizm, edytujmy nasz skrypt.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-14.png\"><img decoding=\"async\" width=\"573\" height=\"1024\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-14-573x1024.png\" alt=\"Edycja skryptu\" class=\"wp-image-24137\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-14-573x1024.png 573w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-14-168x300.png 168w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-14-768x1372.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-14-860x1536.png 860w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-14-1147x2048.png 1147w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/p2-attachment-14.png 2048w\" sizes=\"(max-width: 573px) 100vw, 573px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 15 Edycja skryptu<\/figcaption><\/figure>\n\n\n\n<p>Je\u015bli zdecydujemy si\u0119 na u\u017cycie tradycyjnej asercji, b\u0119dziemy musieli skorzysta\u0107 z w\u0142asnej, zdefiniowanej funkcji. W przeciwie\u0144stwie do wbudowanej funkcji check, kt\u00f3ra zwraca true lub false, mo\u017cemy wykorzysta\u0107 t\u0119 informacj\u0119, aby przerwa\u0107 bie\u017c\u0105cy przebieg testu (goroutine) i rozpocz\u0105\u0107 nowy.<\/p>\n\n\n\n<p>Do tego celu mo\u017cemy u\u017cy\u0107 wbudowanej funkcji fail.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Podsumowanie<\/strong><\/h2>\n\n\n\n<p>Niniejszy artyku\u0142 wprowadzi\u0142 nas w podstawowe funkcje narz\u0119dzia k6. Nauczyli\u015bmy si\u0119 nagrywa\u0107 przypadki testowe, parametryzowa\u0107 je i tworzy\u0107 podstawowy scenariusz testowy. W kolejnych cz\u0119\u015bciach skupimy si\u0119 na ustawianiu prog\u00f3w jako\u015bci, om\u00f3wimy tagowanie oraz poznamy r\u00f3\u017cne rodzaje metryk.<\/p>\n\n\n\n<p>Je\u017celi nie mieli\u015bcie okazji przeczyta\u0107 <a href=\"https:\/\/sii.pl\/blog\/wydajnosc-pod-kontrola-co-sklania-mnie-do-wyboru-k6\/?category=development-na-miekko&amp;tag=k6%2Cprzeglad-narzedzi%2Ctesty-wydajnosci%2Ctosca%2Czalety-i-wady&amp;fbclid=IwAR1b6f88-H7RfuQhLlro1T8Rig6Bs7G8IsaM77CvU8crmV1UrMW_dW-GE6A\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">poprzedniej cz\u0119\u015bci wprowadzaj\u0105cej<\/a>, zach\u0119camy do zapoznania si\u0119 z ni\u0105. Znajdziecie tam wi\u0119cej informacji na temat k6 oraz motywacji do wyboru tego narz\u0119dzia.<\/p>\n\n\n\n<p>W kolejnych artyku\u0142ach b\u0119dziemy kontynuowa\u0107 rozwijanie naszego scenariusza testowego, aby dostosowa\u0107 go do bardziej zaawansowanych potrzeb i zag\u0142\u0119bi\u0107 si\u0119 w funkcjonalno\u015bci k6. Zach\u0119camy do <a href=\"https:\/\/sii.pl\/blog\/wyszukiwarka\/k6\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">\u015bledzenia naszej serii<\/a>, aby dowiedzie\u0107 si\u0119 wi\u0119cej o tej pot\u0119\u017cnej platformie do testowania wydajno\u015bci.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Przydatne linki<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/k6.io\/docs\/test-authoring\/create-tests-from-recordings\/using-the-browser-recorder\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >K6 \u2013 using the browser recorder<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/grafana\/har-to-k6\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Grafana, har-to-k6<\/a><\/li>\n\n\n\n<li><a aria-label=\" (opens in a new tab)\" href=\"https:\/\/k6.io\/docs\/javascript-api\/k6-http\/response\/\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >K6 \u2013 response<\/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;24104&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;3&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: 3)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Wydajno\u015b\u0107 pod kontrol\u0105 z k6 \u2013 nagrywanie, parametryzacja i uruchamianie pierwszego scenariusza testowego&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: 3)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Aby skutecznie korzysta\u0107 z narz\u0119dzi i framework\u00f3w, konieczne jest pe\u0142ne zrozumienie ich fundamentalnych zasad i funkcjonalno\u015bci. W dzisiejszej cz\u0119\u015bci serii &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/wydajnosc-pod-kontrola-z-k6-nagrywanie-parametryzacja-i-uruchamianie-pierwszego-scenariusza-testowego\/\">Continued<\/a><\/p>\n","protected":false},"author":517,"featured_media":24140,"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,1546,1788,1570],"class_list":["post-24104","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-testowanie","tag-k6","tag-przeglad-narzedzi","tag-scenariusz-testowy","tag-tosca"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/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\/24104"}],"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=24104"}],"version-history":[{"count":3,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/24104\/revisions"}],"predecessor-version":[{"id":24536,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/24104\/revisions\/24536"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/24140"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=24104"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=24104"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=24104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}