<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Testy - bdabek.pl</title>
	<atom:link href="https://www.bdabek.pl/tag/testy/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bdabek.pl/tag/testy/</link>
	<description>Bartosz Dąbek</description>
	<lastBuildDate>Sat, 03 Dec 2022 11:06:27 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.bdabek.pl/wp-content/uploads/2020/10/cropped-5986134a-46ba-41ac-9c82-bb4ffb3a7bf3_200x200-1-150x150.png</url>
	<title>Testy - bdabek.pl</title>
	<link>https://www.bdabek.pl/tag/testy/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Testy E2E Dla Backend Developera 🙄. Czy warto❓❓</title>
		<link>https://www.bdabek.pl/testy-e2e-dla-backend-developera-%f0%9f%99%84-czy-warto%e2%9d%93%e2%9d%93/</link>
					<comments>https://www.bdabek.pl/testy-e2e-dla-backend-developera-%f0%9f%99%84-czy-warto%e2%9d%93%e2%9d%93/#respond</comments>
		
		<dc:creator><![CDATA[Bartosz Dąbek]]></dc:creator>
		<pubDate>Sat, 19 Dec 2020 11:00:35 +0000</pubDate>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[Testy]]></category>
		<guid isPermaLink="false">https://www.bdabek.pl/?p=2404</guid>

					<description><![CDATA[<p>Zapewnienie poprawności aplikacji z punktu widzenia zespołu, który tę aplikację rozwija jest MEGA istotne. Nie wiem jak podkreślić tą istotność, dlatego użyłem wielkich liter + pogrubienia. W jaki sposób zapewnić tę poprawność? Jednym z rozwiązań jest wprowadzenie testów end to end. Ten rodzaj testowania ma jednak swoje kompromisy&#8230; Cześć  W dzisiejszym artykule: Testy End to&#8230;&#160;<a href="https://www.bdabek.pl/testy-e2e-dla-backend-developera-%f0%9f%99%84-czy-warto%e2%9d%93%e2%9d%93/" rel="bookmark">Dowiedz się więcej &#187;<span class="screen-reader-text">Testy E2E Dla Backend Developera 🙄. Czy warto❓❓</span></a></p>
<p>Artykuł <a href="https://www.bdabek.pl/testy-e2e-dla-backend-developera-%f0%9f%99%84-czy-warto%e2%9d%93%e2%9d%93/">Testy E2E Dla Backend Developera 🙄. Czy warto❓❓</a> pochodzi z serwisu <a href="https://www.bdabek.pl">bdabek.pl</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Zapewnienie poprawności aplikacji z punktu widzenia zespołu, który tę aplikację rozwija jest <strong>MEGA</strong> istotne. Nie wiem jak podkreślić tą istotność, dlatego użyłem wielkich liter + pogrubienia. W jaki sposób zapewnić tę poprawność? Jednym z rozwiązań jest wprowadzenie testów end to end. Ten rodzaj testowania ma jednak swoje kompromisy&#8230;</p>
<hr />
<h3>Cześć <img decoding="async" class="emoji" role="img" draggable="false" src="https://s.w.org/images/core/emoji/12.0.0-1/svg/1f642.svg" alt="&#x1f642;" /></h3>
<p>W dzisiejszym artykule:</p>
<ul>
<li><a href="#Testy End to End"><strong>Testy End to End &#8211; czym są?</strong></a></li>
<li><a href="#Kiedy i czy warto pisać testy E2E?"><strong>Kiedy i czy warto pisać testy E2E?</strong></a></li>
<li><a style="font-weight: bold;" href="#Testy E2E moim okiem">Testy E2E moim okiem</a></li>
</ul>
<hr id="Testy End to End" />
<h2 id="Testy End to End"> <a href="#Testy End to End"><span class="dashicons dashicons-admin-links"></span></a>Testy End to End &#8211; czym są?</h2>
<p>Testy end to end (E2E), akceptacyjne, czy też funkcjonalne, to wszystko sprowadza się do jednego &#8211; do <strong>testów</strong> <strong>weryfikujących pewne zachowanie aplikacji całościowo. </strong>Ten rodzaj testowania weryfikuje <strong>funkcjonalność</strong> od początku do końca (<strong>end to end</strong>), symulując zachowanie użytkowników lub procesu. W pozostałej części artykułu, słownictwo: testy e2e, akceptacyjne czy funkcjonalne, będę używał wymiennie.</p>
<p><a href="https://www.bdabek.pl/?attachment_id=2619" rel="attachment wp-att-2619"><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-2619" src="https://www.bdabek.pl/wp-content/uploads/2020/12/end-to-end-testing-process.jpg" alt="" width="400" height="300" srcset="https://www.bdabek.pl/wp-content/uploads/2020/12/end-to-end-testing-process.jpg 400w, https://www.bdabek.pl/wp-content/uploads/2020/12/end-to-end-testing-process-300x225.jpg 300w" sizes="(max-width: 400px) 100vw, 400px" /></a></p>
<p>Jeżeli nie masz doświadczenia z tego rodzaju testami, to możesz wyobrazić to sobie jako <strong>użytkownika klikającego twoją aplikację i weryfikującego czy zostały spełnione założone wyniki</strong>. Oczywiście różnica jest taka, że w przypadku testów automatycznych, kroki te wykonują się same i mogą być odpalone w dowolnym momencie.</p>
<p>Wydaje się to być idealnym rozwiązaniem? No nie do końca. Trzeba pamiętać, że <strong>testy te, po pierwsze trzeba napisać</strong>. A i to nie wszystko.. bo jeżeli pracujesz w tej branży nieco dłużej to wiesz doskonale, że aplikacje ewoluują. Z czasem będą dochodziły nowe wymagania, które trzeba zaimplementować. Obecna implementacja też nie jest wieczna. Pod wpływem zmieniających się trendów ona również wymaga konserwacji (lub po prostu refaktoru), a co za tym idzie &#8211; musimy uwzglednić przy tym testy, które już posiadamy.</p>
<h4>Dlaczego testy E2E są popularne / zachęcające?</h4>
<p>Nurt testów akceptacyjnych zyskał dużą popularność szczególnie wśród ludzi z biznesu, ale nie tylko. Nawet słynna piramida testów uwzględnia ten rodzaj weryfikacji. Dlaczego tak jest? Z punktu widzenia biznesu zachęcająca jest <strong>świadomość</strong>, że taki test symuluje <strong>realne zachowanie użytkownika</strong>. A to prowadzi do kolejnej zalety, czyli <strong>poczucia bezpieczeństwa</strong>, że dany scenariusz działa prawidłowo. Z punktu widzenia developera plusem jest ich łatwość pisania &#8211; <strong>nie ma potrzeby</strong> pisania mocków lub symulowania komunikacji z bazą danych czy brokerem wiadomości.</p>
<h4>Jakie są wady testowania E2E?</h4>
<p>Oprócz wcześniej już wspomnianego wysiłku potrzebnego na napisanie takich testów i ich utrzymanie jedną z poważniejszych wad jest <strong>długość czasu wykonania</strong>. Nikt nie lubi oczekiwania, a testy e2e dodają solidną cegłę do tego procesu. Oczywiste jest, że lokalnie nie będziemy tych testów odpalać co chwilę (o ile w ogóle je odpalimy), natomiast przed wdrożeniem na konkretne środowisko dobrze byłoby się upewnić, że wszystko działa. I dzięki takim testom nasz pipeline wdrożeniowy właśnie się wydłuża.</p>
<p>Kolejnymi wadami są <strong>trudność debugowania</strong> oraz <strong>fałszywe negatywy</strong>. Zacznijmy od pierwszego. Załóżmy, że napisałeś test e2e dla funkcjonalności zakupu produktu w sklepie. Proces polegał na zalogowaniu się na konto, dodanie produktu do koszyka a następnie sfinalizowanie zakupu (dokonanie płatności). <strong>Test się wyłożył</strong>, ale gdzie dokładnie? Testy akceptacyjne nie pozwolą na szybką izolację wystąpienia problemu. Będziesz zmuszony odpalić test jeszcze raz lub samemu wykonać dany scenariusz, żeby wiedzieć co poszło nie tak. A i to sprawi, że będziesz musiał zaglądnąć w logi serwera, aby zweryfikować co dokładnie poszło nie tak.</p>
<p>Przechodząc do fałszywych negatywów. Ponownie załóżmy ten sam proces zakupu produktu. Twoja aplikacja działa poprawnie natomiast jeden z mikroserwisów z katalogiem produktów wyłożył się przed testami i znów test nie przeszedł. Ponownie wykorzystujesz czas na znalezienie błędu w aplikacji, którego de&#8217;facto nie ma.</p>
<hr id="Kiedy i czy warto pisać testy E2E?" />
<h2 id="Kiedy i czy warto pisać testy E2E?"> <a href="#Kiedy i czy warto pisać testy E2E?"><span class="dashicons dashicons-admin-links"></span></a>Kiedy i czy warto pisać testy E2E?</h2>
<p>Jeżeli miałbym odpowiadać na takie pytanie, to moją odpowiedzią byłoby pytanie w przeciwnym kierunku: <strong>jaki jest kluczowy scenariusz biznesowy? </strong>Czyli, jaka jest wartość biznesowa. Ile firma zarabia na danej funkcji, czy błędne działanie może spowodować istotne straty, jak często funkcja jest używana.</p>
<p>Szczera rozmowa z biznesem na ten temat pozwoli nam napisać <strong>mniej testów</strong>. Testy te będą jednak krytyczne i dadzą komfort psychiczny zarówno w kwesti poprawności jak i faktu, że nasz deployment nie ciągnie się godzinami. Bardzo ważne jest aby umieć zadawać dociekliwe pytania przy rozmowie z biznesem, np. <em>co się stanie, z punktu widzenia biznesu, jeżeli ta funkcjonalność nie będzie miała testu akceptacyjnego? </em>(jeżeli był nacisk aby taki test napisać)</p>
<p>Na pytanie z tego akapitu nie da się odpowiedzieć w sposób jednoznaczny. Jeżeli będziesz mieć kiedykolwiek możliwość decyzji o pisaniu takich testów, to staraj się patrzeć na to przez pryzmat <strong>wartości biznesowej</strong>. Jeżeli masz zespół testerów, który manualnie kilka scenariusze, to może faktycznie warto byłoby to zautomatyzować. Napisać kilka przykładowych scenariuszy i zobaczyć jaką wartość to przyniesie. Wtedy to testerzy mogliby zająć się utrzymywaniem testów. Na początku będzie ciężko bo trzeba nauczyć się nowych narzędzi i przyzwyczaić wszystkich do pewnych zmian, ale z czasem może (nie musi) przynieść to dużą wartość biznesową. Jaką? Jeżeli klient będzie chciał wdrożyć nową wersję produktu, to z czasem wystarczy odpalenie testów aby przetestować krytyczne ścieżki i z dużym komfortem możemy to wdrażać.</p>
<hr id="Testy E2E moim okiem" />
<h2 id="Testy E2E moim okiem"> <a href="#Testy E2E moim okiem"><span class="dashicons dashicons-admin-links"></span></a>Testy E2E moim okiem</h2>
<p>Rzeczywistość jest taka, że na ilu projektach byłem, to testów end to end <strong>nie musiałem pisać nigdy</strong>. Nie oznacza to, że ich nie pisałem. Pojawiały się próby, gdzie biznes chciał aby takie testy się pojawiły, ale zazwyczaj kończyło się to tylko na próbach.</p>
<p>Moim zdaniem backend developer <strong>powinien umieć napisać testy end to end</strong>. Powinien <strong>znać narzędzia</strong>, które wspomagają ten proces. A czy powinien pisać? To już zależy od klienta dla którego pracujemy. Dla krytycznych funkcjonalności, które rzadko się zmieniają a przynoszą dużą wartość powinniśmy przynajmniej rozważyć takie testy. Jednak wydaje mi się, że testy jednostkowe oraz integracyjne w dużej mierze są wystarczające a dodatkowa warstwa testów wcale nie okazuje się tak bardzo pomocna.</p>
<p>Pisanie testów akceptacyjnych to nie jest tylko wyklepanie pewnego scenariusza. To też <strong>umiejętność miękka</strong>. Jako osoba pisząca scenariusz muszę wejść w buty klienta (osoby, która korzysta z oprogramowania, które rozwijamy), a najlepiej jest to zrobić przez rozmowę. A sama umiejętność rozmowy oraz wyciąganie kluczowych informacji to już soft skill <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> . Warto też pamiętać, że jeżeli będziesz umiał pisać testy e2e, to Twoja <strong>wartość rośnie</strong>. Jeżeli klient chce na projekcie takie testy to Ty, jako osoba majaca tą umiejętność będziesz bardziej atrakcyjny. To natomiast, przy odpowiedniej negocjacji przekłada się na większe pieniądze. W końcu nie pracujemy charytatywnie&#8230;</p>
<hr />
<h2>Podsumowanie</h2>
<p><a href="https://www.bdabek.pl/spring-boot-i-logi-ustawienia-logbacka/lightbulb/" rel="attachment wp-att-976" data-slb-active="1" data-slb-asset="1379905354" data-slb-internal="976"><img decoding="async" class="aligncenter wp-image-976 size-thumbnail lazyloaded" src="https://cdn.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_150,h_150/https://www.bdabek.pl/wp-content/uploads/2020/05/Lightbulb-150x150.jpg" alt="" width="150" height="150" data-src="https://cdn.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_150,h_150/https://www.bdabek.pl/wp-content/uploads/2020/05/Lightbulb-150x150.jpg" /></a></p>
<p>Nie da się stwierdzić jednoznacznie czy warto pisać testy e2e. Odpowiedź na to pytanie brzmi <strong>to zależy</strong>. Jest to zależne od klienta i wartości biznesowej, jaką dany test ma spełnić. Jako developerzy <strong>powinniśmy starać się ochładzać</strong> zapędy biznesowe do pisania tego rodzaju testów. Nie mówię, że całkowicie mamy ich nie pisać, ale zawsze powinniśmy przeprowadzić szczerą rozmowę z ludźmi na szczeblu, aby się dowiedzieć czy faktycznie dany scenariusz przynosi wartość.</p>
<p>Źródła:</p>
<ul>
<li><strong><a href="https://it.esky.pl/programowanie/3-typy-testow-ktore-musisz-zrozumiec-by-robic-efektywne-tdd/">3 typy testów, które musisz zrozumieć, by robić efektywne TDD</a></strong></li>
<li><a href="https://smarttesting.pl/"><strong>Kurs SmartTesting.pl</strong></a></li>
</ul>
<hr />
<h3>Za tydzień</h3>
<p>Już ostatni wpis w tym roku!! Porozmawiamy o springu i adnotacjach do wstrzykiwania zależności.</p>
<div id="wpd-post-rating" class="wpd-not-rated">
<div class="wpd-rating-wrap"></div>
</div>
<p>Artykuł <a href="https://www.bdabek.pl/testy-e2e-dla-backend-developera-%f0%9f%99%84-czy-warto%e2%9d%93%e2%9d%93/">Testy E2E Dla Backend Developera 🙄. Czy warto❓❓</a> pochodzi z serwisu <a href="https://www.bdabek.pl">bdabek.pl</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bdabek.pl/testy-e2e-dla-backend-developera-%f0%9f%99%84-czy-warto%e2%9d%93%e2%9d%93/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>JMeter. Testujemy odpowiedź serwera 👨🏾‍🚀</title>
		<link>https://www.bdabek.pl/jmeter-testujemy-odpowiedz-serwera/</link>
					<comments>https://www.bdabek.pl/jmeter-testujemy-odpowiedz-serwera/#respond</comments>
		
		<dc:creator><![CDATA[Bartosz Dąbek]]></dc:creator>
		<pubDate>Sat, 06 Jun 2020 10:00:06 +0000</pubDate>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[Testy]]></category>
		<guid isPermaLink="false">https://www.bdabek.pl/?p=1081</guid>

					<description><![CDATA[<p>JMeter &#8211; czyli narzędzie do testowania wydajności aplikacji &#8211; może również być użyty w testach funkcjonalnych. Mogą wystąpic sytuacje, kiedy będziesz chciał(a) napisać test który przetestuje czy Twoje API zwraca to co powinno. Dobrymi przykładami są testy sprawdzające wynik odpowiedzi, status kodu czy też cała sekwencja zdarzeń. Na zawsze ponosisz odpowiedzialność za to, co oswoiłeś.&#8230;&#160;<a href="https://www.bdabek.pl/jmeter-testujemy-odpowiedz-serwera/" rel="bookmark">Dowiedz się więcej &#187;<span class="screen-reader-text">JMeter. Testujemy odpowiedź serwera 👨🏾‍🚀</span></a></p>
<p>Artykuł <a href="https://www.bdabek.pl/jmeter-testujemy-odpowiedz-serwera/">JMeter. Testujemy odpowiedź serwera 👨🏾‍🚀</a> pochodzi z serwisu <a href="https://www.bdabek.pl">bdabek.pl</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>JMeter &#8211; czyli narzędzie do testowania wydajności aplikacji &#8211; może również być użyty w testach funkcjonalnych. Mogą wystąpic sytuacje, kiedy będziesz chciał(a) napisać test który przetestuje czy Twoje API zwraca to co powinno. Dobrymi przykładami są testy sprawdzające wynik odpowiedzi, status kodu czy też cała sekwencja zdarzeń.</p>
<div id="comment657" class="partial-collapse collapse" aria-expanded="false">
<div class="collapse-content">
<blockquote>
<p style="text-align: center;"><em>Na zawsze ponosisz odpowiedzialność za to, co oswoiłeś.</em></p>
<p style="text-align: right;"><em style="font-size: 13px; text-align: right;"><a class="quotes__singleAuthor--author" href="https://lubimyczytac.pl/autor/14276/antoine-de-saint-exupery">Antoine de Saint-Exupéry</a>, </em><a class="quotes__singleAuthor--book " style="font-size: 13px; text-align: right;" href="https://lubimyczytac.pl/ksiazka/20946/maly-ksiaze"><em>Mały Książę</em></a></p>
</blockquote>
</div>
</div>
<hr />
<h4>Cześć <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h4>
<p>Dzisiejszy artykuł jest kontynuacją serii o narzędziu JMeter i testowaniu. Pierwszy artykuł &#8211; teoretyczny &#8211; był o <strong><a href="https://www.bdabek.pl/testy-wydajnosciowe/" target="_blank" rel="noopener noreferrer">podstawach testów wydajnościowych</a></strong>, a w ostatnim opisywałem <strong><a href="https://www.bdabek.pl/jmeter-wszystko-co-jest-ci-potrzebne-do-uruchomienia-pierwszych-testow/" target="_blank" rel="noopener noreferrer">podstawowe funkcje JMetera</a> </strong>&#8211; tak aby móc odpalić pierwsze testy.</p>
<p>W dzisiejszym artykule napiszemy kilka scenariuszy do <strong><a href="https://gorest.co.in/" target="_blank" rel="noopener noreferrer">publicznego API do testów</a></strong>, dziś dowiesz się</p>
<ul>
<li><strong><a href="#Co można sprawdzać przy pomocy JMetera">Co można sprawdzać przy pomocy JMetera</a></strong></li>
<li><a href="#Jak sprawdzanie wyników wpływa na wydajność testów"><strong>Jak sprawdzanie wyników wpływa na wydajność testów</strong></a></li>
<li><a href="#Testujemy sprawdzenie odpowiedzi API"><strong>Testujemy sprawdzenie odpowiedzi API</strong></a></li>
<li><a href="#Przetestujmy ograniczenie"><strong>Przetestujmy ograniczenie</strong></a></li>
</ul>
<hr id="Co można sprawdzać przy pomocy JMetera" />
<h3>Co można sprawdzać przy pomocy JMetera</h3>
<p>JMeter udostępnia kilka ciekawych asercji. Jednak z punktu widzenia typowego developera &#8211; głównie korzysta się ze znacznie zawężonego grona asercji (response, duration, size).</p>
<p><a href="https://www.bdabek.pl/jmeter-testujemy-odpowiedz-serwera/asercje/" rel="attachment wp-att-1121"><img decoding="async" class="aligncenter size-full wp-image-1121" src="https://www.bdabek.pl/wp-content/uploads/2020/06/asercje.png" alt="" width="171" height="321" srcset="https://www.bdabek.pl/wp-content/uploads/2020/06/asercje.png 171w, https://www.bdabek.pl/wp-content/uploads/2020/06/asercje-160x300.png 160w" sizes="(max-width: 171px) 100vw, 171px" /></a></p>
<ul>
<li><strong><a href="https://jmeter.apache.org/usermanual/component_reference.html#Response_Assertion" target="_blank" rel="noopener noreferrer">Response Assertion</a></strong> &#8211; <strong>używana najczęściej</strong>. Pozwala na sprawdzenie między innymi odpowiedzi wiadomości, zwracane kody, nagłówki.</li>
<li><a href="https://jmeter.apache.org/usermanual/component_reference.html#Duration_Assertion" target="_blank" rel="noopener noreferrer"><strong>Duration Assertion</strong></a> &#8211;<strong>prosta i przydatna asercja</strong>, szczególnie w testach wydajnościowych. Weryfikuje czy dany test zakończył się w zadanym czasie. Jeżeli wprowadzony czas zostanie przekroczony asercja zwróci błąd.</li>
<li><strong><a href="https://jmeter.apache.org/usermanual/component_reference.html#Size_Assertion" target="_blank" rel="noopener noreferrer">Size assertion</a></strong> &#8211; sprawdza wielkość odpowiedzi czy jest zgodna z oczekiwaną (mniejsza/większa/równa/różna). Możemy sprawdzić zarówno całą odpowiedź jak też poszczególne komponenty, np. tylko headery czy też ciało odpowiedzi. <strong>Wartość jest definiowana w bajtach</strong>!</li>
<li><a href="https://jmeter.apache.org/usermanual/component_reference.html#XML_Assertion" target="_blank" rel="noopener noreferrer"><strong>XML Assertion</strong></a> &#8211; waliduje czy odpowiedź posiada poprawnie sformatowany dokument XML. Jest to walidacja poprawności dokumentu tylko pod kątem poprawności tagów XML itp. <strong>Walidacja nie obejmuje</strong> schemy, DTD czy też innych walidacji!</li>
<li><strong><a href="https://jmeter.apache.org/usermanual/component_reference.html#HTML_Assertion" target="_blank" rel="noopener noreferrer">HTML Assertion</a></strong> &#8211; sprawdza poprawność zwróconego pliku HTML.</li>
</ul>
<hr id="Jak sprawdzanie wyników wpływa na wydajność testów" />
<h3>Jak sprawdzanie wyników wpływa na wydajność testów</h3>
<p>Pomimo iż sprawdzanie każdej zwróconej odpowiedzi może być kuszące należy pamiętać, że<strong> każda asercja ma swój koszt</strong> w postaci dodatkowego obciążenia CPU czy też pamięci. Jeżeli masz zamiar wykonywać testy wydajnościowe to zastanów się wcześniej czy aby na 100% potrzebujesz sprawdzać konkretną rzecz! Jeżeli tak &#8211; to ogranicz sprawdzanie odpowiedzi tylko do najważniejszych!</p>
<table>
<thead>
<tr>
<th><strong>Assertion</strong></th>
<th><strong>CPU/Memory Usage</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Response Assertion</strong></td>
<td><span style="color: #ff9900;"><strong>Średnie</strong></span></td>
</tr>
<tr>
<td><strong>Duration Assertion</strong></td>
<td><span style="color: #339966;"><strong>Niskie</strong></span></td>
</tr>
<tr>
<td><strong>Size Assertion</strong></td>
<td><span style="color: #339966;"><strong>Niskie</strong></span></td>
</tr>
<tr>
<td><strong>XML Assertion</strong></td>
<td><span style="color: #ff0000;"><strong>Wysokie</strong></span></td>
</tr>
<tr>
<td><strong>Beanshell Assertion</strong></td>
<td><span style="color: #ff9900;"><strong>Zmienne (zależne od skryptu)</strong></span></td>
</tr>
<tr>
<td><strong>MD5Hex Assertion</strong></td>
<td><span style="color: #339966;"><strong>Niskie</strong></span></td>
</tr>
<tr>
<td><strong>HTML Assertion</strong></td>
<td><span style="color: #ff0000;"><strong>Wysokie</strong></span></td>
</tr>
<tr>
<td><strong>XPath Assertion</strong></td>
<td><span style="color: #ff0000;"><strong>Wysokie</strong></span></td>
</tr>
<tr>
<td><strong>XML Schema Assertion</strong></td>
<td><span style="color: #ff0000;"><strong>Wysokie</strong></span></td>
</tr>
<tr>
<td><strong>JSR223 Assertion</strong></td>
<td><span style="color: #ff9900;"><strong>Zmienne (zależne od skryptu)</strong></span></td>
</tr>
<tr>
<td><strong>Compare Assertion</strong></td>
<td><span style="color: #ff0000;"><strong>Wysokie</strong></span></td>
</tr>
<tr>
<td><strong>SMIME Assertion</strong></td>
<td><span style="color: #ff9900;"><strong>Średnie</strong></span></td>
</tr>
<tr>
<td><strong>Json Assertion</strong></td>
<td><span style="color: #ff0000;"><strong>Wysokie</strong></span></td>
</tr>
</tbody>
</table>
<p>Tabelka pochodzi z <strong><a href="https://octoperf.com/blog/2018/04/19/jmeter-assertions/" target="_blank" rel="noopener noreferrer">tego wpisu</a></strong>. Do którego zresztą zachęcam jeżeli chcesz więcej szczegółów o asercjach w JMeter.</p>
<hr id="Testujemy sprawdzenie odpowiedzi API" />
<h3>Testujemy sprawdzenie odpowiedzi API</h3>
<p>Zacznijmy od czegoś prostego. Chcemy zweryfikować że dostęp do naszego API faktycznie wymaga uwierzytelnienia. Będziemy próbowali wywołać jeden z endpointów (<em>gorest.co.in//public-api/users</em>) bez użycia authorization tokenu.</p>
<p>Przy normalnym strzale bez użycia autoryzacji dostajemy taki komunikat:</p>
<div>
<pre class="crayon-plain-tag">{
 &nbsp;&nbsp;&nbsp;&quot;_meta&quot;:&nbsp;{
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;success&quot;:&nbsp;false,
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;code&quot;:&nbsp;401,
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;message&quot;:&nbsp;&quot;Authentication&nbsp;failed.&quot;
 &nbsp;&nbsp;&nbsp;},
 &nbsp;&nbsp;&nbsp;&quot;result&quot;:&nbsp;{
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;name&quot;:&nbsp;&quot;Unauthorized&quot;,
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;message&quot;:&nbsp;&quot;Your&nbsp;request&nbsp;was&nbsp;made&nbsp;with&nbsp;invalid&nbsp;credentials.&quot;,
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;code&quot;:&nbsp;0,
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;status&quot;:&nbsp;401
 &nbsp;&nbsp;&nbsp;}
}</pre>
</div>
<p>Naszym zadaniem jest więc sprawdzenie czy <strong>status ciała odpowiedzi </strong>(result.status) jest równy 401. Kluczowe jest to, że sprawdzamy status ciała odpowiedzi, nie status zwracanego kodu! Nasz request zawsze zwraca status 200.</p>
<p>No to zaczynamy. Tworzymy prostą strukturę &#8211; thread group, http request sampler, dwa listenery (view result tree i assertion results). Do HTTP Request Samplera dodajemy 2 asercje (response i json &#8211; json tylko w celach pokazowych, że taka opcja jest). Proste ustawienia &#8211; walniemy 2 requesty i sprawdzamy czy status się zgadza.</p>
<p><a href="https://www.bdabek.pl/jmeter-testujemy-odpowiedz-serwera/text-assertion/" rel="attachment wp-att-1130"><img decoding="async" class="aligncenter size-full wp-image-1130" src="https://www.bdabek.pl/wp-content/uploads/2020/06/text-assertion.png" alt="" width="1517" height="407" srcset="https://www.bdabek.pl/wp-content/uploads/2020/06/text-assertion.png 1517w, https://www.bdabek.pl/wp-content/uploads/2020/06/text-assertion-300x80.png 300w, https://www.bdabek.pl/wp-content/uploads/2020/06/text-assertion-1024x275.png 1024w, https://www.bdabek.pl/wp-content/uploads/2020/06/text-assertion-768x206.png 768w" sizes="(max-width: 1517px) 100vw, 1517px" /></a></p>
<p><a href="https://www.bdabek.pl/jmeter-testujemy-odpowiedz-serwera/qeqwe/" rel="attachment wp-att-1136"><img decoding="async" class="aligncenter size-full wp-image-1136" src="https://www.bdabek.pl/wp-content/uploads/2020/06/qeqwe.png" alt="" width="1133" height="325" srcset="https://www.bdabek.pl/wp-content/uploads/2020/06/qeqwe.png 1133w, https://www.bdabek.pl/wp-content/uploads/2020/06/qeqwe-300x86.png 300w, https://www.bdabek.pl/wp-content/uploads/2020/06/qeqwe-1024x294.png 1024w, https://www.bdabek.pl/wp-content/uploads/2020/06/qeqwe-768x220.png 768w" sizes="(max-width: 1133px) 100vw, 1133px" /></a></p>
<p>O ile wynik pozytywnej odpowiedzi nie jest specjalnie ciekawy bo po prostu zwróci nam że wszystko się udało. O tyle jeżeli w oczekiwanych statusach zmienię z 401 na 402, to mam szybki feedback ze strony narzędzia co dokładnie poszło nie tak.</p>
<p><a href="https://www.bdabek.pl/jmeter-testujemy-odpowiedz-serwera/wynik-bez-uwierzytelnienia/" rel="attachment wp-att-1134"><img decoding="async" class="aligncenter size-full wp-image-1134" src="https://www.bdabek.pl/wp-content/uploads/2020/06/wynik-bez-uwierzytelnienia.png" alt="" width="661" height="163" srcset="https://www.bdabek.pl/wp-content/uploads/2020/06/wynik-bez-uwierzytelnienia.png 661w, https://www.bdabek.pl/wp-content/uploads/2020/06/wynik-bez-uwierzytelnienia-300x74.png 300w" sizes="(max-width: 661px) 100vw, 661px" /></a></p>
<p>Teraz to już jest Twoja decyzja pod jakim kątem projektujesz testy. Jeżeli testujesz funkcjonalność e2e, chcesz mieć szczegóły, co dokładnie poszło nie tak &#8211; projektuj testy tak aby wyciągnąć z nich jak najwięcej informacji. Pobaw się nieco API Jmetera zanim napiszesz finalny test. Zauważ np. że przy JSON Responsie w szczegółach mam informację co zostało zwrócone, natomiast w text response tej informacji już nie ma. Takie szczególiki mogą później być przydatne gdy faktycznie jakieś testy zaczną się sypać a Ty chcesz w miarę przystępnie znaleźć co jest nie tak.</p>
<hr id="Przetestujmy ograniczenie" />
<h3>Przetestujmy ograniczenie</h3>
<p>Tak jak w poprzednim akapicie &#8211; znów będziemy atakowali te same API.</p>
<p><a href="https://www.bdabek.pl/jmeter-testujemy-odpowiedz-serwera/testowanie-api/" rel="attachment wp-att-1140"><img decoding="async" class="aligncenter size-full wp-image-1140" src="https://www.bdabek.pl/wp-content/uploads/2020/06/Testowanie-API.png" alt="" width="353" height="250" srcset="https://www.bdabek.pl/wp-content/uploads/2020/06/Testowanie-API.png 353w, https://www.bdabek.pl/wp-content/uploads/2020/06/Testowanie-API-300x212.png 300w" sizes="(max-width: 353px) 100vw, 353px" /></a></p>
<p><strong><a href="https://gorest.co.in/" target="_blank" rel="noopener noreferrer">GoRest</a> </strong>ogranicza (umożliwia ograniecznie) requestów jakie możemy wysłać do API w przeciągu minuty. Maksymalnie możemy ustawić 60 żądań na minutę. Teraz ustawimy żeby nasze API było atakowane przez 10 użytkowników, 5 razy. Czyli razem 100 requestów (każdy test to 2 requesty &#8211; jeden do pobrania wszystkich użytkowników i drugi do pobrania konkretnego).</p>
<p><a href="https://www.bdabek.pl/jmeter-testujemy-odpowiedz-serwera/atakujemy-api/" rel="attachment wp-att-1142"><img decoding="async" class="aligncenter size-full wp-image-1142" src="https://www.bdabek.pl/wp-content/uploads/2020/06/Atakujemy-API.png" alt="" width="1122" height="451" srcset="https://www.bdabek.pl/wp-content/uploads/2020/06/Atakujemy-API.png 1122w, https://www.bdabek.pl/wp-content/uploads/2020/06/Atakujemy-API-300x121.png 300w, https://www.bdabek.pl/wp-content/uploads/2020/06/Atakujemy-API-1024x412.png 1024w, https://www.bdabek.pl/wp-content/uploads/2020/06/Atakujemy-API-768x309.png 768w" sizes="(max-width: 1122px) 100vw, 1122px" /></a></p>
<p>I tak się prezentują wyniki:</p>
<p><a href="https://www.bdabek.pl/jmeter-testujemy-odpowiedz-serwera/wynik-aggregate-report/" rel="attachment wp-att-1143"><img decoding="async" class="aligncenter size-full wp-image-1143" src="https://www.bdabek.pl/wp-content/uploads/2020/06/Wynik-Aggregate-Report.png" alt="" width="1132" height="251" srcset="https://www.bdabek.pl/wp-content/uploads/2020/06/Wynik-Aggregate-Report.png 1132w, https://www.bdabek.pl/wp-content/uploads/2020/06/Wynik-Aggregate-Report-300x67.png 300w, https://www.bdabek.pl/wp-content/uploads/2020/06/Wynik-Aggregate-Report-1024x227.png 1024w, https://www.bdabek.pl/wp-content/uploads/2020/06/Wynik-Aggregate-Report-768x170.png 768w" sizes="(max-width: 1132px) 100vw, 1132px" /></a> <a href="https://www.bdabek.pl/jmeter-testujemy-odpowiedz-serwera/wynik-assertion-result/" rel="attachment wp-att-1144"><img decoding="async" class="aligncenter size-full wp-image-1144" src="https://www.bdabek.pl/wp-content/uploads/2020/06/Wynik-Assertion-Result.png" alt="" width="1522" height="857" srcset="https://www.bdabek.pl/wp-content/uploads/2020/06/Wynik-Assertion-Result.png 1522w, https://www.bdabek.pl/wp-content/uploads/2020/06/Wynik-Assertion-Result-300x169.png 300w, https://www.bdabek.pl/wp-content/uploads/2020/06/Wynik-Assertion-Result-1024x577.png 1024w, https://www.bdabek.pl/wp-content/uploads/2020/06/Wynik-Assertion-Result-768x432.png 768w" sizes="(max-width: 1522px) 100vw, 1522px" /></a></p>
<p>Zauważ że w wyniku <em>Assertion Result</em>, odpowiedzi jakie dostajemy (pomimo użycia <em>Response Assertion</em>) w miarę dokładnie <strong>wskazują nam problem</strong>, tzn. wyświetlają co było oczekiwane i co przyszło. Dzieje się tak dlatego, że w <em>Response Assertion</em> użyliśmy <em>Custom failure message</em>, gdzie używamy wartości odpowiedzi z <em>JSON Extractora</em>. Oczywiście można by było dodać bardziej szczegółowy output odpowiedzi w przypadku błędu &#8211; ja jednak skupiłem się tylko na tym aby zaprezentować Ci, że jest taka możliwość.</p>
<p><a href="https://www.bdabek.pl/jmeter-testujemy-odpowiedz-serwera/custom-failure-message/" rel="attachment wp-att-1145"><img decoding="async" class="aligncenter size-full wp-image-1145" src="https://www.bdabek.pl/wp-content/uploads/2020/06/Custom-failure-message.png" alt="" width="1522" height="857" srcset="https://www.bdabek.pl/wp-content/uploads/2020/06/Custom-failure-message.png 1522w, https://www.bdabek.pl/wp-content/uploads/2020/06/Custom-failure-message-300x169.png 300w, https://www.bdabek.pl/wp-content/uploads/2020/06/Custom-failure-message-1024x577.png 1024w, https://www.bdabek.pl/wp-content/uploads/2020/06/Custom-failure-message-768x432.png 768w" sizes="(max-width: 1522px) 100vw, 1522px" /></a></p>
<p><strong>Taki jeszcze mały tip do tego wszystkiego. </strong>Jeżeli Twoim celem jest zwalidowanie poprawności działania całego flow, gdzie <strong>każdy kolejny request jest zależny od poprawności poprzednich kroków</strong> to pamiętaj aby włączyć opcję <em>Start Next Thread Loop </em>(opcja w Thread Group). Dzięki temu, jeżeli któraś z Twoich asercji zgłosi błąd &#8211; flow aktualngo wątku zostanie przerwane, przez co unikniesz błędów, które w danym teście najprawdopodobniej by się pojawiły.</p>
<p>Jako przykład, załóżmy, że testujesz zakup w sklepie internetowym. Twój test wymagał uwierzytelnienia się, następnie wybrania produktów dostępnych tylko dla zalogowanych klientów a później cały proces zakupu. Coś jednak poszło nie tak w trakcie uwierzytelniania &#8211; asercja wywaliła błąd. Jeżeli zaznaczyłeś <em>Start Next Thread Loop </em>to dostaniesz znacznie mniej wyników do analizy, bo kolejne requesty po prostu się nie wykonają. W przeciwnym wypadku całe fłow zostanie wykonane, co oczywiście będzie powodować tylko nowe błędy.</p>
<p><a href="https://www.bdabek.pl/jmeter-testujemy-odpowiedz-serwera/start-next-trhead-loop-2/" rel="attachment wp-att-1147"><img decoding="async" class="aligncenter size-full wp-image-1147" src="https://www.bdabek.pl/wp-content/uploads/2020/06/start-next-trhead-loop-1.png" alt="" width="768" height="160" srcset="https://www.bdabek.pl/wp-content/uploads/2020/06/start-next-trhead-loop-1.png 768w, https://www.bdabek.pl/wp-content/uploads/2020/06/start-next-trhead-loop-1-300x63.png 300w" sizes="(max-width: 768px) 100vw, 768px" /></a></p>
<hr />
<h3>Podsumowanie</h3>
<p>JMeter jest potężnym narzędziem i to bez dwóch zdań. Pozwala na pisanie testów funkcjonalnych pod kątem weryfikacji API i w pełni spełnia w tym swoje zadanie. Gdybyś chciał sam potestować to, co opisałem w artykule, to na <strong><a href="https://github.com/BartoszDabek/bartoszdabek.com/blob/master/misc/jmeter/JSON%20Assertion.jmx" target="_blank" rel="noopener noreferrer">Githuba</a> </strong>wrzuciłem test (pamiętaj aby w HTTP Header Managerze podmienić API key).</p>
<p>Jeżeli temat Cię zainteresował bardziej &#8211; bo to co ja opisałem w artykule to jest to tylko wierzchołek góry lodowej &#8211; to odsyłam Cię do linków z których sam korzystałem przy tworzeniu tego wpisu:</p>
<ul>
<li><a href="https://jmeter.apache.org/usermanual/component_reference.html#assertions" target="_blank" rel="noopener noreferrer"><strong>User&#8217;s Manual</strong></a> &#8211; oficjalna dokumentacja JMeter</li>
<li><strong><a href="https://octoperf.com/blog/2018/04/19/jmeter-assertions/" target="_blank" rel="noopener noreferrer">JMETER ASSERTIONS: THE ULTIMATE GUIDE</a></strong></li>
<li><a href="https://www.guru99.com/assertions-in-jmeter.html" target="_blank" rel="noopener noreferrer"><strong>How to use Assertions in JMeter (Response Example)</strong></a> &#8211; krótko i treściwie</li>
</ul>
<hr />
<h3>Za tydzień</h3>
<p>Będzie coś nietypowego &#8211; czyli mały agregator (moim zdaniem) <strong>najlepszych źródeł do nauki programowania na naszym polskim podwórku</strong>. Ps. kiedy post będzie się publikował, ja będę zdobywał Rysy (albo przynajmniej ich podnóżek <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> )</p>
<p>Artykuł <a href="https://www.bdabek.pl/jmeter-testujemy-odpowiedz-serwera/">JMeter. Testujemy odpowiedź serwera 👨🏾‍🚀</a> pochodzi z serwisu <a href="https://www.bdabek.pl">bdabek.pl</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bdabek.pl/jmeter-testujemy-odpowiedz-serwera/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>JMeter &#8211; Wszystko Co Jest Ci Potrzebne Do Uruchomienia Pierwszych Testów 📌</title>
		<link>https://www.bdabek.pl/jmeter-wszystko-co-jest-ci-potrzebne-do-uruchomienia-pierwszych-testow/</link>
					<comments>https://www.bdabek.pl/jmeter-wszystko-co-jest-ci-potrzebne-do-uruchomienia-pierwszych-testow/#comments</comments>
		
		<dc:creator><![CDATA[Bartosz Dąbek]]></dc:creator>
		<pubDate>Sat, 02 May 2020 10:00:26 +0000</pubDate>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[Testy]]></category>
		<guid isPermaLink="false">https://www.bdabek.pl/?p=732</guid>

					<description><![CDATA[<p>JMeter jest zaawansowanym narzędziem do testowania wydajności. Na pierwszy rzut oka może nawet odstraszać przez ilość opcji jakie posiada. W praktyce jednak nie wszystkie funkcjonalności są Ci potrzebne. Ba! Bardzo często (szczególnie jak dopiero zaczynasz) potrzebnych jest Ci dosłownie kilka opcji &#8211; i właśnie na tym się dziś skupimy! Poznasz najpotrzebniejsze fukncjonalności do wykonania pierwszych&#8230;&#160;<a href="https://www.bdabek.pl/jmeter-wszystko-co-jest-ci-potrzebne-do-uruchomienia-pierwszych-testow/" rel="bookmark">Dowiedz się więcej &#187;<span class="screen-reader-text">JMeter &#8211; Wszystko Co Jest Ci Potrzebne Do Uruchomienia Pierwszych Testów 📌</span></a></p>
<p>Artykuł <a href="https://www.bdabek.pl/jmeter-wszystko-co-jest-ci-potrzebne-do-uruchomienia-pierwszych-testow/">JMeter &#8211; Wszystko Co Jest Ci Potrzebne Do Uruchomienia Pierwszych Testów 📌</a> pochodzi z serwisu <a href="https://www.bdabek.pl">bdabek.pl</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>JMeter</strong> jest zaawansowanym narzędziem do testowania wydajności. Na pierwszy rzut oka <strong>może nawet odstraszać</strong> przez ilość opcji jakie posiada. W praktyce jednak nie wszystkie funkcjonalności są Ci potrzebne. Ba! Bardzo często (szczególnie jak dopiero zaczynasz) <strong>potrzebnych jest Ci dosłownie kilka opcji &#8211; i właśnie na tym się dziś skupimy</strong>! Poznasz <strong>najpotrzebniejsze fukncjonalności</strong> do wykonania pierwszych testów. A na zaawansowane lekcje przyjdzie jeszcze czas&#8230;</p>
<hr />
<p><img decoding="async" class="aligncenter size-full wp-image-745" src="https://www.bdabek.pl/wp-content/uploads/2020/05/Jmeter-all.png" alt="Jmeter-all" width="742" height="290" srcset="https://www.bdabek.pl/wp-content/uploads/2020/05/Jmeter-all.png 742w, https://www.bdabek.pl/wp-content/uploads/2020/05/Jmeter-all-300x117.png 300w" sizes="(max-width: 742px) 100vw, 742px" /></p>
<p>W tym artykule skupimy się na funkcjach używanych przy <strong>testowaniu aplikacji webowych</strong>. Po przeczytaniu dzisiejszego wpisu będziesz wiedział:</p>
<ul>
<li><strong><a href="#test-plan">Co to Test Plan</a></strong></li>
<li><strong><a href="#thread-group">Czym jest Thread Group</a></strong></li>
<li><strong><a href="#samplers">Do czego służą Samplers</a></strong></li>
<li><strong><a href="#metryki">Jak gromadzić i czytać Metryki</a></strong></li>
</ul>
<p>A żebyś lepiej rozumiał co się dzieje przetestujemy wydajność dobrze wszystkim znanego serwisu <strong><a href="https://www.google.com/">google.com</a></strong>.</p>
<p><em style="font-size: 12px;">Nie traktuj tego wyniku jako wyznacznika &#8211; jest on zależny od kilku czynników jak np. obecne obciążenie serwera, mojej prędkości Internetu,  CPU, itd&#8230;</em></p>
<hr id="test-plan" />
<h3>Co to Test Plan</h3>
<p>Po <strong>pobraniu i uruchomieniu </strong><a href="http://jmeter.apache.org/download_jmeter.cgi" target="_blank" rel="noopener noreferrer">JMeter</a> na swoim komputerze pojawi Ci się następujące okno</p>
<p><a href="https://www.bdabek.pl/wp-content/uploads/2020/05/jmeter-0-1024x577.png" rel="noopener noreferrer"><img decoding="async" class="aligncenter wp-image-742 " src="https://www.bdabek.pl/wp-content/uploads/2020/05/jmeter-0-1024x577.png" alt="jmeter-test-plan" width="1169" height="659" srcset="https://www.bdabek.pl/wp-content/uploads/2020/05/jmeter-0-1024x577.png 1024w, https://www.bdabek.pl/wp-content/uploads/2020/05/jmeter-0-300x169.png 300w, https://www.bdabek.pl/wp-content/uploads/2020/05/jmeter-0-768x432.png 768w, https://www.bdabek.pl/wp-content/uploads/2020/05/jmeter-0.png 1522w" sizes="(max-width: 1169px) 100vw, 1169px" /></a></p>
<p>Pierwsze co rzuca się w oczy to <strong>Test Plan</strong>. Jest to po prostu<strong> root trzymający wszystkie elementy testów</strong>. Możesz go nazwać, choć ja nie spotkałem się jakoś specjalnie z tym aby plany testów były nazywane. Zazwyczaj poszczególne thread group&#8217;y dostają odpowiednią nazwę.</p>
<p>Wydaje mi się, że<strong> dobrą praktyką</strong> jest aby taki <em>plan testów</em> nie zawierał w sobie za dużo testów. No i można zapytać <em><span style="text-decoration: underline;">co to znaczy nie za dużo</span>?? </em>Nie umiem na to odpowiedzieć &#8211; działaj według swojego gustu. Jeżeli widzisz, że dany test będzie testował ten sam kontekst to <strong>moim zdaniem</strong> jak najbardziej możesz dołożyć do tego samego planu. Natomiast, jeżeli widzisz że zaczynasz testować inny serwis / obszar to zastanów się czy nie lepiej stworzyć osobny plan testów właśnie dla tego przypadku (i bardzo możliwe, że innych, które mogą się pojawić).</p>
<hr id="thread-group" />
<h3>Czym jest Thread Group</h3>
<p>Technicznie, Thread Group jest zbiorem wątków wykonujących konkretny scenariusz testowy. Swoim językiem, Thread Group jest <strong>użytkownikiem lub grupą użytkowników którzy wykonują ten sam scenariusz testowy</strong>.</p>
<p><img decoding="async" class="aligncenter wp-image-748 size-full" src="https://www.bdabek.pl/wp-content/uploads/2020/05/Thread_Group_User.png" alt="Thread Group" width="948" height="418" srcset="https://www.bdabek.pl/wp-content/uploads/2020/05/Thread_Group_User.png 948w, https://www.bdabek.pl/wp-content/uploads/2020/05/Thread_Group_User-300x132.png 300w, https://www.bdabek.pl/wp-content/uploads/2020/05/Thread_Group_User-768x339.png 768w" sizes="(max-width: 948px) 100vw, 948px" /></p>
<p>W JMeter aby stworzyć nowy Thread Group wystarczy kliknąć prawy przycisk myszy na <em>Test Plan</em>, a później <strong>Add &gt;&gt; Threads (Users) &gt;&gt; Thread Group</strong>. Efektem będzie takie okno</p>
<p><img decoding="async" class="aligncenter wp-image-750" src="https://www.bdabek.pl/wp-content/uploads/2020/05/Nowy-Thread-Group.png" alt="Nowy Thread Group" width="1127" height="634" srcset="https://www.bdabek.pl/wp-content/uploads/2020/05/Nowy-Thread-Group.png 1522w, https://www.bdabek.pl/wp-content/uploads/2020/05/Nowy-Thread-Group-300x169.png 300w, https://www.bdabek.pl/wp-content/uploads/2020/05/Nowy-Thread-Group-1024x577.png 1024w, https://www.bdabek.pl/wp-content/uploads/2020/05/Nowy-Thread-Group-768x432.png 768w" sizes="(max-width: 1127px) 100vw, 1127px" /></p>
<p>To co jest dla nas interesujące, to <strong>Thread Properties:</strong></p>
<ul>
<li><strong>Number of Threads (users): </strong>reprezentuje całkowitą liczbę użytkowników, którzy będą wykonywali dany scenariusz testowy.</li>
<li><strong>Ramp-up period (seconds):</strong> informuje JMeter, jak długo trzeba czekać aby wszyscy użytkownicy wykonywali testy. Jeśli wprowadzimy 100 użytkownków i ustawimy ramp-up na 50 sekund, to JMeter będzie potrzebował 50 sekund na uruchomienie wszystkich 100 wątków. Czyli co każdą sekundę będą przybywały 2 nowe działające wątki.
<ul>
<li><em>Wzór na obliczenie ilości nowych użytkownków</em>: <strong>Ramp-up Period / Number of Threads</strong>. Np. 120/30 = 4 &#8211; czyli co 4 sekundy dochodzi nam nowy użytkownik testujący nas scenariusz.</li>
<li><em>Ramp-up needs to be long enough to avoid too large a work-load at the start of a test, and short enough that the last threads start running before the first ones finish (unless one wants that to happen).</em> &#8211; <a href="https://jmeter.apache.org/usermanual/test_plan.html#thread_group" target="_blank" rel="noopener noreferrer">dokumentacja JMeter</a>.</li>
</ul>
</li>
<li><strong>Loop Count:</strong> liczba wykonań. Jeśli Loop Count wynosi 2, a liczba wątków 100, to test zostanie uruchomiony 200 razy. Jeśli zostanie zaznaczony checkbox <em>Infinite</em>, nowe wątki będą się uruchamiać do momentu zatrzymania testów.</li>
<li><strong>Same user on each iteration:</strong> pozwala na 'reużycie&#8217; ciasteczek, jeżeli w testach użyty jest <em>HTTP Coockie Manager</em>.
<ul>
<li>Ciasteczka otrzymywane są w pierwszej odpowiedzi a później reużywalne w następnych requestach.</li>
</ul>
</li>
</ul>
<p>O pozostałych opcjach (<em>Delay Thread creation until needed</em>, <em>Specify Thread lifetime</em>) możesz doczytać googlując je sobie. Na tę chwilę nie jest Ci to potrzebne.</p>
<p>Do przetestowania <a href="http://google.com/">google.com</a>, użyjemy 100 użytkowników, którzy będą przychodzić co sekundę (ramp-up = 100) i powtórzą akcję 10 razy &#8211; czyli łącznie pojedyczny request zostanie uruchomiony 1000 razy.</p>
<p><img decoding="async" class="aligncenter size-full wp-image-755" src="https://www.bdabek.pl/wp-content/uploads/2020/05/Google-Thread-Group-Test.png" alt="Google Thread Group Test" width="1522" height="857" srcset="https://www.bdabek.pl/wp-content/uploads/2020/05/Google-Thread-Group-Test.png 1522w, https://www.bdabek.pl/wp-content/uploads/2020/05/Google-Thread-Group-Test-300x169.png 300w, https://www.bdabek.pl/wp-content/uploads/2020/05/Google-Thread-Group-Test-1024x577.png 1024w, https://www.bdabek.pl/wp-content/uploads/2020/05/Google-Thread-Group-Test-768x432.png 768w" sizes="(max-width: 1522px) 100vw, 1522px" /></p>
<hr id="samplers" />
<h3>Do czego służą Samplers</h3>
<p>Samplers (próbniki??) są odpowiednikami kontrolerów &#8211; <strong>wysyłają żadania do serwera i czekają na odpowiedź</strong>. Są one <strong>przetwarzane w kolejności</strong>, w jakiej pojawiają się w drzewie struktury. Można testować wiele usług/protokołów (smtp, ftp, tcp, ldap, jdbc, &#8230;) &#8211; nas interesuje <strong>HTTP Request</strong>.</p>
<p><img decoding="async" class="aligncenter size-full wp-image-757" src="https://www.bdabek.pl/wp-content/uploads/2020/05/Samplers.png" alt="Samplers" width="638" height="478" srcset="https://www.bdabek.pl/wp-content/uploads/2020/05/Samplers.png 638w, https://www.bdabek.pl/wp-content/uploads/2020/05/Samplers-300x225.png 300w" sizes="(max-width: 638px) 100vw, 638px" /></p>
<p>W naszym przypadku chcemy przetestować dwa żądania do usługi google &#8211; wyszukiwarkę (<a href="http://google.com/"><strong>google.com</strong></a>) oraz kalendarz (<strong><a href="https://www.google.com/calendar">google.com/calendar</a></strong>). Po utworzeniu nowego Sampler&#8217;a &#8211; HTTP Request &#8211; pojawia nam się okno do którego wprowadzamy adres serwera (<em>Server Name or IP</em>), który będziemy testować i ewentualnie ścieżkę (<em>Path</em>) pod jaką znajduje się usługa (w przypadku wyszukiwarki google dajemy tylko adres serwera, dla kalendarza trzeba dodać jeszcze ścieżkę &#8211; <em>calendar</em> &#8211; jak na screenie)</p>
<p><img decoding="async" class="aligncenter size-full wp-image-759" src="https://www.bdabek.pl/wp-content/uploads/2020/05/HTTP-Request-Samplers.png" alt="" width="1522" height="857" srcset="https://www.bdabek.pl/wp-content/uploads/2020/05/HTTP-Request-Samplers.png 1522w, https://www.bdabek.pl/wp-content/uploads/2020/05/HTTP-Request-Samplers-300x169.png 300w, https://www.bdabek.pl/wp-content/uploads/2020/05/HTTP-Request-Samplers-1024x577.png 1024w, https://www.bdabek.pl/wp-content/uploads/2020/05/HTTP-Request-Samplers-768x432.png 768w" sizes="(max-width: 1522px) 100vw, 1522px" /></p>
<hr id="metryki" />
<h3>Jak gromadzić i czytać Metryki</h3>
<p>Samo wykonanie testu niewiele nam daje jeżeli nie umiemy określić jego wyniku. Ważne jest aby przed uruchomieniem testów przemyśleć co chcemy mierzyć &#8211; pisałem o tym <strong><a href="https://www.bdabek.pl/testy-wydajnosciowe/" target="_blank" rel="noopener noreferrer">tydzień temu</a></strong>. Jak już znamy wymagania z pomocą przychodzą nam <a href="https://jmeter.apache.org/usermanual/test_plan.html#listeners"><strong>Listenery</strong></a>. Możemy je utworzyć na dowolnym elemencie w naszym drzewie (<em>test plan, thread group, sampler</em>), będą one <strong>gromadziły dane z poziomu na którym są i poniższych</strong>. Istnieje kilka różnych listenerów, ale to co <strong>jest ważne</strong> &#8211; <span style="color: #993300;"><strong>zapisują one te same dane, różnica polega na tym w jaki sposób te dane są prezentowane</strong></span>.</p>
<p><img decoding="async" class="aligncenter size-full wp-image-765" src="https://www.bdabek.pl/wp-content/uploads/2020/05/Listners.png" alt="Listners" width="572" height="252" srcset="https://www.bdabek.pl/wp-content/uploads/2020/05/Listners.png 572w, https://www.bdabek.pl/wp-content/uploads/2020/05/Listners-300x132.png 300w" sizes="(max-width: 572px) 100vw, 572px" /></p>
<p>Nie będziemy wchodzić w szczegóły każdego widoku &#8211; zobaczmy jak dla naszego testu wygląda <strong>Graph Result </strong>i<strong> Summary Report </strong>(<em style="font-size: 12px;">test był wykonany na hot spocie przy słabym połączeniu</em>).</p>
<p><img decoding="async" class="aligncenter size-full wp-image-770" src="https://www.bdabek.pl/wp-content/uploads/2020/05/Google-Graph-Result-Test.png" alt="Google Graph Result Test" width="1522" height="857" srcset="https://www.bdabek.pl/wp-content/uploads/2020/05/Google-Graph-Result-Test.png 1522w, https://www.bdabek.pl/wp-content/uploads/2020/05/Google-Graph-Result-Test-300x169.png 300w, https://www.bdabek.pl/wp-content/uploads/2020/05/Google-Graph-Result-Test-1024x577.png 1024w, https://www.bdabek.pl/wp-content/uploads/2020/05/Google-Graph-Result-Test-768x432.png 768w" sizes="(max-width: 1522px) 100vw, 1522px" /></p>
<p><img decoding="async" class="aligncenter size-full wp-image-771" src="https://www.bdabek.pl/wp-content/uploads/2020/05/Google-Summary-Report-Test.png" alt="Google Summary Report Test" width="1522" height="857" srcset="https://www.bdabek.pl/wp-content/uploads/2020/05/Google-Summary-Report-Test.png 1522w, https://www.bdabek.pl/wp-content/uploads/2020/05/Google-Summary-Report-Test-300x169.png 300w, https://www.bdabek.pl/wp-content/uploads/2020/05/Google-Summary-Report-Test-1024x577.png 1024w, https://www.bdabek.pl/wp-content/uploads/2020/05/Google-Summary-Report-Test-768x432.png 768w" sizes="(max-width: 1522px) 100vw, 1522px" /></p>
<p>Przy testowaniu wydajności aplikacji webowych to co może nas szczególnie interesować to:</p>
<ul>
<li><strong>Throughput</strong> &#8211; przedstawia jak wydajny jest serwer. Im większa jest przepustowość tym lepiej. Przepustowość jest obliczana na podstawie ilości requestów dzielonej przez całkowity czas wykonania i jest wyrażona w KB/sec.</li>
<li><strong>Standard Deviation</strong> &#8211; odchylenie standardowe od normy wyrażane w milisekundach.</li>
<li><strong>Average</strong> &#8211; średni czas odpowiedzi, również wyrażany w milisekundach.</li>
</ul>
<p>W naszych testach od razu rzuca się w oczy że korzystanie z kalendarza Google wymaga większych zasobów. Request zwraca więcej danych, przez co czasy odpowiedzi są dłuższe. Jeślibyśmy spojrzeli do <strong>View Result Tree </strong>(gdzie można podejrzeć szczegóły każdego z requestów), to zauważymy, że prosty <strong>GET</strong> do <em>/calendar</em> robi po drodze jeszcze 2 przekierowania (co oczywiście też kosztuje &#8211; w kontekście wydajności).</p>
<p><img decoding="async" class="aligncenter size-full wp-image-769" src="https://www.bdabek.pl/wp-content/uploads/2020/05/Google-Calendar-View-Result-Tree.png" alt="Google Calendar View Result Tree" width="1031" height="381" srcset="https://www.bdabek.pl/wp-content/uploads/2020/05/Google-Calendar-View-Result-Tree.png 1031w, https://www.bdabek.pl/wp-content/uploads/2020/05/Google-Calendar-View-Result-Tree-300x111.png 300w, https://www.bdabek.pl/wp-content/uploads/2020/05/Google-Calendar-View-Result-Tree-1024x378.png 1024w, https://www.bdabek.pl/wp-content/uploads/2020/05/Google-Calendar-View-Result-Tree-768x284.png 768w" sizes="(max-width: 1031px) 100vw, 1031px" /></p>
<p><strong>Bardzo ważne</strong> &#8211; w realnych testach wydajnościowych <a href="https://jmeter.apache.org/usermanual/component_reference.html#Graph_Results"><strong>nie powinniśmy używać Graph Result</strong></a> Listenera:</p>
<blockquote><p><span style="color: #ff0000;">Graph Results MUST NOT BE USED during load test as it consumes a lot of resources (memory and CPU). Use it only for either functional testing or during Test Plan debugging and Validation.</span></p></blockquote>
<h3>Podsumowanie</h3>
<p>Testowanie wydajnościowe z narzędziem JMeter nie jest wcale takie trudne i straszne. Polecam Ci <strong>zacząć powoli</strong> (o ile pozwala na to Twoja sytuacja) &#8211; od bawienia się ogółami. Jak już ogarniesz podstawy to przechodź do rzeczy bardziej zaawansowanych. Informacji na ten temat jest w Internecie mnóstwo &#8211; kwestia, żebyś tylko umiał <strong>sprecyzować co chcesz osiągnąć</strong>.</p>
<p>Osobiście też się dopiero uczę tego narzędzia i właśnie w taki sposób podchodzę do nauki. Za jakiś czas się okaże co z tego wyjdzie <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<h3><span style="text-decoration: underline;">Za tydzień</span></h3>
<p>Zmienimy nieco temat i porozmawiamy o metryce, ale innej, potrzebnej deweloperom czyli <strong>logach </strong>oraz <strong>ustawieniach logbacka w spring-boocie</strong>.</p>
<p>&nbsp;</p>
<p>Btw. Jeżeli masz jakieś uwagi/sugestie co do artykułu, daj znać w komentarzu.</p>
<p>Artykuł <a href="https://www.bdabek.pl/jmeter-wszystko-co-jest-ci-potrzebne-do-uruchomienia-pierwszych-testow/">JMeter &#8211; Wszystko Co Jest Ci Potrzebne Do Uruchomienia Pierwszych Testów 📌</a> pochodzi z serwisu <a href="https://www.bdabek.pl">bdabek.pl</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bdabek.pl/jmeter-wszystko-co-jest-ci-potrzebne-do-uruchomienia-pierwszych-testow/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
	</channel>
</rss>
