<?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/"
	 xmlns:media="http://search.yahoo.com/mrss/" >

<channel>
	<title>QA &#8211; Nearshore Software Development Company &#8211; IT Outsourcing Services</title>
	<atom:link href="https://nearshore-it.eu/pl/tag/qa/feed/" rel="self" type="application/rss+xml" />
	<link>https://nearshore-it.eu/pl/</link>
	<description>We are Nearshore Software Development Company with 14years of experience in delivering a large scale IT projects in the areas of PHP, JAVA, .NET, BI and MDM.</description>
	<lastBuildDate>Wed, 28 May 2025 09:33:30 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://nearshore-it.eu/wp-content/uploads/2023/01/cropped-inetum-favicon-300x300-1-32x32.png</url>
	<title>QA &#8211; Nearshore Software Development Company &#8211; IT Outsourcing Services</title>
	<link>https://nearshore-it.eu/pl/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Zawód tester oprogramowania. Czy to praca dla każdego? </title>
		<link>https://nearshore-it.eu/pl/artykuly/czy-tester-oprogramowania-to-praca-dla-kazdego/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/czy-tester-oprogramowania-to-praca-dla-kazdego/#respond</comments>
		
		<dc:creator><![CDATA[Przemysław Papis]]></dc:creator>
		<pubDate>Wed, 20 Sep 2023 03:09:00 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[QA]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/czy-tester-oprogramowania-to-praca-dla-kazdego/</guid>

					<description><![CDATA[Czy zawód testera oprogramowania to praca dla każdego? Jaki zestaw umiejętności powinien posiadać dobry tester oprogramowania? Przeczytaj artykuł!]]></description>
										<content:encoded><![CDATA[
<div class="table-of-contents">
    <p class="title">Przejdź do:</p>
    <ol>
                    <li><a href="#Tester-oprogramowania-–-praca-dla-każdego?-">1.  Tester oprogramowania – praca dla każdego? </a></li>
                    <li><a href="#-fakty-i-mity-">2.  Praca jako tester oprogramowania – fakty i mity </a></li>
                    <li><a href="#Jaki-zestaw-umiejętności-powinien-posiadać-dobry-tester-oprogramowania?u002du002d">3.  Jaki zestaw umiejętności powinien posiadać dobry tester oprogramowania?  </a></li>
                    <li><a href="#Jak-zostać-testerem-oprogramowania?-">4.  Jak zostać testerem oprogramowania? </a></li>
                    <li><a href="#Podsumowanie-">5.  Podsumowanie </a></li>
            </ol>
</div>


<p>W dynamicznie rozwijającym się świecie technologii, gdzie oprogramowanie jest integralną częścią naszego codziennego życia, istnieje grupa profesjonalistów, którzy pełnią kluczową rolę w zapewnianiu jakości i niezawodności każdej aplikacji, programu czy platformy – są to testerzy oprogramowania. Choć może się wydawać, że ich zadanie polega tylko na poszukiwaniu błędów, to w rzeczywistości jest to o wiele bardziej złożona i fascynująca dziedzina, która pozwala zapewnić bezpieczeństwo i doskonałą jakość cyfrowego świata, w którym żyjemy.</p>



<h2 class="wp-block-heading" id="Tester-oprogramowania-–-praca-dla-każdego?-">Tester oprogramowania – praca dla każdego?&nbsp;</h2>



<p>Jako tester manualny pracuję od 2015 roku i od tego czasu zdążyłem zetknąć się z wieloma mitami dotyczącymi tej pracy, takimi jak:&nbsp;&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Testowanie oprogramowania to zawód dla każdego, kto chce wejść do branży IT</strong>&nbsp;</li>



<li><strong>Tester oprogramowania jest mniej ważny od programisty</strong>&nbsp;</li>



<li><strong>Testowanie jest łatwe </strong>–<strong> polega tylko na klikaniu i szukaniu błędów&nbsp;</strong>&nbsp;</li>



<li><strong>Testowanie można pominąć&nbsp;&nbsp;</strong>&nbsp;</li>
</ul>



<p></p>



<p>Jeżeli chcesz spróbować swoich sił jako tester, z tego tekstu dowiesz się, jak jest naprawdę. Piszę o tym, czy naprawdę każdy może być testerem, jakie predyspozycje powinien mieć dobry tester i jaką rolę pełni on w cyklu rozwoju oprogramowania.&nbsp;&nbsp;</p>



<p>Czytaj także: <a href="https://nearshore-it.eu/pl/artykuly/kim-jest-qa-tester-testowanie-bez-tajemnic/" target="_blank" data-type="URL" data-id="https://nearshore-it.eu/pl/artykuly/kim-jest-qa-tester-testowanie-bez-tajemnic/" rel="noreferrer noopener">Kim jest QA tester? Testowanie oprogramowania i&nbsp;zapewnianie jakości bez&nbsp;tajemnic!</a></p>



<h2 class="wp-block-heading" id="-fakty-i-mity-">Praca jako tester oprogramowania – fakty i mity&nbsp;</h2>



<h3 class="wp-block-heading"><strong>Mit 1: Każdy może pracować jako tester oprogramowania</strong> </h3>



<p>Zacznijmy może od tego, skąd wzięło się przeświadczenie, że w obszarze testowania może pracować każdy. Sądzę, że jest kilka powodów tego stanu rzeczy, ale głównym jest sytuacja na rynku pracy jeszcze kilka-kilkanaście lat temu. Gdyby wówczas ktoś zadał mi pytanie, czy każdy może pracować jako tester, moja odpowiedź mogłaby być zgoła inna. Zarówno na staże czy stanowiska juniorskie w tamtych latach przyjmowano znacznie szerszą grupę osób, niż ma to miejsce obecnie. A ponieważ stanowisko testera ma faktycznie dość niski próg wejścia, wiele osób założyło, że jest to praca dla każdego, kto chce spróbować swoich sił w branży IT (która niezmiennie kusi zarobkami i stabilnością pracy).</p>



<p><strong>Fakt: </strong>Tak jak w przypadku każdego stanowiska, tak i w testach potrzebny jest ciągły rozwój, a skończenie stażu czy wejście do branży IT jako junior to dopiero początek. Wiele osób, które spodziewają się szybkiej kariery jako testerzy oprogramowania, może być zaskoczonych tym, jak ważne w tym zawodzie są osobiste predyspozycje (o tym niżej), kompetencje miękkie, znajomość narzędzi, udział w szkoleniach, certyfikaty. Istotny jest też wybór swojej specjalizacji, odpowiedniej ścieżki rozwoju (testy manualne, testy automatyczne, ścieżka liderska lub test managerska). Podsumowując, w tej pracy trzeba mieć umiejętności techniczne, pomocne będą też na pewno zrozumienie podstaw programowania, znajomość narzędzi testowych (przynajmniej ze słyszenia), języki obce, znajomość systemów operacyjnych oraz umiejętność czytania dokumentacji technicznej.</p>



<h3 class="wp-block-heading"><strong>Mit 2: Testowanie polega tylko na szukaniu błędów</strong>  </h3>



<p>Kolejnym powodem zainteresowania zawodem testera może być niezrozumienie tego, na czym polega <a href="https://nearshore-it.eu/pl/artykuly/dlaczego-testy-oprogramowania-sa-wazne/" target="_blank" rel="noreferrer noopener">testowanie oprogramowania</a> i czym zajmuje się tester w procesie wytwarzania oprogramowania. Osoby spoza branży, które nie pracowały dotychczas z oprogramowaniem lub nie są zaznajomione ze złożonością kontroli jakości (Quality Control), mogą mieć mylny obraz obowiązków testera oprogramowania. “To łatwe. Wystarczy po prostu klikać i znajdować błędy” – to spore uproszczenie, które nie ma odzwierciedlenia w codziennych zadaniach. Oczywiście dla testera manualnego “przeklikiwanie” się przez scenariusze testowe, znajdowanie i zgłaszanie błędów stanowią znaczną część pracy. Jest to jednak wierzchołek góry lodowej.</p>



<p><strong>Fakt: </strong>Tester oprogramowania (Quality Control) dostarcza informacji o jakości rozwijanego produktu. Nie tylko poszukuje defektów, wykonując testy, ale także pomaga zminimalizować ryzyko ich wystąpienia, przygotowuje raporty na temat stanu aplikacji oraz dostarcza ważnych informacji pomocnych w procesie zapewniania jakości (<a href="https://nearshore-it.eu/pl/artykuly/quality-assurance-czyli-jak-zagwarantowac-jakosc-i-bezpieczenstwo-w-projektach-it/" target="_blank" rel="noreferrer noopener">Quality Assurance</a>). Dziś zwraca się uwagę, że działania testera (Quality Control) coraz bardziej zmierzają w stronę szeroko pojętego Quality Assurance.</p>



<h3 class="wp-block-heading"><strong>Mit 3: Testowanie to mało ważny element wytwarzania oprogramowania</strong>  </h3>



<p>Niektórzy mogą też uważać, że testowanie jest mało znaczącym elementem wytwarzania oprogramowania. Często spotykam się z opinią, głównie wśród osób spoza branży, że “tester to taki gorszy programista” i w sumie to nie do końca wiadomo, czym się zajmuje.&nbsp;&nbsp;</p>



<p><strong>Fakt:</strong> Testy oprogramowania są integralną, a nie opcjonalną częścią rozwoju oprogramowania. Testy nie są dodatkiem do pisania kodu, lecz istotnym elementem w procesie tworzenia wydajnych systemów zgodnych z wymaganiami funkcjonalnymi. W historii było mnóstwo sytuacji, w których niewykryty, z pozoru niewielki błąd generował <a href="https://nearshore-it.eu/pl/artykuly/quality-assurance-czyli-jak-zagwarantowac-jakosc-i-bezpieczenstwo-w-projektach-it/" target="_blank" rel="noreferrer noopener">milionowe koszty</a>, udaremniał <a href="https://nearshore-it.eu/pl/artykuly/bledy-oprogramowania-misje/" target="_blank" rel="noreferrer noopener">misję kosmiczną</a> czy powodował koszmarne straty wizerunkowe. To obrazuje, jak istotne są testy i jak ważną rolę odgrywa tester oprogramowania.&nbsp;</p>



<h2 class="wp-block-heading" id="Jaki-zestaw-umiejętności-powinien-posiadać-dobry-tester-oprogramowania?--">Jaki zestaw umiejętności powinien posiadać dobry tester oprogramowania?&nbsp;&nbsp;</h2>



<p>Rozpisałem się na temat mitów dotyczących zawodu testera (i pewnie nie wyczerpałem tematu), ale nie chciałbym jednak zniechęcać was do spróbowania swoich sił w testowaniu. Skupmy się więc na tym, dla kogo będzie to odpowiednia praca i jaki zestaw umiejętności powinien posiadać dobry tester, aby sprawdzać się w tej roli.&nbsp;&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Dbałość o szczegóły</strong> – jedną z głównych cech testera kontroli jakości jest skrupulatność i dbałość o szczegóły. Specjaliści ds. kontroli jakości muszą przeczesywać złożone systemy, szukając nawet najmniejszych wad, które mogą negatywnie wpłynąć na działanie produktu. Podczas pracy z dokumentacją każde słowo ma znaczenie i niuans może zaważyć na tym, czy produkt będzie spełniał wymogi klienta.&nbsp;</li>



<li><strong>Powtarzalność</strong> – zapewnianie jakości często obejmuje powtarzalne zadania, np. kilku- czy kilkudziesięciokrotne przechodzenie przez te same przypadki testowe w celu sprawdzenia zachowania oprogramowania w kolejnych iteracjach. Taki system pracy może być monotonny i nużący dla niektórych osób. Jednocześnie nie powinien sprawiać, że tester straci uwagę i stanie się mniej czujny (to prędko doprowadzi do obniżenia jakości).&nbsp;</li>



<li><strong>Umiejętność rozwiązywania problemów</strong> – tak jak wspominałem wcześniej, testowanie to coś więcej niż tylko szukanie błędów. Dobry tester musi nie tylko znaleźć problem i go zgłosić, ale też mieć chęć zgłębienia go, by zapobiec podobnym przypadkom w przyszłości i pomóc w znalezieniu rozwiązania. Wbrew obiegowej opinii tester nie naprawia wszystkich znalezionych przez siebie defektów. Czasem źródło problemu leży zupełnie gdzieś indziej, niżby się wydawało (na ogół naprawą błędów zajmują się programiści czy DevOpsi; tester poprawia błędy, ale we własnym kodzie, w sytuacji, gdy pisze testy automatyczne)&nbsp;&nbsp;</li>



<li><strong>Komunikacja i współpraca</strong> – skuteczna komunikacja ma kluczowe znaczenie w kontroli jakości. Testerzy muszą bardzo dokładnie zgłaszać defekty, jasno komunikować, gdzie leży problem, opisywać ścieżkę do odtworzenia problemu w taki sposób, aby jednoznacznie można było dany błąd odtworzyć i naprawić. Trzeba ściśle współpracować zarówno z programistami, jak i innymi interesariuszami. Specjaliści kontroli jakości często pełnią rolę mediatorów pomiędzy programistami a menedżerami produktu czy klientem, co wymaga doskonałych umiejętności interpersonalnych. Trzeba być empatycznym, uważać na słowa, pamiętać, że wszyscy dążą w tym samym kierunku, którym jest wydanie jak najlepiej działającego produktu.&nbsp;</li>



<li><strong>Praca pod presją</strong> – testerzy często pracują pod dużą presją czasu, w napiętych terminach. Często czasu na testy jest zbyt mało, a oczekuje się od nich skutecznego dostarczania wyników. Harmonogramy projektów i cykle wydań mogą być stresujące, zwłaszcza gdy defekty pojawiają się tuż przed wprowadzeniem produktu na rynek. Specjaliści ds. kontroli jakości muszą zachować opanowanie i strategicznie ustalać priorytety, aby zapewnić wysoką jakość.&nbsp;</li>



<li><strong>Ciągłe uczenie się i rozwijanie</strong> – sektor IT jest zapewne jednym z najprężniej rozwijających się pod względem technologicznym i wymaga ciągłego uczenia się. Tutaj boleśnie można odczuć prawdziwość stwierdzenia, że “Kto stoi w miejscu, ten się cofa”. Coraz to nowe technologie, narzędzia, metodologie – znajomość nowinek może znacząco poprawić nie tylko jakość, ale i efektywność testowania.&nbsp;</li>



<li><strong>Empatia i abstrakcyjne myślenie</strong> – wspomniałem już o tym częściowo przy okazji komunikacji i współpracy, ale uznałem, że ten aspekt zasługuje na wyróżnienie w oddzielnym punkcie. Dobry tester musi umieć wczuć się w rolę użytkownika końcowego, spróbować przewidzieć jego zachowania. Musi chcieć „popsuć” oprogramowanie. Wymyślać jak najróżniejsze sposoby działania i sytuacje, na które może w przyszłości być narażony produkt, i zawczasu im zaradzić.&nbsp;</li>
</ul>



<h2 class="wp-block-heading" id="Jak-zostać-testerem-oprogramowania?-">Jak zostać testerem oprogramowania?&nbsp;</h2>



<p>Jest wiele możliwości, jedną z nich są programy stażowe. W Inetum prowadzimy nabór dla juniorów w ramach autorskich programów stażowych – znajdziecie je na <a href="https://nearshore-it.eu/pl/artykuly/oferty-pracy/" target="_blank" rel="noreferrer noopener">stronie kariery</a>. Mam nadzieję, że mój artykuł pomógł wam zrozumieć, jakie cechy powinien mieć dobry tester oprogramowania i jeśli uważacie, że spełniacie powyższe warunki, to moim zdaniem warto spróbować swoich sił. </p>



<p>Czytaj także:<a href="https://nearshore-it.eu/pl/artykuly/scenariusze-testowe/" target="_blank" data-type="URL" data-id="https://nearshore-it.eu/pl/artykuly/scenariusze-testowe/" rel="noreferrer noopener"> Co&nbsp;łączy testera z&nbsp;branżą filmową? Czyli scenariusze testowe bez&nbsp;tajemnic</a></p>



<h2 class="wp-block-heading" id="Podsumowanie-">Podsumowanie&nbsp;</h2>



<p>Kontrola jakości jest bardzo ważnym aspektem całego procesu wytwarzania oprogramowania. Testerzy oprogramowania uczestniczą w procesie już od samego początku i są istotnym elementem na każdym etapie. Testerzy muszą posiadać unikalny zestaw umiejętności, znacznie wykraczający poza definicję typowych osób introwertycznych czy ekstrawertycznych. Tester oprogramowania blisko współpracuje z ludźmi, zarówno z programistami, jak i przedstawicielami biznesu, ale korzysta też z wachlarza narzędzi programistycznych, testerskich oraz biurowych. Czasem trzeba w ciszy i skupieniu powtarzać w nieskończoność te same testy, ale też rozmawiać z ludźmi, jasno i stanowczo prezentując swoje uwagi, popierając to konkretnymi danymi.&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/czy-tester-oprogramowania-to-praca-dla-kazdego/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Kim jest QA tester? Testowanie oprogramowania i zapewnianie jakości bez tajemnic!</title>
		<link>https://nearshore-it.eu/pl/artykuly/kim-jest-qa-tester-testowanie-bez-tajemnic/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/kim-jest-qa-tester-testowanie-bez-tajemnic/#respond</comments>
		
		<dc:creator><![CDATA[Zuzanna Slusarska]]></dc:creator>
		<pubDate>Fri, 28 Jul 2023 08:50:29 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Organizacja]]></category>
		<category><![CDATA[Kariera w IT]]></category>
		<category><![CDATA[QA]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/kim-jest-qa-tester-testowanie-bez-tajemnic/</guid>

					<description><![CDATA[Testerzy odgrywają niebagatelną rolę w procesie wytwarzania oprogramowania. To oni są odpowiedzialni za kontrole jakości gier, aplikacji mobilnych czy programów, z których korzystamy na co dzień oraz w pracy. Czym różni się testowanie manualne od automatyzacji testów? Przeczytaj artykuł!]]></description>
										<content:encoded><![CDATA[
<div class="table-of-contents">
    <p class="title">Przejdź do:</p>
    <ol>
                    <li><a href="#ę-słów-o-zapewnianiu-jakości">1.  Kim jest tester? </a></li>
                    <li><a href="#acuje-specjalista-QA?-">2.  Jaką rolę pełni w projekcie tester oraz z kim ściśle współpracuje specjalista QA? </a></li>
                    <li><a href="#pracować-jako-tester-oprogramowania?">3.  Na jakich przedmiotach na studiach skupić się najbardziej, aby w przyszłości pracować jako tester oprogramowania?</a></li>
                    <li><a href="#zyli-ścieżki-">4.  Ścieżki rozwoju od stażysty do leadera</a></li>
                    <li><a href="#ssurance-Specialistu002du002d-moje-największe-wyzwania.">5.  Plusy i minusy pracy na stanowisku Quality Assurance Specialist.</a></li>
                    <li><a href="#zas,-czy-dalej-zostałabym-QA?">6.  Podsumowanie</a></li>
            </ol>
</div>


<p><strong>Data pierwszej publikacji:&nbsp;</strong>04.04.2021<br><strong>Ostatnia aktualizacja:</strong>&nbsp;28.07.2023</p>



<h2 class="wp-block-heading" id="ę-słów-o-zapewnianiu-jakości">Kim jest QA Tester? Czyli parę słów o zapewnianiu jakości</h2>



<p><strong>Zapewnianie jakości (Quality Assurance)</strong> to zadania, zachowania i działania, jakie wykonuje Tester/Test Manager, aby wdrażając program, aplikację, system lub stronę na produkcję, dbać o jakość wszystkich wytwarzanych produktów.</p>



<p>Wszyscy gramy w jakieś gry, więc wyobraźmy sobie grę. Ktoś ową grę musiał sobie wymarzyć – to będzie nasz klient. Ktoś musiał spisać obszerną dokumentację, jak ta gra ma wyglądać i jakie ma mieć zasady – to <strong>analityk/architekt/Product Owner</strong>. Ktoś musiał tę grę zaimplementować – pojawia się developer. Później ktoś musiał w nią grać każdego dnia, przechodząc level pierwszy tysiąc razy w poszukiwaniu błędów. Następnego dnia tylko level drugi, również szukając błędów. A później znów level pierwszy, gdyż developer poprawił znalezione przez testera błędy i trzeba sprawdzić, czy zrobił to skutecznie &nbsp;– tym zajmuje się Tester (<strong>Quality Control</strong>).</p>



<p>Finalnie dochodzimy do<strong> QA (Quality Assurance) </strong>– to osoba, która<strong> oprócz wykonywania testów planuje testy</strong>, <strong>ocenia ryzyko</strong> oraz<strong> opracowuje procesy</strong>, aby osiągnąć najwyższą możliwą jakość całej gry, a nie tylko jednego poziomu. To ktoś, kto myśli o tej grze jako całości o określonym efekcie końcowym. <strong>Rekomenduje środowiska</strong>, w jakich powinny być wykonywane testy, oraz <strong>określa, jakie typy i rodzaje testów powinny być wykonywane.</strong></p>



<p><strong>Przeczytaj także:</strong> <a href="https://nearshore-it.eu/pl/artykuly/quality-assurance-czyli-jak-zagwarantowac-jakosc-i-bezpieczenstwo-w-projektach-it/" target="_blank" data-type="URL" data-id="https://nearshore-it.eu/pl/artykuly/quality-assurance-czyli-jak-zagwarantowac-jakosc-i-bezpieczenstwo-w-projektach-it/" rel="noreferrer noopener">Quality Assurance (QA) – zapewnij jakość w twoich projektach IT</a></p>



<h2 class="wp-block-heading" id="acuje-specjalista-QA?-">Jaką rolę pełni w projekcie tester oraz z&nbsp;kim ściśle współpracuje specjalista QA?&nbsp;</h2>



<p>QA pełni rolę strażnika jakości. Sprawdza, czy oprogramowanie będące przedmiotem testów jest gotowe do wdrożenia. Optymalizuje procesy testowe.</p>



<h3 class="wp-block-heading">Z kim współpracuje QA?</h3>



<ul class="wp-block-list">
<li><strong>Z Analitykiem/Product Ownerem (Scrum)</strong> – QA przede wszystkim od niego czerpie wiedzę, jak powinna działać aplikacja, którą testuje.</li>



<li><strong>Z Test Managerem/Test Leadem </strong>– z nim QA ustala, jakie testy wykonać, w jakim czasie, gdzie raportować.</li>



<li><strong>Z developerem</strong> – weryfikacja tego, co zaimplementował developer, jest podstawowym zajęciem QA, dlatego ścisła relacja z developerem jest bardzo ważna</li>



<li><strong>Z innym QA w zespole</strong> – QA wymieniają miedzy sobą wiedzę na temat przedmiotu testów, sposobu testowania, wymieniają doświadczenia, weryfikują wzajemnie swoją pracę.</li>
</ul>



<p></p>



<h2 class="wp-block-heading" id="pracować-jako-tester-oprogramowania?">Na jakich przedmiotach na studiach skupić się najbardziej, aby w przyszłości pracować jako tester oprogramowania?</h2>



<p>Na każdym! Wszechstronna wiedza jest potrzebna, by móc pracować w różnych sektorach. Aplikacje tworzone są dla sektora ubezpieczeniowego, lotniczego, motoryzacyjnego, rolniczego, wojskowego, publicznego. Wszędzie wykorzystywane są aplikacje i my, QA, testujemy je przed uruchomieniem produkcyjnym. Takie podejście owocuje większym zakresem wśród ofert pracy.</p>



<p><strong>Przeczytaj także: </strong><a href="https://nearshore-it.eu/pl/artykuly/piramida-testow-czyli-co-kiedy-i-jak-testowac-zeby-testy-przyniosly-zysk/">Piramida testów – czyli co, kiedy i jak testować, żeby testy przyniosły zysk?</a></p>



<h2 class="wp-block-heading" id="zyli-ścieżki-">Tester manualny vs QA test engineer &#8211; czyli&nbsp;ścieżki rozwoju od stażysty do leadera</h2>



<p>W sektorze QA tych ścieżek jest wiele. Kilka przykładów poniżej.</p>



<ul class="wp-block-list">
<li>Tester manualny (stażysta, junior, mid, senior) -&gt; Leader Testów (mid, senior) -&gt; Test Manager (Senior)</li>



<li>Tester manualny -&gt; tester automatyzujący -&gt; Leader Testów -&gt; Test Manager</li>



<li>Tester manualny -&gt; tester automatyzujący -&gt; programista</li>



<li>Tester automatyzujący -&gt; tester manualny -&gt; Leader Testów -&gt; Test Manager</li>



<li>Tester automatyzujący -&gt; leader testów -&gt; Test Manager</li>



<li>Tester automatyzujący -&gt; programista</li>
</ul>



<p></p>



<h2 class="wp-block-heading" id="ssurance-Specialist---moje-największe-wyzwania.">Plusy i minusy pracy na stanowisku Quality Assurance Specialist &#8211; moje największe wyzwania</h2>



<p>Praca przy rozwoju oprogramowania jest pełna niespodzianek. W branży IT&nbsp;każdy dzień to wyzwanie, a więc każdy dzień to nowe zadania.</p>



<h3 class="wp-block-heading">Plusy:</h3>



<ul class="wp-block-list">
<li><strong>Udział w projektach mających znaczenie</strong> – wiele aplikacji działa, chroniąc ludzkie życie bądź je ułatwiając. To, by brać udział w takich projektach, ma dla mnie znaczenie.</li>



<li><strong>Poznawanie różnych sektorów –</strong> przykładowo, praca urzędnika jest jednosektorowa. My jako QA dziś jesteśmy w projekcie bankowym, a jutro w lotnictwie, a pojutrze w ubezpieczeniach.</li>



<li><strong>Poznawanie ludzi</strong> – praca zespołowa jest tym, w czym się spełniam, a na to pozwala mi bycie QA!</li>
</ul>



<h3 class="wp-block-heading">Minusy:</h3>



<ul class="wp-block-list">
<li><strong>Presja czasu</strong> – często QA to ostatnie ogniwo wytwarzania oprogramowania, a jeśli gdzieś po drodze będą opóźnienia, to dla nas zostaje najmniej czasu.</li>



<li><strong>Wytykanie błędów innym</strong> – to rodzi konflikty, czyli musimy posiadać komunikacyjne kompetencje miękkie na wysokim poziomie, aby nie zaogniać sytuacji, tylko ją rozwiązać.</li>
</ul>



<h2 class="wp-block-heading" id="zas,-czy-dalej-zostałabym-QA?">Gdybym mogła cofnąć czas, czy dalej zostałabym QA?</h2>



<p>Zaczynałam od programowania w PL/SQL-u, następnie zaczęłam testować. Gdzieś po drodze sprawdziłam, jak to jest być analitykiem. Prawda jest taka, że QA to trochę developer, trochę analityk, a przede wszystkim tester. Pracując w tej branży od ponad 15 lat, miałam czas, by zmienić role, a nawet pracę, ale po co? To, co robię, daje mi mnóstwo satysfakcji. Zaczynając od tego, że do dziś produkcyjnie działają aplikacje z różnych sektorów, które testowałam i wdrażałam wiele lat temu.</p>



<p>Dziś jestem Test Managerem. Uczę innych testowania, tworzę procesy testowe, robię audyty procesów testowych w projektach, w których nie biorę udziału na co dzień, oraz nadal czasem testuję – bo to uwielbiam. Podsumowując: cofanie czasu nie ma sensu, bo robiłabym dokładnie to samo.</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/kim-jest-qa-tester-testowanie-bez-tajemnic/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Testy automatyczne: Selenium + Python vs Selenium + Java</title>
		<link>https://nearshore-it.eu/pl/artykuly/selenium-python-vs-selenium-java/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/selenium-python-vs-selenium-java/#respond</comments>
		
		<dc:creator><![CDATA[Jacek Laska]]></dc:creator>
		<pubDate>Wed, 12 Jul 2023 05:33:00 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[QA]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/selenium-python-vs-selenium-java/</guid>

					<description><![CDATA[Świat IT i QA szybko się zmienia, a popularność niektórych z narzędzi mija. Które wybrać? Przeczytaj artykuł i poznaj zalety oraz wady łączenia Selenium z dwoma obecnie najpopularniejszymi językami programowania: Javą i Pythonem.]]></description>
										<content:encoded><![CDATA[
<p>Jako (przyszły) inżynier automatyzacji testów celujący w pracę z Selenium w pewnym momencie dotrzesz do punktu, w którym trzeba będzie podjąć decyzję, w którą stronę iść oraz czego używać do testowania. Świat IT i QA szybko się zmienia, a niektóre z narzędzi i języków, które były kiedyś popularne, dziś już takie nie są. Jak w każdym przypadku, istnieje wiele czynników, które mogą odegrać rolę w podjęciu decyzji. W tym artykule postaram się ułatwić ci to zadanie, przedstawiając zalety i wady łączenia Selenium z dwoma obecnie najpopularniejszymi językami programowania: Javą i Pythonem.</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="table-of-contents">
    <p class="title">Przejdź do: </p>
    <ol>
                    <li><a href="#Automatyzacja-testów:-jakie-mamy-opcje?-Java-i-Python">1.  Automatyzacja testów: jakie mamy opcje? Java i Python  </a></li>
                    <li><a href="#Język-programowania-czy-język-skryptowy?">2.  Język programowania czy język skryptowy? </a></li>
                    <li><a href="#Czego-łatwiej-się-nauczyć:-Javy-czy-Pythona?--">3.  Czego łatwiej się nauczyć: Javy czy Pythona?  </a></li>
                    <li><a href="#Automatyzacja-testów-–-jakie-są-opcje?-">4.  Automatyzacja testów – jakie są opcje? </a></li>
                    <li><a href="#Czym-jest-Selenium-WebDriver?-">5.  Czym jest Selenium WebDriver? </a></li>
                    <li><a href="#Selenium-i-Python-">6.  Selenium i Python </a></li>
                    <li><a href="#Selenium-i-Java-">7.  Selenium i Java </a></li>
                    <li><a href="#Która-opcja-jest-lepsza-dla-testów-automatycznych-(Selenium-z-Pythonem-czy-Selenium-z-Javą)?--">8.  Która opcja jest lepsza dla testów automatycznych (Selenium z Pythonem czy Selenium z Javą)?  </a></li>
                    <li><a href="#Jak-wykonać-skrypt-Selenium-w-Pythonie?-">9.  Jak wykonać skrypt Selenium w Pythonie? </a></li>
                    <li><a href="#Jak-zainstalować-Selenium-z-PIP?-">10.  Jak zainstalować Selenium z PIP? </a></li>
                    <li><a href="#Automatyzacja-testów-–-podsumowanie--">11.  Automatyzacja testów – podsumowanie  </a></li>
                    <li><a href="#FAQ-Starting-points-for-Selenium-with-Java-or-Python-">12.  FAQ</a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="Automatyzacja-testów:-jakie-mamy-opcje?-Java-i-Python">Automatyzacja testów: jakie mamy opcje? Java i Python</h2>



<p>Każdy z tych języków ma ugruntowaną pozycję, jest niezależny od platformy, zorientowany obiektowo i posiada dużą, wspierającą społeczność użytkowników. Jeśli chodzi o wybór powiązań (ang. bindings) języka Selenium dla Javy i Pythona, powinieneś najpierw zrozumieć kilka kluczowych różnic pomiędzy nimi.</p>



<p>Selenium obsługuje szeroką gamę języków programowania do automatyzacji testów. W tym kontekście Java i Python są najlepszymi kandydatami (i konkurentami) do połączenia z Selenium.</p>



<h2 class="wp-block-heading" id="Język-programowania-czy-język-skryptowy?">Język programowania czy język skryptowy?</h2>



<p>Jednym z głównych pytań, które mogą przyjść ci do głowy, porównując Javę i Pythona, może być: „Czy Python i Java to języki programowania, czy języki skryptowe?”.</p>



<p>Zasadniczo wszystkie języki skryptowe są uważane za języki programowania. Główną różnicą między nimi jest to, że języki programowania są <strong>kompilowane</strong>, podczas gdy języki skryptowe są interpretowane. Języki skryptowe są wolniejsze niż języki programowania i pozostają zazwyczaj za nimi w tyle.</p>



<p><strong>Szybkie porównanie znajdziesz tutaj: <a href="https://itvoyagers.in/interpreter-vs-compiler/" data-type="URL" data-id="https://itvoyagers.in/interpreter-vs-compiler/" target="_blank" rel="noreferrer noopener">Interpreter vs compiler</a></strong></p>



<h4 class="wp-block-heading">Python</h4>



<p>Python można nazwać zarówno językiem skryptowym, jak i językiem programowania, ponieważ <strong>działa zarówno jako kompilator, jak i interpreter.</strong> Standardowy Python może skompilować kod Pythona do kodów bajtowych, a następnie zinterpretować go tak jak Java i C.</p>



<p>„Jednak biorąc pod uwagę historyczny związek między językiem programowania ogólnego przeznaczenia a językiem skryptowym, bardziej właściwe byłoby stwierdzenie, że Python jest językiem programowania, który dobrze działa również jako język skryptowy”.</p>



<p><strong>Interpreter </strong>to warstwa oprogramowania, która działa jako pomost między programem a sprzętem systemowym, aby utrzymać działanie kodu. Interpreter Pythona to aplikacja odpowiedzialna za uruchamianie skryptów Pythona.</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.07.12_graphic_1.png" alt="Selenium Python" class="wp-image-10920" title="Testy automatyczne: Selenium + Python vs Selenium + Java 1"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">Java&nbsp;</h4>



<p>Java jest na ogół szybsza i bardziej wydajna niż Python, ponieważ jest językiem <strong>skompilowanym</strong>. Jako język interpretowany, Python z kolei ma prostszą, bardziej zwięzłą składnię. Może pełnić tę samą funkcję co Java, przy użyciu mniejszej liczby linijek kodu. W Javie typy danych zmiennych powinny być zadeklarowane przed ich użyciem, w przeciwieństwie do Pythona. Zdecyduj, co bardziej ci odpowiada.&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.07.12_graphic_2.png" alt="Java Python" class="wp-image-10922" style="width:766px;height:402px" title="Testy automatyczne: Selenium + Python vs Selenium + Java 2"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Czego-łatwiej-się-nauczyć:-Javy-czy-Pythona?--">Czego łatwiej się nauczyć: Javy czy Pythona?&nbsp;&nbsp;</h2>



<p>Kolejne pytanie, które może się zrodzić (zwłaszcza gdy dopiero zaczynasz przygodę z programowaniem) brzmi: jak szybko mogę nauczyć się Javy vs. Pythona?&nbsp;</p>



<p>Tu nie ma wątpliwości: Python jest zwycięzcą. Jak wspomniałem, jego składnia jest krótsza i prostsza. Prototypowanie w Javie jest bardziej złożone – przykładowo, obciąża kod dodatkowymi deklaracjami i ograniczeniami. Wybierz Pythona, jeśli nie masz wiele czasu na naukę.&nbsp;</p>



<p>Oto lista kluczowych czynników, które trzeba wziąć pod uwagę przed podjęciem decyzji:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Oferty pracy: </strong>wciąż więcej ofert pracy jest w Javie&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>Zmiana pracy / migracja: </strong>dzięki skryptowaniu, łatwiej jest w przypadku Pythona, jeśli np. myślisz o kulturze DevOps&nbsp;&nbsp;</li>



<li><strong>Programowanie zorientowane obiektowo:</strong> zarówno Python, jak i Java polegają na programowaniu obiektowym, więc znajomość jednego z tych języków stanowi dobry punkt wyjścia do nauki drugiego&nbsp;</li>



<li><strong>Niezależne od platformy:</strong> zarówno binaria Pythona, jak i Javy (kody bajtowe) po wygenerowaniu mogą być wykonywane na dowolnych obsługiwanych platformach dzięki własnym maszynom wirtualnym (odpowiednio PVM i JVM)&nbsp;</li>



<li><strong>Prostota:</strong> Python jest łatwiejszy w użyciu dzięki prostszej składni&nbsp;&nbsp;</li>



<li><strong>Wykonanie: </strong>jako reprezentacja języka skryptowego Python ma możliwość bezpośredniego uruchamiania kodu skryptu za pomocą <a href="https://docs.python.org/3/tutorial/interpreter.html" target="_blank" rel="noreferrer noopener">interpretera</a> zamiast bezpośredniego uruchamiania kompilatora (np. Javac dla Java)&nbsp;</li>



<li><strong>Wydajność / szybkość wykonania: </strong>Java ma tu przewagę, ponieważ jest szybsza (można skompilować ją JIT, aby była bardziej wydajna)&nbsp;</li>



<li><strong>Popularność / wsparcie: </strong>Java wygrywa w tym zestawieniu jako popularne rozwiązanie, które ma bardzo dużą i wspierającą społeczność programistów&nbsp;</li>



<li><strong>Python jest językiem statycznie typowanym</strong> (sprawdza typ w czasie wykonywania, co oznacza, że twój kod może w ostatniej chwili zawieść)&nbsp;</li>



<li><strong>Java jest językiem dynamicznie typowanym</strong> (sprawdza typ w czasie kompilacji, co oznacza, że wychwytujesz problemy w swoim kodzie wcześniej w procesie tworzenia oprogramowania)&nbsp;</li>



<li><strong>Rozszerzalność</strong>: ponieważ Java jest bardziej popularna, na rynku jest dostępne więcej wtyczek, interfejsów API, frameworków i bibliotek niż w przypadku Pythona&nbsp;</li>
</ul>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Automatyzacja-testów-–-jakie-są-opcje?-">Automatyzacja testów – jakie są opcje?&nbsp;</h2>



<p>Selenium zaspokaja określoną potrzebę w świecie automatyzacji testów. Jest tylko dla przeglądarek. Jeśli chcesz szybko rozpocząć automatyzację swoich przypadków testowych, zaprzyjaźnij się z <a href="https://www.selenium.dev/selenium-ide" target="_blank" rel="noreferrer noopener">Selenium IDE</a>. Pozwala ono szybko i łatwo rozpocząć automatyzację testów dzięki opcji nagrywania.&nbsp;</p>



<p>Kroki testowe wykonywane w przeglądarce są bezpośrednio przekształcane w zestaw poleceń dzięki <a href="https://www.tutorialspoint.com/what-is-selenese" target="_blank" data-type="URL" data-id="https://www.tutorialspoint.com/what-is-selenese" rel="noreferrer noopener">Selenese </a>(to wbudowany język Selenium IDE). To bardzo ułatwia zadanie. Ponadto, po zapisaniu testów w zestawie <a href="https://www.javatpoint.com/selenium-ide-commands" target="_blank" rel="noreferrer noopener">poleceń Selenese</a>, można je agregować w pakiety testowe i ostatecznie eksportować do preferowanych powiązań Selenium (np.: Java, Python itp.).&nbsp;</p>



<p><strong>Selenese i Selenium IDE</strong> to dobry początek, ale im bardziej będziesz się zagłębiać w temat automatyzacji aplikacji internetowych, tym wyraźniej dostrzeżesz ich ograniczenia.&nbsp;</p>



<p>Aby solidnie przetestować nowoczesną aplikację internetową z jej dynamicznie zmieniającą się treścią (np. przy użyciu technologii <strong>AJAX czy JS</strong>), zaczniesz szukać bardziej zaawansowanych opcji. Tutaj z pomocą przychodzi&nbsp; <strong>Selenium WebDriver</strong> wraz z powiązaniami językowymi Selenium. Selenium WebDriver jest często używany jako baza do testowania aplikacji internetowych.&nbsp;&nbsp;</p>



<p><strong>Zgodnie z sylabusem A4Q Selenium 4 Tester:&nbsp;</strong></p>



<p>„Selenium, gdy jest używane do testowania aplikacji internetowych, potrzebuje pewnych frameworków testowych. Silnik Selenium, jako samodzielne narzędzie, wystawia TAE tylko swoje natywne API jako metody lub funkcje. Inżynier automatyzacji testów musi następnie zaprogramować środowisko testowe, aby użyć tych interfejsów API do przeprowadzenia wymaganych testów. Framework testowy można opracować od podstaw lub&nbsp; wykorzystać już istniejące. <strong>Selenium obsługuje wiele frameworków testowych w różnych językach, np.:&nbsp;</strong>&nbsp;</p>



<ul class="wp-block-list">
<li>dla Javy: <a href="https://selenide.org/" target="_blank" rel="noreferrer noopener">Selenide</a>&nbsp;&nbsp;</li>



<li>dla Pythona: <a href="https://pypi.org/project/selene/" target="_blank" rel="noreferrer noopener">Selene</a>&nbsp;&nbsp;</li>
</ul>



<p></p>



<p>Niezależnie od tego, czy korzystasz z własnych frameworków, czy nie, musisz w jakiś sposób sterować wykonywaniem testów. Wielu inżynierów korzysta z bibliotek testów jednostkowych do prowadzenia swoich testów (test runnerów).&nbsp;</p>



<p>Niektóre z nich, takie jak <a href="https://testng.org/" target="_blank" rel="noreferrer noopener">TestNG</a> lub <a href="https://docs.pytest.org/" target="_blank" rel="noopener">Pytest</a>, oprócz podstawowego zastosowania w testach jednostkowych pozwalają tworzyć testy funkcjonalne wyższego poziomu&nbsp; (funkcjonalne, komponentowe, integracyjne, end-to-end itp.).&nbsp;</p>



<h4 class="wp-block-heading">Dla Pythona&nbsp;</h4>



<p>Najprostszym przypadkiem jest użycie standardowej biblioteki testów jednostkowych Pythona. Alternatywnie możesz użyć bardzo popularnego <a href="https://docs.pytest.org/" target="_blank" rel="noreferrer noopener">Pytest.</a>&nbsp;&nbsp;</p>



<h4 class="wp-block-heading">Dla Javy&nbsp;</h4>



<p>Możesz użyć bibliotek xUnit (np. JUnit 4/5) lub <a href="https://www.bugraptors.com/blog/junit-vs-testng" target="_blank" rel="noreferrer noopener">TestNG</a>.&nbsp;&nbsp;</p>



<p>Po zaznajomieniu się z uruchamianiem testów lokalnie za pomocą wybranej przeglądarki możesz zrobić krok naprzód i skonfigurować <a href="https://www.selenium.dev/documentation/grid/" target="_blank" rel="noreferrer noopener">siatkę</a> przeglądarek do zdalnego uruchamiania testów.&nbsp;&nbsp;</p>



<p>W ten sposób testy można uruchamiać na różnych przeglądarkach i kilku systemach operacyjnych na wielu komputerach w trybie równoległym. Jeśli masz sporą konfigurację, możesz przeprowadzić testy regresji w krótkim czasie (w porównaniu z czasem bez <a href="https://www.selenium.dev/documentation/overview/components/" target="_blank" rel="noreferrer noopener">Selenium</a> Grid).&nbsp;</p>



<p>Następnie możesz iść o jeszcze jeden krok dalej i zintegrować swoje testy z CI/CD pipeline (np.: uruchomić <a href="https://qaautomation.expert/2022/04/12/run-selenium-tests-in-gitlab-ci-cd/" target="_blank" rel="noreferrer noopener">Selenium Tests w GitLab CI/CD</a> lub Jenkins).&nbsp;</p>



<p>Pamiętaj, że masz możliwość skorzystania z dobrodziejstw konteneryzacji, np. Dockera, aby utworzyć różne obrazy do automatycznych testów interfejsu użytkownika.&nbsp;</p>



<p>W ten sposób możesz przygotować oddzielną maszynę wirtualną dla dowolnej kombinacji środowiska systemu operacyjnego / przeglądarki dla <a href="https://en.wikipedia.org/wiki/System_under_test" target="_blank" rel="noreferrer noopener">SUT</a> (System Under Test) / AUT (Application Under Test).&nbsp;</p>



<p>CI/CD odgrywa kluczową rolę w tworzeniu cykli życia oprogramowania, w których nowe funkcje są ciągle aktualizowane maksymalnie szybko i wydajnie. Dzięki temu użytkownicy końcowi mają dostęp do nowych funkcji bez konieczności pobierania aktualizacji oprogramowania, co zapewnia im bezproblemową obsługę.&nbsp;&nbsp;</p>



<p>Biorąc pod uwagę krótki czas trwania cyklu wydawania oprogramowania, testy muszą być skalowane, aby dostarczane oprogramowanie było wolne od błędów we wspomnianym przedziale czasowym. W tym miejscu Selenium odgrywa kluczową rolę, umożliwiając automatyzację testów w CI/CD pipeline.&nbsp;</p>



<p>Dzięki automatyzacji z Selenium można wykonywać testy równoległe w wymaganej skali, a <a href="https://github.com/SeleniumHQ/docker-selenium" target="_blank" rel="noreferrer noopener">Dockerem</a>, z pomocą kontenerów, pomaga to utrzymać środowisko testowe w dobrym stanie.&nbsp;&nbsp;</p>



<p><strong>Przeczytaj także</strong>: <strong><a href="https://nearshore-it.eu/pl/artykuly/uat-user-acceptance-testing/" target="_blank" data-type="URL" data-id="https://inetum.pl/uat-user-acceptance-testing/" rel="noreferrer noopener">Testy akceptacyjne użytkownika (UAT) – dlaczego są&nbsp;ważne?&nbsp;</a></strong></p>



<h2 class="wp-block-heading" id="Czym-jest-Selenium-WebDriver?-">Czym jest Selenium WebDriver?&nbsp;</h2>



<p>Najbardziej wyczerpującym źródłem wiedzy w tym temacie jest <a href="https://www.selenium.dev/documentation/webdriver/" target="_blank" rel="noreferrer noopener">strona Selenium WebDriver</a>:&nbsp;&nbsp;</p>



<p>„Selenium WebDriver odnosi się zarówno do powiązań językowych, jak i implementacji kodu sterującego danej przeglądarki. Powszechnie używa się po prostu określenia <strong>WebDriver</strong>”.&nbsp;</p>



<p>lub cytując sylabus A4Q:&nbsp;&nbsp;</p>



<p>„Selenium WebDriver, jak sama nazwa wskazuje, współdziała z przeglądarką w taki sam sposób, jak zrobiłby to prawdziwy użytkownik. WebDriver to kompleksowe narzędzie do kompilacji testów dla aplikacji internetowych, które jest również często określane jako<strong> Selenium WebDriver</strong>”.&nbsp;</p>



<p>Z architektonicznego punktu widzenia Selenium wszystkie komponenty są odpowiednio zwizualizowane na oficjalnej <a href="https://www.selenium.dev/documentation/overview/components/" target="_blank" rel="noreferrer noopener">stronie dokumentacji.</a>&nbsp;</p>



<p>Można powiedzieć, że WebDriver pomaga nam naśladować interakcje użytkownika / przeglądarki i dlatego jest tak pomocne w automatyzacji testów. WebDriver kontroluje przeglądarkę za pomocą właściwych dla niej sterowników, które są zwykle tworzone przez dostawców przeglądarek (np. Google dla Chrome lub Mozilla dla Firefox).&nbsp;</p>



<p>Cała komunikacja jest dwukierunkowa i zgodna z następującymi protokołami:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>dla Selenium 3: </strong><a href="https://www.selenium.dev/documentation/legacy/json_wire_protocol/" target="_blank" rel="noreferrer noopener">JSON Wire Protocol</a> prez HTTP (komunikacja tłumaczona)&nbsp;</li>



<li><strong>dla Selenium 4:</strong> <a href="https://w3c.github.io/webdriver/webdriver-spec.html" target="_blank" rel="noreferrer noopener">W3C WebDriver Protocol</a> (komunikacja natywna). Zobacz więcej na stronie <a href="https://www.w3.org/TR/webdriver/" target="_blank" rel="noreferrer noopener">W3C</a>&nbsp;</li>
</ul>



<p></p>



<p>Dzięki protokołowi W3C wprowadzonemu w Selenium 4 mamy bezpośredni transfer informacji między klientem a serwerem. Tak więc, jeśli nadal używasz Selenium 3 (WebDriver) i wahasz się, czy zacząć korzystać z wyższej wersji, koniecznie sprawdź informacje na stronie: <a href="https://www.selenium.dev/documentation/webdriver/getting_started/upgrade_to_selenium_4/" target="_blank" rel="noreferrer noopener">Upgrade to Selenium 4.</a>&nbsp;&nbsp;&nbsp;</p>



<p>Minimalne wymagane wersje to<strong> Java w wersji 8 i Python w wersji 3.7</strong>&nbsp;</p>



<h2 class="wp-block-heading" id="Selenium-i-Python-">Selenium i Python&nbsp;</h2>



<p>Jeśli wybrałeś tę drogę i jesteś początkujący, wypróbuj Selenium IDE i wygeneruj swój kod Pythona za pomocą funkcji eksportu.&nbsp;&nbsp;&nbsp;</p>



<p>Gdy będziesz już bardziej obeznany z Selenium IDE, przygotuj pełne środowisko programistyczne do automatyzacji testów Selenium / Python.&nbsp;</p>



<p>Przygotuj:&nbsp;</p>



<ul class="wp-block-list">
<li>IDE (<a href="https://www.jetbrains.com/pycharm/" target="_blank" rel="noreferrer noopener">PyCharm</a>, <a href="https://code.visualstudio.com/" target="_blank" rel="noreferrer noopener">Visual Studio Code</a> lub <a href="https://www.jetbrains.com/aqua/" target="_blank" rel="noreferrer noopener">Aqua</a>)&nbsp;</li>



<li><a href="https://www.python.org/" target="_blank" rel="noreferrer noopener">Python</a>&nbsp;</li>



<li><a href="https://pypi.org/project/pip/" target="_blank" rel="noreferrer noopener">PIP</a> (Package Installer for Python)&nbsp;</li>



<li>Narzędzie do budowania <a href="https://pipenv.pypa.io/en/latest/" target="_blank" rel="noreferrer noopener">Pipenv</a> ( PIP + <a href="https://docs.python.org/3/library/venv.html" target="_blank" rel="noreferrer noopener">Venv</a>/<a href="https://virtualenv.pypa.io/en/stable/" target="_blank" rel="noreferrer noopener">Virtualenv</a>, <a href="https://python-poetry.org/" target="_blank" rel="noreferrer noopener">Poetry</a> lub <a href="https://bazel.build/" target="_blank" rel="noreferrer noopener">Bazel</a>)&nbsp;</li>



<li><a href="https://pypi.org/project/selenium/" target="_blank" rel="noreferrer noopener">Powiązania Selenium z Pythonem</a>&nbsp;</li>



<li><a href="https://www.selenium.dev/documentation/webdriver/browsers/" target="_blank" rel="noreferrer noopener">Sterowniki przeglądarek dla Selenium</a> (<a href="https://chromedriver.chromium.org/downloads" target="_blank" rel="noreferrer noopener">Chrome</a>, <a href="https://github.com/mozilla/geckodriver/releases" target="_blank" rel="noreferrer noopener">Firefox</a>, <a href="https://developer.apple.com/documentation/webkit/about_webdriver_for_safari" target="_blank" rel="noreferrer noopener">Safari</a>, <a href="https://github.com/operasoftware/operachromiumdriver" target="_blank" rel="noreferrer noopener">Opera</a>, <a href="https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/" target="_blank" rel="noreferrer noopener">Edge</a> or <a href="https://pypi.org/project/webdriver-manager/" target="_blank" rel="noreferrer noopener">webdriver-manager</a>/<a href="https://www.selenium.dev/blog/2022/introducing-selenium-manager/" target="_blank" rel="noreferrer noopener">SeleniumManager*</a>)</li>



<li>Test Runner (<a href="https://docs.python.org/3/library/unittest.html" target="_blank" rel="noreferrer noopener">Unittest</a> lub <a href="https://docs.pytest.org/" target="_blank" rel="noreferrer noopener">Pytest</a>)&nbsp;</li>
</ul>



<p><br>*Selenium Manager jest dostępny od wersji 4.6 (Beta)</p>



<p><strong>Przeczytaj artykuł: <a href="https://nearshore-it.eu/pl/artykuly/numpy-wstep-do-biblioteki-python/">NumPy – wstęp do biblioteki w języku Python</a></strong></p>





<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Selenium-i-Java-">Selenium i Java&nbsp;</h2>



<p>Jeśli wybrałeś tę opcję i jesteś początkujący, wypróbuj wtyczkę <a href="https://www.selenium.dev/selenium-ide/" target="_blank" rel="noreferrer noopener">Selenium IDE</a> dla Chrome lub Firefox i wygeneruj kod Java za pomocą funkcji eksportu:&nbsp;</p>



<p>Gdy już nabędziesz doświadczenia, przygotuj pełne środowisko programistyczne do automatyzacji testów Selenium / Java.&nbsp;</p>



<h4 class="wp-block-heading">Przygotuj:&nbsp;</h4>



<ul class="wp-block-list">
<li>IDE (<a href="https://www.jetbrains.com/idea/" target="_blank" rel="noreferrer noopener">IDEA</a>, <a href="https://code.visualstudio.com/" target="_blank" rel="noreferrer noopener">Visual Studio Code</a> lub <a href="https://www.jetbrains.com/aqua/" target="_blank" rel="noreferrer noopener">Aqua</a>)&nbsp;</li>



<li><a href="https://www.oracle.com/java/technologies/downloads/" target="_blank" rel="noreferrer noopener">Java (JDK)</a>&nbsp;</li>



<li>Narzędzie do budowania (<a href="https://maven.apache.org/" target="_blank" rel="noreferrer noopener">Maven</a> lub <a href="https://gradle.org/" target="_blank" rel="noreferrer noopener">Gradle</a>)&nbsp;</li>



<li><a href="https://github.com/SeleniumHQ/selenium/releases/" target="_blank" rel="noreferrer noopener">Powiązania z Selenium w Javie</a>&nbsp;</li>



<li><a href="https://www.selenium.dev/documentation/webdriver/browsers/" target="_blank" rel="noreferrer noopener">Sterowniki przeglądarek dla Selenium</a> (<a href="https://chromedriver.chromium.org/downloads" target="_blank" rel="noreferrer noopener">Chrome</a>, <a href="https://github.com/mozilla/geckodriver/releases" target="_blank" rel="noreferrer noopener">Firefox</a>, <a href="https://developer.apple.com/documentation/webkit/about_webdriver_for_safari" target="_blank" rel="noreferrer noopener">Safari</a>, <a href="https://github.com/operasoftware/operachromiumdriver/releases" target="_blank" rel="noreferrer noopener">Opera</a>, <a href="https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/" target="_blank" rel="noreferrer noopener">Edge</a> or <a href="https://bonigarcia.dev/webdrivermanager/" target="_blank" rel="noreferrer noopener">WebDriverManager</a>/<a href="https://www.selenium.dev/documentation/selenium_manager/" target="_blank" rel="noreferrer noopener">SeleniumManager*</a>)</li>



<li>Test Runner (<a href="https://junit.org/junit4" target="_blank" rel="noopener">JUNIT4</a> / <a href="https://junit.org/junit5/" target="_blank" rel="noopener">JUNIT5</a> lub <a href="https://testng.org/doc/" target="_blank" rel="noreferrer noopener">TestNG</a>)&nbsp;&nbsp;&nbsp;</li>
</ul>



<p><br>*Selenium Manager jest dostępny od wersji 4.6 (Beta)</p>



<h2 class="wp-block-heading" id="Która-opcja-jest-lepsza-dla-testów-automatycznych-(Selenium-z-Pythonem-czy-Selenium-z-Javą)?--">Która opcja jest lepsza dla testów automatycznych (Selenium z Pythonem czy Selenium z Javą)?&nbsp;&nbsp;</h2>



<p>Jeśli jesteś całkowicie „zielony” i chcesz sprawdzić możliwości programowania czy automatyzacji za pomocą Selenium z Javą lub Pythonem, proponuję, abyś zaczął od skorzystania z <a href="https://www.selenium.dev/selenium-ide/" target="_blank" rel="noreferrer noopener">Selenium IDE.</a>&nbsp;</p>



<p>Selenium IDE jest dostarczany w formie dodatku do Chrome, Firefox i Edge (wersja 3.x). Umożliwia wygenerowanie kodu Javy / Pythona za pomocą funkcji eksportu. To bardzo proste – zwyczajnie rejestrujesz swoje działania w przeglądarce. Kod jest następnie generowany za pomocą funkcji eksportu do ulubionego języka. W momencie pisania tego artykułu (czerwiec 2023) możliwe było nawet pobranie samodzielnej wersji (<strong>4 alpha)</strong> Selenium IDE na kilka platform (np.: <strong>Windows</strong>, <strong>MacOS</strong>).&nbsp;</p>



<p>Dowiedz się więcej o <a href="https://github.com/SeleniumHQ/selenium-ide/releases/" target="_blank" rel="noreferrer noopener">najnowszych wersjach Selenium.</a>&nbsp;</p>



<p>Z punktu widzenia automatyzacji, a zwłaszcza integracji CI/CD, wygląda na to, że lepiej sprawdzi się tu duet Selenium i Java. Dobrze wpisuje się w powyższy proces – zazwyczaj natywnie i łatwo dzięki bardzo dobrej integracji z narzędziami takimi jak<strong> Jenkins / Maven / Gradle.</strong>&nbsp;</p>



<p>Nie oznacza to jednak, że nie można tego osiągnąć za pomocą Pythona. Będzie to co prawda bardziej męczące i wymaga użycia niektórych wtyczek. Ale przypomnijmy: <strong>Python oznacza łatwe programowanie i większą czytelność. </strong>Jeśli więc nie masz żadnego zaplecza programistycznego w obszarze Javy i Pythona, może kusić cię wykorzystanie drugiego z tych języków.&nbsp;</p>



<p>Jednym z ważnych punktów w procesie rozwoju automatyzacji testów w Selenium jest debugowanie testów. Wiele przeglądarek udostępnia „<strong>DevTools</strong>” – zestaw narzędzi zintegrowanych z przeglądarką, których programiści mogą używać do debugowania aplikacji internetowych i sprawdzania wydajności swoich stron.&nbsp;</p>



<p>Pierwszym narzędziem tego typu, które przychodzi mi do głowy, jest <strong>Chrome DevTools </strong>oparty na protokole <strong>Chrome DevTools Protocol (CDP):</strong>&nbsp;</p>



<ul class="wp-block-list">
<li><a href="https://developer.chrome.com/docs/devtools/" target="_blank" rel="noreferrer noopener">https://developer.chrome.com/docs/devtools/</a>&nbsp;</li>



<li><a href="https://www.selenium.dev/documentation/webdriver/bidirectional/chrome_devtools/" target="_blank" rel="noreferrer noopener">https://www.selenium.dev/documentation/webdriver/bidirectional/chrome_devtools/</a>&nbsp;</li>



<li><a href="https://www.selenium.dev/selenium/docs/api/Java/org/openqa/selenium/devtools/package-summary.html" target="_blank" rel="noreferrer noopener">https://www.selenium.dev/selenium/docs/api/Java/org/openqa/selenium/devtools/package-summary.html</a>&nbsp;</li>



<li><a href="https://chromedevtools.github.io/devtools-protocol/" target="_blank" rel="noreferrer noopener">https://chromedevtools.github.io/devtools-protocol/</a>&nbsp;</li>
</ul>



<p>Jest on prawdopodobnie najczęściej używany i zintegrowany z samym Selenium 4. Pomaga sprawdzać, testować i weryfikować selektory. Ponieważ selektory są ogólne i niezależne od języka, mają uniwersalne zastosowanie. Przydatne w debugowaniu kodu testowego Selenium będą również punkty przerwania (breakpoints) w twoim ulubionym IDE. Ustaw je w dowolnym miejscu, które wydaje ci się problematyczne, a test w przeglądarce zatrzyma się w wybranym momencie. Teraz możesz kontynuować debugowanie za pomocą <strong>DevTools </strong>przeglądarki, takich jak <strong>Chrome DevTools.</strong>&nbsp;</p>



<p>Działa to zarówno dla Javy (np.: IDEA), jak i Pythona (np.: PyCharm). Ale jeśli chodzi o Pythona, jest jedna kwestia interesująca również w kontekście debugowania. Mam na myśli <strong>PDB (The Python Debugger)</strong>, jedną z najlepszych technik debugowania dla Selenium.&nbsp;</p>



<ul class="wp-block-list">
<li><a href="https://docs.python.org/3/library/pdb.html" target="_blank" rel="noreferrer noopener">https://docs.python.org/3/library/pdb.html</a>&nbsp;</li>



<li><a href="https://realpython.com/python-debugging-pdb/" target="_blank" rel="noreferrer noopener">https://realpython.com/pl/python-debugging-pdb/</a>&nbsp;</li>



<li><a href="https://visualmodo.com/6-simple-tips-for-debugging-selenium-python-code/" target="_blank" rel="noreferrer noopener">https://visualmodo.com/6-simple-tips-for-debugging-selenium-python-code/</a>&nbsp;</li>



<li><a href="https://seleniumbase.com/the-ultimate-pytest-debugging-guide-2021/" target="_blank" rel="noreferrer noopener">https://seleniumbase.com/the-ultimate-pytest-debugging-guide-2021/</a>&nbsp;</li>



<li><a href="https://www.codementor.io/@stevek/advanced-python-debugging-with-pdb-g56gvmpfa" target="_blank" rel="noreferrer noopener">https://www.codementor.io/@stevek/advanced-python-debugging-with-pdb-g56gvmpfa</a>&nbsp;</li>
</ul>



<p>Ten moduł Pythona zapewnia interaktywną opcję debugowania kodu źródłowego. Aby samemu przekonać się o tym, jak bardzo może być przydatna, spójrz na poniższy przykład:&nbsp;</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">C:\Users\user> py 

Python 3.11.4 (tagi/v3.11.4:d2340ef, 7 czerwca 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)] na win32 

Wpisz „pomoc”, „prawa autorskie”, „kredyty” lub „licencja”, aby uzyskać więcej informacji. 

>>> from selenium import webdriver 

>>> from selenium.webdriver.common.by import By 

>>> import pdb 

>>> if __name__ == '__main__': 

...     print('Hello World!') 

...     browser = webdriver.Chrome() 

...     browser.  Get('http://selenium.dev/') 

...     web_driver_selector = "div.selenium-button-container a.selenium-webdriver" 

...     web_Driver_link = browser.find_element(By.CSS_SELECTOR, web_Driver_Selector) 

...     pdb.set_trace  () 

...     browser.  Quit() 

... 

Hello World! 

 </pre>



<p>a teraz, gdy twoja przeglądarka zostanie zatrzymana w wybranym punkcie ustawionym na <a href="http://selenium.dev/" target="_blank" rel="noreferrer noopener">stronie</a>, możesz sprawdzić <strong>web_driver_link:</strong>&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">(Pdb) dir 

&lt;built-in function dir> 

(Pdb) dir(web_driver_link) 

['__abstractmethods__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_abc_impl', '_execute', '_id', '_parent', '_upload', 'accessible_name', 'aria_role', 'clear', 'click', 'find_element', 'find_elements', 'get_attribute', 'get_dom_attribute', 'get_property', 'id', 'is_displayed', 'is_enabled', 'is_selected', 'location', 'location_once_scrolled_into_view', 'parent', 'rect', 'screenshot', 'screenshot_as_base64', 'screenshot_as_png', 'send_keys', 'shadow_root', 'size', 'submit', 'tag_name', 'text', 'value_of_css_property'] </pre>



<p>Jak widać, PDB daje możliwość sprawdzenia obiektu i tego, co można z nim zrobić, za pomocą polecenia <strong>dir</strong>, na przykład:&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">(Pdb) web_driver_link.is_displayed() 

True 

(Pdb) web_driver_link.is_enabled() 

True 

(Pdb) web_driver_link.is_selected() 

False 

(Pdb) web_driver_link.text 

'READ MORE' 

(Pdb) web_driver_link.get_property('href') 

„https://www.selenium.dev/documentation/webdriver/” 

(Pdb) web_driver_link.get_dom_attribute('class') 

'selenium-button selenium-webdriver text-uppercase font-weight-bold' 

(Pdb) web_driver_link.get_attribute('class') 

'selenium-button selenium-webdriver text-uppercase font-weight-bold' 

(Pdb) web_driver_link.get_dom_attribute('class') 

&lt;bound method WebElement.get_dom_attribute of &lt;selenium.webdriver.remote.webelement.WebElement (session="b51ad53a899388ec9293d83fd0750a98", element="E97FE72B561D59DFF64B6C8846C4CC17_element_31")>> 

(Pdb) web_driver_link.id 

'E97FE72B561D59DFF64B6C8846C4CC17_element_31' 

(Pdb) web_driver_link.__class__ 

&lt;class 'selenium.webdriver.remote.webelement.WebElement'> 

(Pdb) web_driver_link.value_of_css_property 

&lt;bound method WebElement.value_of_css_property of &lt;selenium.webdriver.remote.webelement.WebElement (session="b51ad53a899388ec9293d83fd0750a98", element="E97FE72B561D59DFF64B6C8846C4CC17_element_31")>> 

(Pdb) web_driver_link.value_of_css_property('color') 

'rgba(200, 16, 46, 1)' 

(Pdb) </pre>



<p>Może to być również jeden z argumentów przemawiających na korzyść Pythona. Możesz go rozszerzyć nawet za pomocą dodatku <strong>ipdb</strong>, który poprawia obsługę debuggera pdb.&nbsp;&nbsp;</p>



<p>Tryb debugowania ipdb dodaje kolorowe podświetlanie składni, uzupełnianie tabulatorów i rozszerzony widok kodu z numerami wierszy. Przed użyciem PDB musi być zainstalowany niezależnie od Pytest:&nbsp;&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">pip install ipdb </pre>



<h3 class="wp-block-heading">Do czego służy Selenium z Pythonem?&nbsp;</h3>



<p>Wspomniany duet technologiczny służy do testowania frontu aplikacji webowych. Pomaga wspierać żmudne i powtarzalne działania lub testy GUI, zastępując je automatycznymi skryptami. W ten sposób można je zintegrować z narzędziami CI/CD i wykorzystać na przykład do <a href="https://nearshore-it.eu/pl/artykuly/testy-regresji/" data-type="post" data-id="3116">testów regresji</a> przeprowadzanych w nocy. Gdybym miał odpowiedzieć na powyżej zadane pytanie jednym zdaniem, powiedziałbym:&nbsp;</p>



<p><strong>„Selenium + Python służy zasadniczo do automatyzacji testów aplikacji internetowych”.</strong>&nbsp;</p>



<p>Selenium (WebDriver) odpowiada za dwukierunkową komunikację klient – serwer między tobą a przeglądarką. Python i jego powiązania z Selenium „opakowują” to wszystko w wykonywalny kod, dostarczany przez niektóre frameworki testowe, takie jak xUnit / TestNG.&nbsp;</p>



<h3 class="wp-block-heading">Czy Selenium z Pythonem to dobry wybór?&nbsp;</h3>



<p>Odpowiedź na to pytanie zależy od wielu czynników. Każdy z nas jest inny, różnią nas doświadczenie, kompetencje i umiejętność uczenia się. Ostateczna odpowiedź na to pytanie będzie więc miała dla ciebie wymiar indywidualny. Celem tego artykułu jest to, aby pomóc ci ją odnaleźć. Przeczytaj go, przeanalizuj, biorąc pod uwagę własne cele zawodowe, doświadczenie, aktualne projekty i swoje plany, tak by dokonać możliwie jak najlepszego wyboru.&nbsp;&nbsp;</p>



<h2 class="wp-block-heading" id="Jak-wykonać-skrypt-Selenium-w-Pythonie?-">Jak wykonać skrypt Selenium w Pythonie?&nbsp;</h2>



<p>W Pythonie możemy wyróżnić 2 główne typy plików:&nbsp;</p>



<ul class="wp-block-list">
<li>Pliki <strong>.py</strong> to pliki tekstowe możliwe do odczytania przez człowieka, zawierające wewnątrz kod Pythona, zwane skryptami Pythona (w systemach Windows rozszerzeniem może być również <strong>.pyw</strong>)&nbsp;</li>



<li>Pliki <strong>.pyc</strong> to skompilowane pliki kodu bajtowego, które są generowane przez interpreter języka Python podczas importowania lub wykonywania skryptu Pythona.&nbsp;</li>
</ul>



<p>Pliki Pythona są zapisywane na komputerze użytkownika z rozszerzeniem <strong>.py</strong>, podobnie jak pliki Java są zapisywane z rozszerzeniami <strong>.java.</strong> Kody Pythona, po ich zinterpretowaniu, są następnie konwertowane na kody bajtowe. Te kody bajtowe są zapisywane w pliku z rozszerzeniem <strong>.pyc</strong>.&nbsp;&nbsp;</p>



<p>Katalog „<a href="https://www.w3docs.com/snippets/python/what-is-pycache.html" target="_blank" rel="noreferrer noopener">__pycache__</a>” to folder utworzony w celu przechowywania plików<strong> .pyc</strong>.&nbsp;</p>



<ul class="wp-block-list">
<li><a href="https://prepinsta.com/python/difference-between-py-pyc-and-pycache-files/" target="_blank" rel="noreferrer noopener">https://prepinsta.com/pl/python/difference-between-py-pyc-and-pycache-files/</a>&nbsp;</li>



<li><a href="https://stackabuse.com/differences-between-pyc-pyd-and-pyo-python-files/" target="_blank" rel="noreferrer noopener">https://stackabuse.com/differences-between-pyc-pyd-and-pyo-python-files/</a>&nbsp;</li>



<li><a href="https://net-informations.com/python/iq/pyc.htm" target="_blank" rel="noreferrer noopener">https://net-informations.com/python/iq/pyc.htm</a>&nbsp;</li>
</ul>



<p>Pomyśl o pliku <strong>.pyc</strong> jako skompilowanym kodzie bajtowym podobnym do pliku .<strong>class</strong> w świecie Javy.&nbsp;</p>



<p>Gdy tylko <a href="https://docs.python.org/dev/whatsnew/3.2.html#pep-3147-pyc-repository-directories" target="_blank" rel="noreferrer noopener">go wygenerujesz</a>, może być bezpośrednio wykonany przez interpreter bez rekompilacji pliku skryptu <strong>.py</strong> za każdym razem, gdy go używasz – zatem przyspieszasz wykonanie.&nbsp;</p>



<p>To ważne, gdy masz spore skrypty i/lub moduły Pythona.&nbsp;</p>



<p>Podsumowując:&nbsp;</p>



<ul class="wp-block-list">
<li>Pliki <strong>.pyc</strong> są generowane automatycznie przez interpreter języka Python podczas importowania lub wykonywania skryptu Python&nbsp;</li>



<li>Pliki <strong>.pyc</strong> są przechowywane w tym samym katalogu co odpowiadające im pliki <strong>.py </strong>i mają taką samą nazwę jak pliki <strong>.py</strong>, z wyjątkiem rozszerzenia <strong>.pyc </strong>zamiast <strong>.py</strong>&nbsp;</li>



<li>Pliki <strong>.pyc</strong> są właściwe dla danej wersji Pythona, użytej do ich wygenerowania. Jeśli spróbujesz uruchomić plik <strong>.pyc</strong> z inną wersją języka Python, możesz napotkać błędy lub może się pojawić nieoczekiwane zachowanie&nbsp;</li>
</ul>



<p>eśli chcesz uruchomić skrypt Pythona, masz 2 opcje:&nbsp;</p>



<ol start="1" class="wp-block-list">
<li>uruchamianie Python Scriptu przez Interpretera Pythona w trybie interaktywnym (w postaci fragmentu kodu napisanego w sesji interaktywnej – przydatnego do debugowania)&nbsp;</li>
</ol>



<p><strong>python</strong>&nbsp;</p>



<p>e.g.:&nbsp;</p>



<p>wpisywanie kodu linijka po linijce&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">C:\Users\user> py 

Python 3.11.4 (tagi/v3.11.4:d2340ef, 7 czerwca 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)] na win32 

Wpisz „pomoc”, „prawa autorskie”, „kredyty” lub „licencja”, aby uzyskać więcej informacji. 

>>> from selenium import webdriver 

>>> if __name__ == '__main__': 

...     print('Hello World!') 

...     browser = webdriver.Chrome() 

...     browser.get('http://selenium.dev/') 

...     browser.quit() 

... 

Hello World! 

  

DevTools listening on ws://127.0.0.1:56302/devtools/browser/fdca3cc9-4266-49af-a146-41d60ed464eb 

>>> exit() 

  

C:\Users\user> </pre>



<p>lub za pomocą<strong> exec() </strong>, który zapewnia alternatywny sposób uruchamiania skryptów:&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">C:\Users\user> py 

Python 3.11.4 (tagi/v3.11.4:d2340ef, 7 czerwca 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)] na win32 

Wpisz „pomoc”, „prawa autorskie”, „kredyty” lub „licencja”, aby uzyskać więcej informacji. 

>>> exec(open('your_script.py').read()) 

Hello World! 

>>> 

>>> quit() 

  

C:\Users\user> </pre>



<p>Interaktywna sesja Pythona pozwala napisać wiele linijek kodu, jednak po jej zamknięciu tracisz wszystko, co napisałeś.&nbsp;&nbsp;</p>



<p>Dlatego często do pisania programów w Pythonie używa się zwykłych plików tekstowych. Plik z kodem Pythona musi znajdować się w bieżącym katalogu roboczym. Plik musi znajdować się w ścieżce wyszukiwania modułów Pythona (<strong>PMSP</strong>), w której Python wyszukuje importowane moduły i pakiety.&nbsp;</p>



<p>2) uruchom Python Script za pomocą Command-Line (w formie skryptu lub modułu – przydatne do automatyzacji)&nbsp;</p>



<p><strong>python your_script.py</strong>&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">C:\Users\user> py your_script.py 

Hello World! </pre>



<p>lub jeszcze łatwiej: używając skojarzeń plików systemu Windows i podając tylko nazwę skryptu:&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">C:\Users\user> your_script.py 

Hello World! </pre>



<p>w systemach GNU/Linux możesz osiągnąć coś podobnego, dodając tak zwany hashbang lub shebang do swojego skryptu. Jest on kombinacją znaków #! po którym następuje ścieżka interpretera.&nbsp;</p>



<p>Istnieją dwa sposoby określenia ścieżki do interpretera:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>#!/usr/bin/python</strong>: pisząc ścieżkę absolutną&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>#!/usr/bin/env python</strong>:<strong> </strong>za pomocą polecenia systemu operacyjnego <strong>env</strong>, które lokalizuje i wykonuje kod Pythona, przeszukując zmienną środowiskową PATH&nbsp;</li>
</ul>



<p></p>



<p>Ponieważ nie wszystkie systemy uniksopodobne lokalizują interpreter Pythona w tym samym miejscu, drugi charakter ścieżki podany powyżej wygląda bardziej uniwersalnie.&nbsp;</p>



<p>musisz również dodać uprawnienia do wykonywania:&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#assign the execution permissions 

chmod +x your_script.py 

#run script using its filename 

./your_script.py 

Hello World! </pre>



<p>możesz uruchomić wygenerowany bezpośrednio kod bajtowy skryptu:&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">C:\Users\user> dir your_script.py 

Volume in drive C is Windows 

Volume Serial Number is 94D2-9546 

  

Directory of C:\Users\user 

  

15-Jun-23  14:02               544 your_script.py 

               1 File(s)            544 bytes 

               0 Dir(s)  194,664,701,952 bytes free 

  

C:\Users\user> cd __pycache__ 

  

C:\Users\user\__pycache__> dir your_script.cpython-311.pyc 

Volume in drive C is Windows 

Volume Serial Number is 94D2-9546 

  

Directory of C:\Users\user\__pycache__ 

  

15-Jun-23  14:06               401 your_script.cpython-311.pyc 

               1 File(s)            401 bytes 

               0 Dir(s)  194,664,546,304 bytes free 

  

C:\Users\user\__pycache__> your_script.cpython-311.pyc 

Hello World! 

  

C:\Users\user\__pycache__> </pre>



<h2 class="wp-block-heading" id="Jak-zainstalować-Selenium-z-PIP?-">Jak zainstalować Selenium z PIP?&nbsp;</h2>



<ul class="wp-block-list">
<li>zainstaluj Pythona (ręcznie lub za pomocą IDE)&nbsp;</li>
</ul>



<p>Wejdź na <a href="https://www.python.org/" target="_blank" rel="noreferrer noopener">Python.org</a> i pobierz odpowiednią <a href="https://www.python.org/ftp/python/" target="_blank" rel="noreferrer noopener">wersję</a>.&nbsp;</p>



<p>py &#8211;version</p>



<p>Python 3.N.N</p>



<p>e.g. for WIN (CMD):</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""> 

C:\Users\user> py --version 

Python 3.11.4 

  

C:\Users\user> </pre>



<ul class="wp-block-list">
<li><a href="https://pip.pypa.io/en/stable/" target="_blank" rel="noreferrer noopener">install or upgrade PIP</a> (manually or using IDE)&nbsp;</li>
</ul>



<h3 class="wp-block-heading">Czym jest PIP?&nbsp;</h3>



<p><strong>PIP jest instalatorem pakietów dla Pythona.</strong> Możesz go użyć do zainstalowania pakietów z indeksu pakietów Pythona i innych. Najpopularniejsze narzędzie do instalowania pakietów Pythona dołączone do najnowszych wersji tego języka.&nbsp;Dostarcza podstawowych funkcji wyszukiwania, pobierania i instalowania pakietów z innych indeksów pakietów Pythona i może być włączony do szerokiego zakresu przepływów pracy programistycznej (workflow) za pośrednictwem interfejsu wiersza poleceń (<strong>CLI</strong>).&nbsp;</p>



<p></p>



<p>py -m pip &#8211;version</p>



<p>pip X.Y.Z from … (python 3.N.N)</p>



<p>e.g., for WIN (CMD):</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""> 

C:\Users\user> py -m pip --version 

pip 23.1.2 from C:\Program Files\Python311\Lib\site-packages\pip (python 3.11) 

  

C:\Users\user> 

  

e.g., for WIN (IDE): 

  

  

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium> py -m pip list 

 

 

setuptools 65.5.1 

wheel      0.38.4 

  

[notice] A new release of pip available: 22.3.1 -> 23.1.2 

[notice] To update, run: python.exe -m pip install --upgrade pip 

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium> py -m pip --version 

pip 22.3.1 from C:\Users\user\PycharmProjects\pythonSelenium\venv\Lib\site-packages\pip (python 3.11) 

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium> python.exe -m pip install --upgrade pip 

Requirement already satisfied: pip in c:\users\user\pycharmprojects\pythonselenium\venv\lib\site-packages (22.3.1) 

Collecting pip 

  Downloading pip-23.1.2-py3-none-any.whl (2.1 MB) 

     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 2.7 MB/s eta 0:00:00 

Installing collected packages: pip 

  Attempting uninstall: pip 

    Found existing installation: pip 22.3.1 

    Uninstalling pip-22.3.1: 

      Successfully uninstalled pip-22.3.1 

Successfully installed pip-23.1.2 

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium>  

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium> py -m pip --version 

pip 23.1.2 from C:\Users\user\PycharmProjects\pythonSelenium\venv\Lib\site-packages\pip (python 3.11) 

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium>  

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium> py -m pip list 

Package    Version 

---------- ------- 

pip        23.1.2 

setuptools 65.5.1 

wheel      0.38.4 

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium>   </pre>



<p>Jeśli to zadziałało, gratulacje! Masz w swoim środowisku działający PIP.&nbsp;</p>



<ul class="wp-block-list">
<li>instalacja <a href="https://pypi.org/project/selenium/#files" target="_blank" rel="noreferrer noopener">powiązań Selenium Python</a>&nbsp;<br>&nbsp;</li>
</ul>



<p>Zweryfikuj obsługiwaną wersję Pythona (dla wersji Selenium 4.10.0):&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">  Python 3.7+ 
  

Instalacja </pre>



<p>Jeśli masz PIP w swoim systemie, możesz po prostu zainstalować lub zaktualizować powiązania Pythona:&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">pip install selenium 

pip install -U selenium </pre>



<p>Jeśli potrzebujesz określonej wersji powiązań Selenium z Pythonem:&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">pip install selenium==&lt;version_number> </pre>



<p>Alternatywnie możesz pobrać dystrybucję źródłową z PyPI (np. selen-4.10.0.tar.gz), odarchiwizować ją i uruchomić:&nbsp;</p>



<p>py setup.py install</p>



<p>e.g. for WIN (CMD):</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">  

C:\Users\user> py -m pip list 

Package    Version 

---------- ------- 

pip        23.1.2 

setuptools 65.5.0 

  

C:\Users\user> 

C:\Users\user> py -m pip install selenium 

Defaulting to user installation because normal site-packages is not writeable 

Collecting selenium 

  Downloading selenium-4.10.0-py3-none-any.whl (6.7 MB) 

     ---------------------------------------- 6.7/6.7 MB 23.7 MB/s eta 0:00:00 

Collecting urllib3[socks]&lt;3,>=1.26 (from selenium) 

  Downloading urllib3-2.0.3-py3-none-any.whl (123 kB) 

     ---------------------------------------- 123.6/123.6 kB ? eta 0:00:00 

Collecting trio~=0.17 (from selenium) 

  Downloading trio-0.22.0-py3-none-any.whl (384 kB) 

     ---------------------------------------- 384.9/384.9 kB 25.0 MB/s eta 0:00:00 

Collecting trio-websocket~=0.9 (from selenium) 

  Downloading trio_websocket-0.10.3-py3-none-any.whl (17 kB) 

Collecting certifi>=2021.10.8 (from selenium) 

  Downloading certifi-2023.5.7-py3-none-any.whl (156 kB) 

     ---------------------------------------- 157.0/157.0 kB 9.2 MB/s eta 0:00:00 

Collecting attrs>=19.2.0 (from trio~=0.17->selenium) 

  Downloading attrs-23.1.0-py3-none-any.whl (61 kB) 

     ---------------------------------------- 61.2/61.2 kB 3.2 MB/s eta 0:00:00 

Collecting sortedcontainers (from trio~=0.17->selenium) 

  Downloading sortedcontainers-2.4.0-py2.py3-none-any.whl (29 kB) 

Collecting async-generator>=1.9 (from trio~=0.17->selenium) 

  Downloading async_generator-1.10-py3-none-any.whl (18 kB) 

Collecting idna (from trio~=0.17->selenium) 

  Downloading idna-3.4-py3-none-any.whl (61 kB) 

     ---------------------------------------- 61.5/61.5 kB 3.2 MB/s eta 0:00:00 

Collecting outcome (from trio~=0.17->selenium) 

  Downloading outcome-1.2.0-py2.py3-none-any.whl (9.7 kB) 

Collecting sniffio (from trio~=0.17->selenium) 

  Downloading sniffio-1.3.0-py3-none-any.whl (10 kB) 

Collecting cffi>=1.14 (from trio~=0.17->selenium) 

  Downloading cffi-1.15.1-cp311-cp311-win_amd64.whl (179 kB) 

     ---------------------------------------- 179.0/179.0 kB ? eta 0:00:00 

Collecting exceptiongroup (from trio-websocket~=0.9->selenium) 

  Downloading exceptiongroup-1.1.1-py3-none-any.whl (14 kB) 

Collecting wsproto>=0.14 (from trio-websocket~=0.9->selenium) 

  Downloading wsproto-1.2.0-py3-none-any.whl (24 kB) 

Collecting pysocks!=1.5.7,&lt;2.0,>=1.5.6 (from urllib3[socks]&lt;3,>=1.26->selenium) 

  Downloading PySocks-1.7.1-py3-none-any.whl (16 kB) 

Collecting pycparser (from cffi>=1.14->trio~=0.17->selenium) 

  Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB) 

     ---------------------------------------- 118.7/118.7 kB ? eta 0:00:00 

Collecting h11&lt;1,>=0.9.0 (from wsproto>=0.14->trio-websocket~=0.9->selenium) 

  Downloading h11-0.14.0-py3-none-any.whl (58 kB) 

     ---------------------------------------- 58.3/58.3 kB ? eta 0:00:00 

Installing collected packages: sortedcontainers, urllib3, sniffio, pysocks, pycparser, idna, h11, exceptiongroup, certifi, attrs, async-generator, wsproto, outcome, cffi, trio, trio-websocket, selenium 

Successfully installed async-generator-1.10 attrs-23.1.0 certifi-2023.5.7 cffi-1.15.1 exceptiongroup-1.1.1 h11-0.14.0 idna-3.4 outcome-1.2.0 pycparser-2.21 pysocks-1.7.1 selenium-4.10.0 sniffio-1.3.0 sortedcontainers-2.4.0 trio-0.22.0 trio-websocket-0.10.3 urllib3-2.0.3 wsproto-1.2.0 

  

C:\Users\user> 

C:\Users\user> py -m pip freeze 

async-generator==1.10 

attrs==23.1.0 

certifi==2023.5.7 

cffi==1.15.1 

exceptiongroup==1.1.1 

h11==0.14.0 

idna==3.4 

outcome==1.2.0 

pycparser==2.21 

PySocks==1.7.1 

selenium==4.10.0 

sniffio==1.3.0 

sortedcontainers==2.4.0 

trio==0.22.0 

trio-websocket==0.10.3 

urllib3==2.0.3 

wsproto==1.2.0 

  

C:\Users\user> 

C:\Users\user> py -m pip show selenium 

Name: selenium 

Version: 4.10.0 

Podsumowanie: 

Home-page: https://www.selenium.dev 

Author: 

Author-email: 

License: Apache 2.0 

Location: C:\Users\user\AppData\Roaming\Python\Python311\site-packages 

Requires: certifi, trio, trio-websocket, urllib3 

Required-by: 

  

C:\Users\user> 

  

  

or for WIN (IDE): 

  

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium> py -m pip install selenium 

Collecting selenium 

  Using cached selenium-4.10.0-py3-none-any.whl (6.7 MB) 

Collecting urllib3[socks]&lt;3,>=1.26 (from selenium) 

  Using cached urllib3-2.0.3-py3-none-any.whl (123 kB) 

Collecting trio~=0.17 (from selenium) 

  Using cached trio-0.22.0-py3-none-any.whl (384 kB) 

Collecting trio-websocket~=0.9 (from selenium) 

  Using cached trio_websocket-0.10.3-py3-none-any.whl (17 kB) 

Collecting certifi>=2021.10.8 (from selenium) 

  Using cached certifi-2023.5.7-py3-none-any.whl (156 kB) 

Collecting attrs>=19.2.0 (from trio~=0.17->selenium) 

  Using cached attrs-23.1.0-py3-none-any.whl (61 kB) 

Collecting sortedcontainers (from trio~=0.17->selenium) 

  Using cached sortedcontainers-2.4.0-py2.py3-none-any.whl (29 kB) 

Collecting async-generator>=1.9 (from trio~=0.17->selenium) 

  Using cached async_generator-1.10-py3-none-any.whl (18 kB) 

Collecting idna (from trio~=0.17->selenium) 

  Using cached idna-3.4-py3-none-any.whl (61 kB) 

Collecting outcome (from trio~=0.17->selenium) 

  Using cached outcome-1.2.0-py2.py3-none-any.whl (9.7 kB) 

Collecting sniffio (from trio~=0.17->selenium) 

  Using cached sniffio-1.3.0-py3-none-any.whl (10 kB) 

Collecting cffi>=1.14 (from trio~=0.17->selenium) 

  Using cached cffi-1.15.1-cp311-cp311-win_amd64.whl (179 kB) 

Collecting exceptiongroup (from trio-websocket~=0.9->selenium) 

  Using cached exceptiongroup-1.1.1-py3-none-any.whl (14 kB) 

Collecting wsproto>=0.14 (from trio-websocket~=0.9->selenium) 

  Using cached wsproto-1.2.0-py3-none-any.whl (24 kB) 

Collecting pysocks!=1.5.7,&lt;2.0,>=1.5.6 (from urllib3[socks]&lt;3,>=1.26->selenium) 

  Using cached PySocks-1.7.1-py3-none-any.whl (16 kB) 

Collecting pycparser (from cffi>=1.14->trio~=0.17->selenium) 

  Using cached pycparser-2.21-py2.py3-none-any.whl (118 kB) 

Collecting h11&lt;1,>=0.9.0 (from wsproto>=0.14->trio-websocket~=0.9->selenium) 

  Using cached h11-0.14.0-py3-none-any.whl (58 kB) 

Installing collected packages: sortedcontainers, urllib3, sniffio, pysocks, pycparser, idna, h11, exceptiongroup, certifi, attrs, async-generator, wsproto, outco 

me, cffi, trio, trio-websocket, selenium 

Successfully installed async-generator-1.10 attrs-23.1.0 certifi-2023.5.7 cffi-1.15.1 exceptiongroup-1.1.1 h11-0.14.0 idna-3.4 outcome-1.2.0 pycparser-2.21 pysoc 

ks-1.7.1 selenium-4.10.0 sniffio-1.3.0 sortedcontainers-2.4.0 trio-0.22.0 trio-websocket-0.10.3 urllib3-2.0.3 wsproto-1.2.0 

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium>  

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium> py -m pip list             

Package          Version 

---------------- -------- 

async-generator  1.10 

attrs            23.1.0 

certifi          2023.5.7 

cffi             1.15.1 

exceptiongroup   1.1.1 

h11              0.14.0 

idna             3.4 

outcome          1.2.0 

pip              23.1.2 

pycparser        2.21 

PySocks          1.7.1 

selenium         4.10.0 

sniffio          1.3.0 

sortedcontainers 2.4.0 

trio             0.22.0 

trio-websocket   0.10.3 

urllib3          2.0.3 

wheel            0.38.4 

wsproto          1.2.0 

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium> py -m pip show selenium 

Name: selenium 

Version: 4.10.0 

Podsumowanie: 

Home-page: https://www.selenium.dev 

Author: 

Author-email: 

License: Apache 2.0 

Location: C:\Users\user\PycharmProjects\pythonSelenium\venv\Lib\site-packages 

Requires: certifi, trio, trio-websocket, urllib3 

Required-by: 

(venv) PS C:\Users\user\PycharmProjects\pythonSelenium>  </pre>



<h2 class="wp-block-heading" id="Automatyzacja-testów-–-podsumowanie--">Automatyzacja testów – podsumowanie&nbsp;&nbsp;</h2>



<p>Selenium obsługuje wiele języków programowania do automatyzacji testów. Wśród programistów zarówno Java, jak i Python zyskały rekordową popularność. Pythona łatwo się nauczyć, jego składnia jest czytelna, więc jeśli dopiero zaczynasz programować, użycie Selenium z Pythonem może być interesujące pod względem automatyzacji. Natomiast Java i Selenium, szczególnie w kontekście integracji CI/CD, dzięki zastosowaniu odpowiednich narzędzi do budowania, doskonale wpisują się w cały proces wytwarzania oprogramowania. Odpowiedź na pytanie, czy wybrać Javę czy Pythona, należy do ciebie i będzie zależeć od twojego doświadczenia zawodowego i celów, jakie sobie stawiasz.&nbsp;&nbsp;</p>



<h2 class="wp-block-heading" id="FAQ-Starting-points-for-Selenium-with-Java-or-Python-">FAQ Pakiet startowy Selenium + Java lub Python&nbsp;</h2>



<p>Oto twój pakiet startowy do automatyzacji testów z Selenium + Java lub Selenium + Python, bez względu na to, którego z nich zdecydujesz się użyć.&nbsp;</p>


<div id="rank-math-faq" class="rank-math-block">
<div class="rank-math-list ">
<div id="faq-question-1689152093137" class="rank-math-list-item">
<h3 class="rank-math-question ">Selenium / WebDriver z powiązaniami językowymi </h3>
<div class="rank-math-answer ">

<p><a href="https://selenium.dev/downloads" target="_blank" rel="noreferrer noopener">https://selenium.dev/downloads</a> <br /><a href="https://www.selenium.dev/downloads/" target="_blank" rel="noreferrer noopener">https://www.selenium.dev/downloads/</a> <br /><a href="https://github.com/SeleniumHQ/Selenium" target="_blank" rel="noreferrer noopener">https://github.com/SeleniumHQ/Selenium</a> <br /><a href="https://www.selenium.dev/documentation/webdriver/getting_started/install_library/" target="_blank" rel="noreferrer noopener">https://www.selenium.dev/documentation/webdriver/getting_started/install_library/</a> <br /><a href="https://www.selenium.dev/documentation/webdriver/getting_started/first_script/" target="_blank" rel="noreferrer noopener">https://www.selenium.dev/documentation/webdriver/getting_started/first_script/</a> <br /><a href="https://www.selenium.dev/selenium-ide/" target="_blank" rel="noreferrer noopener">https://www.selenium.dev/selenium-ide/</a> <br /><a href="https://www.tutorialspoint.com/what-is-selenese" target="_blank" rel="noreferrer noopener">https://www.tutorialspoint.com/what-is-selenese</a> <br /><a href="https://www.javatpoint.com/selenium-ide-commands" target="_blank" rel="noreferrer noopener">https://www.javatpoint.com/selenium-ide-commands</a> <br /><a href="https://github.com/SeleniumHQ/selenium-ide/releases/latest" target="_blank" rel="noreferrer noopener">https://github.com/SeleniumHQ/selenium-ide/releases/latest</a> <br /><a href="https://github.com/SeleniumHQ/selenium-ide/releases/tag/4.0.0-alpha.40" target="_blank" rel="noreferrer noopener">https://github.com/SeleniumHQ/selenium-ide/releases/tag/4.0.0-alpha.40</a> <br /><a href="https://github.com/SeleniumHQ/selenium-ide/releases" target="_blank" rel="noreferrer noopener">https://github.com/SeleniumHQ/selenium-ide/releases</a> </p>

</div>
</div>
<div id="faq-question-1689152100342" class="rank-math-list-item">
<h3 class="rank-math-question ">Selenium i Python </h3>
<div class="rank-math-answer ">

<p>Download: <a href="https://pypi.org/project/selenium/#history" target="_blank" rel="noreferrer noopener">https://pypi.org/project/selenium/#history</a> <br />API: <a href="https://seleniumhq.github.io/selenium/docs/api/py/api.html" target="_blank" rel="noreferrer noopener">https://seleniumhq.github.io/selenium/docs/api/py/api.html</a> <br />Changelog: <a href="https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES" target="_blank" rel="noreferrer noopener">https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES</a> <br />PyCharm: <a href="https://www.jetbrains.com/pycharm/" target="_blank" rel="noreferrer noopener">https://www.jetbrains.com/pycharm/</a> <br />VSC: <a href="https://code.visualstudio.com/" target="_blank" rel="noreferrer noopener">https://code.visualstudio.com/</a> <br />VSC Python Extension: <a href="https://marketplace.visualstudio.com/items?itemName=ms-python.python" target="_blank" rel="noreferrer noopener">https://marketplace.visualstudio.com/items?itemName=ms-python.python</a> <br />Aqua: <a href="https://www.jetbrains.com/aqua/download" target="_blank" rel="noreferrer noopener">https://www.jetbrains.com/aqua/download</a> <br />Python: <a href="https://www.python.org/" target="_blank" rel="noreferrer noopener">https://www.python.org/</a> <br />PIP: <a href="https://pip.pypa.io/en/stable/" target="_blank" rel="noreferrer noopener">https://pip.pypa.io/en/stable/</a> <br />Python Selenium Bindings: <a href="https://pypi.org/project/selenium/#files" target="_blank" rel="noreferrer noopener">https://pypi.org/project/selenium/#files</a>  <br />Unittest: <a href="https://docs.python.org/3/library/unittest.html" target="_blank" rel="noreferrer noopener">https://docs.python.org/3/library/unittest.html</a> <br />Pytest: <a href="https://pypi.org/project/pytest" target="_blank" rel="noreferrer noopener">https://pypi.org/project/pytest</a> <br />Pipenv: <a href="https://pypi.org/project/pipenv/" target="_blank" rel="noreferrer noopener">https://pypi.org/project/pipenv/</a> <br />Venv: <a href="https://packaging.python.org/en/latest/key_projects/#venv" target="_blank" rel="noreferrer noopener">https://packaging.python.org/en/latest/key_projects/#venv</a> <br />Virtualenv: <a href="https://pypi.org/project/virtualenv/" target="_blank" rel="noreferrer noopener">https://pypi.org/project/virtualenv/</a> <br />Poetry: <a href="https://python-poetry.org/" target="_blank" rel="noreferrer noopener">https://python-poetry.org/</a> <br />Bazel: <a href="https://bazel.build/" target="_blank" rel="noreferrer noopener">https://bazel.build/</a> <br />Browser drivers: <a href="https://www.selenium.dev/downloads/#supported-browsers" target="_blank" rel="noreferrer noopener">https://www.selenium.dev/downloads/#supported-browsers</a> <br />WebDriverManager: <a href="https://pypi.org/project/webdriver-manager/" target="_blank" rel="noreferrer noopener">https://pypi.org/project/webdriver-manager/</a> </p>

</div>
</div>
<div id="faq-question-1689152114800" class="rank-math-list-item">
<h3 class="rank-math-question ">Selenium i Java </h3>
<div class="rank-math-answer ">

<p>Download: <a href="https://github.com/SeleniumHQ/selenium/releases" target="_blank" rel="noreferrer noopener">https://github.com/SeleniumHQ/selenium/releases</a> <br />API: <a href="https://seleniumhq.github.io/selenium/docs/api/Java/index.html" target="_blank" rel="noreferrer noopener">https://seleniumhq.github.io/selenium/docs/api/Java/index.html</a> <br />Changelog: <a href="https://github.com/SeleniumHQ/selenium/blob/trunk/Java/CHANGELOG" target="_blank" rel="noreferrer noopener">https://github.com/SeleniumHQ/selenium/blob/trunk/Java/CHANGELOG</a> <br />IDEA: <a href="https://www.jetbrains.com/idea/" target="_blank" rel="noreferrer noopener">https://www.jetbrains.com/idea/   </a><br />VSC: <a href="https://code.visualstudio.com/" target="_blank" rel="noreferrer noopener">https://code.visualstudio.com/</a> <br />VSC CODING PACK for JAVA: <a href="https://aka.ms/vscode-java-installer-win" target="_blank" rel="noreferrer noopener">https://aka.ms/vscode-java-installer-win</a> <br />VSC EXTENSION PACK for JAVA: <a href="https://code.visualstudio.com/docs/java/extensions" target="_blank" rel="noreferrer noopener">vscode:extension/vscjava.vscode-java-pack  </a><br />AQUA: <a href="https://www.jetbrains.com/aqua/download" target="_blank" rel="noreferrer noopener">https://www.jetbrains.com/aqua/download</a> <br />JDK: <a href="https://www.oracle.com/java/technologies/javase-downloads.html" target="_blank" rel="noreferrer noopener">https://www.oracle.com/java/technologies/javase-downloads.html</a> <br />MAVEN: <a href="https://maven.apache.org/" target="_blank" rel="noreferrer noopener">https://maven.apache.org/</a> <br />GRADLE: <a href="https://gradle.org/" target="_blank" rel="noreferrer noopener">https://gradle.org/</a> <br />JAVA SELENIUM BINDINGS: <a href="https://github.com/SeleniumHQ/selenium/releases/" target="_blank" rel="noreferrer noopener">https://github.com/SeleniumHQ/selenium/releases/</a> <br />JUNIT 4: <a href="https://junit.org/junit4/" target="_blank" rel="noreferrer noopener">https://junit.org/junit4/</a> <br />JUNIT 5: <a href="https://junit.org/junit5/" target="_blank" rel="noreferrer noopener">https://junit.org/junit5/</a> <br />TESTNG: <a href="https://testng.org/" target="_blank" rel="noreferrer noopener">https://testng.org</a> <br />BROWSER DRIVERS: <a href="https://www.selenium.dev/downloads/#supported-browsers" target="_blank" rel="noreferrer noopener">https://www.selenium.dev/downloads/#supported-browsers</a> <br />WEBDRIVERMANAGER: <a href="https://bonigarcia.dev/webdrivermanager/" target="_blank" rel="noreferrer noopener">https://bonigarcia.dev/webdrivermanager/</a></p>

</div>
</div>
<div id="faq-question-1689152127734" class="rank-math-list-item">
<h3 class="rank-math-question ">Selenium Grid i kontenery Docker  </h3>
<div class="rank-math-answer ">

<p><a href="https://www.selenium.dev/documentation/grid/" target="_blank" rel="noreferrer noopener">https://www.selenium.dev/documentation/grid/</a> <br /><a href="https://www.selenium.dev/documentation/overview/components/" target="_blank" rel="noreferrer noopener">https://www.selenium.dev/documentation/overview/components/</a> <br /><a href="https://github.com/SeleniumHQ/docker-selenium" target="_blank" rel="noreferrer noopener">https://github.com/SeleniumHQ/docker-selenium</a>  <br /><a href="https://hub.docker.com/r/selenium/standalone-chrome" target="_blank" rel="noreferrer noopener">https://hub.docker.com/r/selenium/standalone-chrome</a>  <br /><a href="https://www.browserstack.com/guide/run-selenium-tests-in-docker" target="_blank" rel="noreferrer noopener">https://www.browserstack.com/guide/run-selenium-tests-in-docker</a>  <br /><a href="https://qaautomation.expert/2022/04/12/run-selenium-tests-in-gitlab-ci-cd/" target="_blank" rel="noreferrer noopener">https://qaautomation.expert/2022/04/12/run-selenium-tests-in-gitlab-ci-cd/</a> </p>

</div>
</div>
</div>
</div>


<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/selenium-python-vs-selenium-java/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Testy akceptacyjne użytkownika (UAT) – dlaczego są ważne? </title>
		<link>https://nearshore-it.eu/pl/artykuly/uat-user-acceptance-testing/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/uat-user-acceptance-testing/#respond</comments>
		
		<dc:creator><![CDATA[Paweł Jaroszek]]></dc:creator>
		<pubDate>Thu, 15 Jun 2023 08:48:44 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[QA]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/uat-user-acceptance-testing/</guid>

					<description><![CDATA[Testy akceptacyjne (UAT) pojawiają się na końcu procesu wytwarzania oprogramowania i stanowią ważną jego część. Z tego artykułu dowiesz się, jaki jest przykładowy proces testów akceptacyjnych, jakie są rodzaje testów akceptacyjnych i dlaczego warto oprzeć się pokusie pominięcia tego typu testów w projekcie.]]></description>
										<content:encoded><![CDATA[
<p>Jako (przyszły) inżynier automatyzacji testów celujący w pracę z Selenium w pewnym momencie dotrzesz do punktu, w którym trzeba będzie podjąć decyzję, w którą stronę iść oraz czego używać do testowania. Świat IT i QA szybko się zmienia, a niektóre z narzędzi i języków, które były kiedyś popularne, dziś już takie nie są. Jak w każdym przypadku, istnieje wiele czynników, które mogą odegrać rolę w podjęciu decyzji. W tym artykule postaram się ułatwić ci to zadanie, przedstawiając zalety i wady łączenia Selenium z dwoma obecnie najpopularniejszymi językami programowania: Javą i Pythonem.</p>



<div class="table-of-contents">
    <p class="title">Przejdź do: </p>
    <ol>
                    <li><a href="#Automatyzacja-testów:-jakie-mamy-opcje?-Java-i-Python">1.  Automatyzacja testów: jakie mamy opcje? Java i Python  </a></li>
                    <li><a href="#Język-programowania-czy-język-skryptowy?">2.  Język programowania czy język skryptowy? </a></li>
                    <li><a href="#Czego-łatwiej-się-nauczyć:-Javy-czy-Pythona?u002du002d">3.  Czego łatwiej się nauczyć: Javy czy Pythona?  </a></li>
                    <li><a href="#Automatyzacja-testów-–-jakie-są-opcje?-">4.  Automatyzacja testów – jakie są opcje? </a></li>
                    <li><a href="#Czym-jest-Selenium-WebDriver?-">5.  Czym jest Selenium WebDriver? </a></li>
                    <li><a href="#Selenium-i-Python-">6.  Selenium i Python </a></li>
                    <li><a href="#Selenium-i-Java-">7.  Selenium i Java </a></li>
                    <li><a href="#Która-opcja-jest-lepsza-dla-testów-automatycznych-(Selenium-z-Pythonem-czy-Selenium-z-Javą)?u002du002d">8.  Która opcja jest lepsza dla testów automatycznych (Selenium z Pythonem czy Selenium z Javą)?  </a></li>
                    <li><a href="#Jak-wykonać-skrypt-Selenium-w-Pythonie?-">9.  Jak wykonać skrypt Selenium w Pythonie? </a></li>
                    <li><a href="#Jak-zainstalować-Selenium-z-PIP?-">10.  Jak zainstalować Selenium z PIP? </a></li>
                    <li><a href="#Automatyzacja-testów-–-podsumowanieu002du002d">11.  Automatyzacja testów – podsumowanie  </a></li>
                    <li><a href="#FAQ-Starting-points-for-Selenium-with-Java-or-Python-">12.  FAQ</a></li>
            </ol>
</div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Automatyzacja-testów:-jakie-mamy-opcje?-Java-i-Python">Automatyzacja testów: jakie mamy opcje? Java i Python</h2>



<p>Każdy z tych języków ma ugruntowaną pozycję, jest niezależny od platformy, zorientowany obiektowo i posiada dużą, wspierającą społeczność użytkowników. Jeśli chodzi o wybór powiązań (ang. bindings) języka Selenium dla Javy i Pythona, powinieneś najpierw zrozumieć kilka kluczowych różnic pomiędzy nimi.</p>



<p>Selenium obsługuje szeroką gamę języków programowania do automatyzacji testów. W tym kontekście Java i Python są najlepszymi kandydatami (i konkurentami) do połączenia z Selenium.</p>



<h2 class="wp-block-heading" id="Język-programowania-czy-język-skryptowy?">Język programowania czy język skryptowy?</h2>



<p>Jednym z głównych pytań, które mogą przyjść ci do głowy, porównując Javę i Pythona, może być: „Czy Python i Java to języki programowania, czy języki skryptowe?”.</p>



<p>Zasadniczo wszystkie języki skryptowe są uważane za języki programowania. Główną różnicą między nimi jest to, że języki programowania są <strong>kompilowane</strong>, podczas gdy języki skryptowe są interpretowane. Języki skryptowe są wolniejsze niż języki programowania i pozostają zazwyczaj za nimi w tyle.</p>



<p>Szybkie porównanie znajdziesz tutaj: <a href="https://itvoyagers.in/interpreter-vs-compiler/" target="_blank" data-type="URL" data-id="https://itvoyagers.in/interpreter-vs-compiler/" rel="noreferrer noopener">Interpreter vs compiler</a></p>



<h4 class="wp-block-heading">Python</h4>



<p>Python można nazwać zarówno językiem skryptowym, jak i językiem programowania, ponieważ <strong>działa zarówno jako kompilator, jak i interpreter.</strong> Standardowy Python może skompilować kod Pythona do kodów bajtowych, a następnie zinterpretować go tak jak Java i C.</p>



<p>„Jednak biorąc pod uwagę historyczny związek między językiem programowania ogólnego przeznaczenia a językiem skryptowym, bardziej właściwe byłoby stwierdzenie, że Python jest językiem programowania, który dobrze działa również jako język skryptowy”.</p>



<p><strong>Interpreter </strong>to warstwa oprogramowania, która działa jako pomost między programem a sprzętem systemowym, aby utrzymać działanie kodu. Interpreter Pythona to aplikacja odpowiedzialna za uruchamianie skryptów Pythona.</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.07.12_graphic_1.png" alt="Selenium Python" class="wp-image-10920" title="Testy akceptacyjne użytkownika (UAT) – dlaczego są ważne?  3"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading">Java&nbsp;</h4>



<p>Java jest na ogół szybsza i bardziej wydajna niż Python, ponieważ jest językiem <strong>skompilowanym</strong>. Jako język interpretowany, Python z kolei ma prostszą, bardziej zwięzłą składnię. Może pełnić tę samą funkcję co Java, przy użyciu mniejszej liczby linijek kodu. W Javie typy danych zmiennych powinny być zadeklarowane przed ich użyciem, w przeciwieństwie do Pythona. Zdecyduj, co bardziej ci odpowiada.&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.07.12_graphic_2.png" alt="Java Python" class="wp-image-10922" style="width:766px;height:402px" title="Testy akceptacyjne użytkownika (UAT) – dlaczego są ważne?  4"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Czego-łatwiej-się-nauczyć:-Javy-czy-Pythona?--">Czego łatwiej się nauczyć: Javy czy Pythona?&nbsp;&nbsp;</h2>



<p>Kolejne pytanie, które może się zrodzić (zwłaszcza gdy dopiero zaczynasz przygodę z programowaniem) brzmi: jak szybko mogę nauczyć się Javy vs. Pythona?&nbsp;</p>



<p>Tu nie ma wątpliwości: Python jest zwycięzcą. Jak wspomniałem, jego składnia jest krótsza i prostsza. Prototypowanie w Javie jest bardziej złożone – przykładowo, obciąża kod dodatkowymi deklaracjami i ograniczeniami. Wybierz Pythona, jeśli nie masz wiele czasu na naukę.&nbsp;</p>



<p>Oto lista kluczowych czynników, które trzeba wziąć pod uwagę przed podjęciem decyzji:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Oferty pracy: </strong>wciąż więcej ofert pracy jest w Javie&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>Zmiana pracy / migracja: </strong>dzięki skryptowaniu, łatwiej jest w przypadku Pythona, jeśli np. myślisz o kulturze DevOps&nbsp;&nbsp;</li>



<li><strong>Programowanie zorientowane obiektowo:</strong> zarówno Python, jak i Java polegają na programowaniu obiektowym, więc znajomość jednego z tych języków stanowi dobry punkt wyjścia do nauki drugiego&nbsp;</li>



<li><strong>Niezależne od platformy:</strong> zarówno binaria Pythona, jak i Javy (kody bajtowe) po wygenerowaniu mogą być wykonywane na dowolnych obsługiwanych platformach dzięki własnym maszynom wirtualnym (odpowiednio PVM i JVM)&nbsp;</li>



<li><strong>Prostota:</strong> Python jest łatwiejszy w użyciu dzięki prostszej składni&nbsp;&nbsp;</li>



<li><strong>Wykonanie: </strong>jako reprezentacja języka skryptowego Python ma możliwość bezpośredniego uruchamiania kodu skryptu za pomocą <a href="https://docs.python.org/3/tutorial/interpreter.html" target="_blank" rel="noreferrer noopener">interpretera</a> zamiast bezpośredniego uruchamiania kompilatora (np. Javac dla Java)&nbsp;</li>



<li><strong>Wydajność / szybkość wykonania: </strong>Java ma tu przewagę, ponieważ jest szybsza (można skompilować ją JIT, aby była bardziej wydajna)&nbsp;</li>



<li><strong>Popularność / wsparcie: </strong>Java wygrywa w tym zestawieniu jako popularne rozwiązanie, które ma bardzo dużą i wspierającą społeczność programistów&nbsp;</li>



<li><strong>Python jest językiem statycznie typowanym</strong> (sprawdza typ w czasie wykonywania, co oznacza, że twój kod może w ostatniej chwili zawieść)&nbsp;</li>



<li><strong>Java jest językiem dynamicznie typowanym</strong> (sprawdza typ w czasie kompilacji, co oznacza, że wychwytujesz problemy w swoim kodzie wcześniej w procesie tworzenia oprogramowania)&nbsp;</li>



<li><strong>Rozszerzalność</strong>: ponieważ Java jest bardziej popularna, na rynku jest dostępne więcej wtyczek, interfejsów API, frameworków i bibliotek niż w przypadku Pythona&nbsp;</li>
</ul>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Automatyzacja-testów-–-jakie-są-opcje?-">Automatyzacja testów – jakie są opcje?&nbsp;</h2>



<p>Selenium zaspokaja określoną potrzebę w świecie automatyzacji testów. Jest tylko dla przeglądarek. Jeśli chcesz szybko rozpocząć automatyzację swoich przypadków testowych, zaprzyjaźnij się z <a href="https://www.selenium.dev/selenium-ide" target="_blank" rel="noreferrer noopener">Selenium IDE</a>. Pozwala ono szybko i łatwo rozpocząć automatyzację testów dzięki opcji nagrywania.&nbsp;</p>



<p>Kroki testowe wykonywane w przeglądarce są bezpośrednio przekształcane w zestaw poleceń dzięki <a href="https://www.tutorialspoint.com/what-is-selenese" target="_blank" data-type="URL" data-id="https://www.tutorialspoint.com/what-is-selenese" rel="noreferrer noopener">Selenese </a>(to wbudowany język Selenium IDE). To bardzo ułatwia zadanie. Ponadto, po zapisaniu testów w zestawie <a href="https://www.javatpoint.com/selenium-ide-commands" target="_blank" rel="noreferrer noopener">poleceń Selenese</a>, można je agregować w pakiety testowe i ostatecznie eksportować do preferowanych powiązań Selenium (np.: Java, Python itp.).&nbsp;</p>



<p><strong>Selenese i Selenium IDE</strong> to dobry początek, ale im bardziej będziesz się zagłębiać w temat automatyzacji aplikacji internetowych, tym wyraźniej dostrzeżesz ich ograniczenia.&nbsp;</p>



<p>Aby solidnie przetestować nowoczesną aplikację internetową z jej dynamicznie zmieniającą się treścią (np. przy użyciu technologii <strong>AJAX czy JS</strong>), zaczniesz szukać bardziej zaawansowanych opcji. Tutaj z pomocą przychodzi&nbsp; <strong>Selenium WebDriver</strong> wraz z powiązaniami językowymi Selenium. Selenium WebDriver jest często używany jako baza do testowania aplikacji internetowych.&nbsp;&nbsp;</p>



<p><strong>Zgodnie z sylabusem A4Q Selenium 4 Tester:&nbsp;</strong></p>



<p>„Selenium, gdy jest używane do testowania aplikacji internetowych, potrzebuje pewnych frameworków testowych. Silnik Selenium, jako samodzielne narzędzie, wystawia TAE tylko swoje natywne API jako metody lub funkcje. Inżynier automatyzacji testów musi następnie zaprogramować środowisko testowe, aby użyć tych interfejsów API do przeprowadzenia wymaganych testów. Framework testowy można opracować od podstaw lub&nbsp; wykorzystać już istniejące. <strong>Selenium obsługuje wiele frameworków testowych w różnych językach, np.:&nbsp;</strong>&nbsp;</p>



<ul class="wp-block-list">
<li>dla Javy: <a href="https://selenide.org/" target="_blank" rel="noreferrer noopener">Selenide</a>&nbsp;&nbsp;</li>



<li>dla Pythona: <a href="https://pypi.org/project/selene/" target="_blank" rel="noreferrer noopener">Selene</a>&nbsp;&nbsp;</li>
</ul>



<p></p>



<p>Niezależnie od tego, czy korzystasz z własnych frameworków, czy nie, musisz w jakiś sposób sterować wykonywaniem testów. Wielu inżynierów korzysta z bibliotek testów jednostkowych do prowadzenia swoich testów (test runnerów).&nbsp;</p>



<p>Niektóre z nich, takie jak <a href="https://testng.org/" target="_blank" rel="noreferrer noopener">TestNG</a> lub <a href="https://docs.pytest.org/" target="_blank" rel="noopener">Pytest</a>, oprócz podstawowego zastosowania w testach jednostkowych pozwalają tworzyć testy funkcjonalne wyższego poziomu&nbsp; (funkcjonalne, komponentowe, integracyjne, end-to-end itp.).&nbsp;</p>



<h4 class="wp-block-heading">Dla Pythona&nbsp;</h4>



<p>Najprostszym przypadkiem jest użycie standardowej biblioteki testów jednostkowych Pythona. Alternatywnie możesz użyć bardzo popularnego <a href="https://docs.pytest.org/" target="_blank" rel="noreferrer noopener">Pytest.</a>&nbsp;&nbsp;</p>



<h4 class="wp-block-heading">Dla Javy&nbsp;</h4>



<p>Możesz użyć bibliotek xUnit (np. JUnit 4/5) lub <a href="https://www.bugraptors.com/blog/junit-vs-testng" target="_blank" rel="noreferrer noopener">TestNG</a>.&nbsp;&nbsp;</p>



<p>Po zaznajomieniu się z uruchamianiem testów lokalnie za pomocą wybranej przeglądarki możesz zrobić krok naprzód i skonfigurować <a href="https://www.selenium.dev/documentation/grid/" target="_blank" rel="noreferrer noopener">siatkę</a> przeglądarek do zdalnego uruchamiania testów.&nbsp;&nbsp;</p>



<p>W ten sposób testy można uruchamiać na różnych przeglądarkach i kilku systemach operacyjnych na wielu komputerach w trybie równoległym. Jeśli masz sporą konfigurację, możesz przeprowadzić testy regresji w krótkim czasie (w porównaniu z czasem bez <a href="https://www.selenium.dev/documentation/overview/components/" target="_blank" rel="noreferrer noopener">Selenium</a> Grid).&nbsp;</p>



<p>Następnie możesz iść o jeszcze jeden krok dalej i zintegrować swoje testy z CI/CD pipeline (np.: uruchomić <a href="https://qaautomation.expert/2022/04/12/run-selenium-tests-in-gitlab-ci-cd/" target="_blank" rel="noreferrer noopener">Selenium Tests w GitLab CI/CD</a> lub Jenkins).&nbsp;</p>



<p>Pamiętaj, że masz możliwość skorzystania z dobrodziejstw konteneryzacji, np. Dockera, aby utworzyć różne obrazy do automatycznych testów interfejsu użytkownika.&nbsp;</p>



<p>W ten sposób możesz przygotować oddzielną maszynę wirtualną dla dowolnej kombinacji środowiska systemu operacyjnego / przeglądarki dla <a href="https://en.wikipedia.org/wiki/System_under_test" target="_blank" rel="noreferrer noopener">SUT</a> (System Under Test) / AUT (Application Under Test).&nbsp;</p>



<p>CI/CD odgrywa kluczową rolę w tworzeniu cykli życia oprogramowania, w których nowe funkcje są ciągle aktualizowane maksymalnie szybko i wydajnie. Dzięki temu użytkownicy końcowi mają dostęp do nowych funkcji bez konieczności pobierania aktualizacji oprogramowania, co zapewnia im bezproblemową obsługę.&nbsp;&nbsp;</p>



<p>Biorąc pod uwagę krótki czas trwania cyklu wydawania oprogramowania, testy muszą być skalowane, aby dostarczane oprogramowanie było wolne od błędów we wspomnianym przedziale czasowym. W tym miejscu Selenium odgrywa kluczową rolę, umożliwiając automatyzację testów w CI/CD pipeline.&nbsp;</p>



<p>Dzięki automatyzacji z Selenium można wykonywać testy równoległe w wymaganej skali, a <a href="https://github.com/SeleniumHQ/docker-selenium" target="_blank" rel="noreferrer noopener">Dockerem</a>, z pomocą kontenerów, pomaga to utrzymać środowisko testowe w dobrym stanie.&nbsp;&nbsp;</p>



<p><strong>Przeczytaj także</strong>: <strong><a href="https://nearshore-it.eu/pl/artykuly/uat-user-acceptance-testing/" target="_blank" data-type="URL" data-id="https://nearshore-it.eu/pl/artykuly/uat-user-acceptance-testing/" rel="noreferrer noopener">Testy akceptacyjne użytkownika (UAT) – dlaczego są&nbsp;ważne?&nbsp;</a></strong></p>



<h2 class="wp-block-heading" id="Czym-jest-Selenium-WebDriver?-">Czym jest Selenium WebDriver?&nbsp;</h2>



<p>Najbardziej wyczerpującym źródłem wiedzy w tym temacie jest <a href="https://www.selenium.dev/documentation/webdriver/" target="_blank" rel="noreferrer noopener">strona Selenium WebDriver</a>:&nbsp;&nbsp;</p>



<p>„Selenium WebDriver odnosi się zarówno do powiązań językowych, jak i implementacji kodu sterującego danej przeglądarki. Powszechnie używa się po prostu określenia <strong>WebDriver</strong>”.&nbsp;</p>



<p>lub cytując sylabus A4Q:&nbsp;&nbsp;</p>



<p>„Selenium WebDriver, jak sama nazwa wskazuje, współdziała z przeglądarką w taki sam sposób, jak zrobiłby to prawdziwy użytkownik. WebDriver to kompleksowe narzędzie do kompilacji testów dla aplikacji internetowych, które jest również często określane jako<strong> Selenium WebDriver</strong>”.&nbsp;</p>



<p>Z architektonicznego punktu widzenia Selenium wszystkie komponenty są odpowiednio zwizualizowane na oficjalnej <a href="https://www.selenium.dev/documentation/overview/components/" target="_blank" rel="noreferrer noopener">stronie dokumentacji.</a>&nbsp;</p>



<p>Można powiedzieć, że WebDriver pomaga nam naśladować interakcje użytkownika / przeglądarki i dlatego jest tak pomocne w automatyzacji testów. WebDriver kontroluje przeglądarkę za pomocą właściwych dla niej sterowników, które są zwykle tworzone przez dostawców przeglądarek (np. Google dla Chrome lub Mozilla dla Firefox).&nbsp;</p>



<p>Cała komunikacja jest dwukierunkowa i zgodna z następującymi protokołami:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>dla Selenium 3: </strong><a href="https://www.selenium.dev/documentation/legacy/json_wire_protocol/" target="_blank" rel="noreferrer noopener">JSON Wire Protocol</a> prez HTTP (komunikacja tłumaczona)&nbsp;</li>



<li><strong>dla Selenium 4:</strong> <a href="https://w3c.github.io/webdriver/webdriver-spec.html" target="_blank" rel="noreferrer noopener">W3C WebDriver Protocol</a> (komunikacja natywna). Zobacz więcej na stronie <a href="https://www.w3.org/TR/webdriver/" target="_blank" rel="noreferrer noopener">W3C</a>&nbsp;</li>
</ul>



<p></p>



<p>Dzięki protokołowi W3C wprowadzonemu w Selenium 4 mamy bezpośredni transfer informacji między klientem a serwerem. Tak więc, jeśli nadal używasz Selenium 3 (WebDriver) i wahasz się, czy zacząć korzystać z wyższej wersji, koniecznie sprawdź informacje na stronie: <a href="https://www.selenium.dev/documentation/webdriver/getting_started/upgrade_to_selenium_4/" target="_blank" rel="noreferrer noopener">Upgrade to Selenium 4.</a>&nbsp;&nbsp;&nbsp;</p>



<p>Minimalne wymagane wersje to<strong> Java w wersji 8 i Python w wersji 3.7</strong>&nbsp;</p>



<h2 class="wp-block-heading" id="Selenium-i-Python-">Selenium i Python&nbsp;</h2>



<p>Jeśli wybrałeś tę drogę i jesteś początkujący, wypróbuj Selenium IDE i wygeneruj swój kod Pythona za pomocą funkcji eksportu.&nbsp;&nbsp;&nbsp;</p>



<p>Gdy będziesz już bardziej obeznany z Selenium IDE, przygotuj pełne środowisko programistyczne do automatyzacji testów Selenium / Python.&nbsp;</p>



<p>Przygotuj:&nbsp;</p>



<ul class="wp-block-list">
<li>IDE (<a href="https://www.jetbrains.com/pycharm/" target="_blank" rel="noreferrer noopener">PyCharm</a>, <a href="https://code.visualstudio.com/" target="_blank" rel="noreferrer noopener">Visual Studio Code</a> lub <a href="https://www.jetbrains.com/aqua/" target="_blank" rel="noreferrer noopener">Aqua</a>)&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><a href="https://www.python.org/" target="_blank" rel="noreferrer noopener">Python</a>&nbsp;</li>



<li><a href="https://pypi.org/project/pip/" target="_blank" rel="noreferrer noopener">PIP</a> (Package Installer for Python)&nbsp;</li>



<li>Narzędzie do budowania <a href="https://pipenv.pypa.io/en/latest/" target="_blank" rel="noreferrer noopener">Pipenv</a> ( PIP + <a href="https://docs.python.org/3/library/venv.html" target="_blank" rel="noreferrer noopener">Venv</a>/<a href="https://virtualenv.pypa.io/en/stable/" target="_blank" rel="noreferrer noopener">Virtualenv</a>, <a href="https://python-poetry.org/" target="_blank" rel="noreferrer noopener">Poetry</a> lub <a href="https://bazel.build/" target="_blank" rel="noreferrer noopener">Bazel</a>)&nbsp;</li>



<li><a href="https://pypi.org/project/selenium/" target="_blank" rel="noreferrer noopener">Powiązania Selenium z Pythonem</a>&nbsp;</li>



<li><a href="https://www.selenium.dev/documentation/webdriver/browsers/" target="_blank" rel="noreferrer noopener">Sterowniki przeglądarek dla Selenium</a> (<a href="https://chromedriver.chromium.org/downloads" target="_blank" rel="noreferrer noopener">Chrome</a>, <a href="https://github.com/mozilla/geckodriver/releases" target="_blank" rel="noreferrer noopener">Firefox</a>, <a href="https://developer.apple.com/documentation/webkit/about_webdriver_for_safari" target="_blank" rel="noreferrer noopener">Safari</a>, <a href="https://github.com/operasoftware/operachromiumdriver" target="_blank" rel="noreferrer noopener">Opera</a>, <a href="https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/" target="_blank" rel="noreferrer noopener">Edge</a> or <a href="https://pypi.org/project/webdriver-manager/" target="_blank" rel="noreferrer noopener">webdriver-manager</a>/<a href="https://www.selenium.dev/blog/2022/introducing-selenium-manager/" target="_blank" rel="noreferrer noopener">SeleniumManager*</a>)</li>



<li>Test Runner (<a href="https://docs.python.org/3/library/unittest.html" target="_blank" rel="noreferrer noopener">Unittest</a> lub <a href="https://docs.pytest.org/" target="_blank" rel="noreferrer noopener">Pytest</a>)&nbsp;</li>
</ul>



<p><br>*Selenium Manager jest dostępny od wersji 4.6 (Beta)</p>





<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Selenium-i-Java-">Selenium i Java&nbsp;</h2>



<p>Jeśli wybrałeś tę opcję i jesteś początkujący, wypróbuj wtyczkę <a href="https://www.selenium.dev/selenium-ide/" target="_blank" rel="noreferrer noopener">Selenium IDE</a> dla Chrome lub Firefox i wygeneruj kod Java za pomocą funkcji eksportu:&nbsp;</p>



<p>Gdy już nabędziesz doświadczenia, przygotuj pełne środowisko programistyczne do automatyzacji testów Selenium / Java.&nbsp;</p>



<h4 class="wp-block-heading">Przygotuj:&nbsp;</h4>



<ul class="wp-block-list">
<li>IDE (<a href="https://www.jetbrains.com/idea/" target="_blank" rel="noreferrer noopener">IDEA</a>, <a href="https://code.visualstudio.com/" target="_blank" rel="noreferrer noopener">Visual Studio Code</a> lub <a href="https://www.jetbrains.com/aqua/" target="_blank" rel="noreferrer noopener">Aqua</a>)&nbsp;</li>



<li><a href="https://www.oracle.com/java/technologies/downloads/" target="_blank" rel="noreferrer noopener">Java (JDK)</a>&nbsp;</li>



<li>Narzędzie do budowania (<a href="https://maven.apache.org/" target="_blank" rel="noreferrer noopener">Maven</a> lub <a href="https://gradle.org/" target="_blank" rel="noreferrer noopener">Gradle</a>)&nbsp;</li>



<li><a href="https://github.com/SeleniumHQ/selenium/releases/" target="_blank" rel="noreferrer noopener">Powiązania z Selenium w Javie</a>&nbsp;</li>



<li><a href="https://www.selenium.dev/documentation/webdriver/browsers/" target="_blank" rel="noreferrer noopener">Sterowniki przeglądarek dla Selenium</a> (<a href="https://chromedriver.chromium.org/downloads" target="_blank" rel="noreferrer noopener">Chrome</a>, <a href="https://github.com/mozilla/geckodriver/releases" target="_blank" rel="noreferrer noopener">Firefox</a>, <a href="https://developer.apple.com/documentation/webkit/about_webdriver_for_safari" target="_blank" rel="noreferrer noopener">Safari</a>, <a href="https://github.com/operasoftware/operachromiumdriver/releases" target="_blank" rel="noreferrer noopener">Opera</a>, <a href="https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/" target="_blank" rel="noreferrer noopener">Edge</a> or <a href="https://bonigarcia.dev/webdrivermanager/" target="_blank" rel="noreferrer noopener">WebDriverManager</a>/<a href="https://www.selenium.dev/documentation/selenium_manager/" target="_blank" rel="noreferrer noopener">SeleniumManager*</a>)&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li>Test Runner (<a href="https://junit.org/junit4" target="_blank" rel="noopener">JUNIT4</a> / <a href="https://junit.org/junit5/" target="_blank" rel="noopener">JUNIT5</a> lub <a href="https://testng.org/doc/" target="_blank" rel="noreferrer noopener">TestNG</a>)&nbsp;&nbsp;</li>
</ul>



<p><br>*Selenium Manager jest dostępny od wersji 4.6 (Beta)</p>



<h2 class="wp-block-heading" id="Która-opcja-jest-lepsza-dla-testów-automatycznych-(Selenium-z-Pythonem-czy-Selenium-z-Javą)?--">Która opcja jest lepsza dla testów automatycznych (Selenium z Pythonem czy Selenium z Javą)?&nbsp;&nbsp;</h2>



<p>Jeśli jesteś całkowicie „zielony” i chcesz sprawdzić możliwości programowania czy automatyzacji za pomocą Selenium z Javą lub Pythonem, proponuję, abyś zaczął od skorzystania z <a href="https://www.selenium.dev/selenium-ide/" target="_blank" rel="noreferrer noopener">Selenium IDE.</a>&nbsp;</p>



<p>Selenium IDE jest dostarczany w formie dodatku do Chrome, Firefox i Edge (wersja 3.x). Umożliwia wygenerowanie kodu Javy / Pythona za pomocą funkcji eksportu. To bardzo proste – zwyczajnie rejestrujesz swoje działania w przeglądarce. Kod jest następnie generowany za pomocą funkcji eksportu do ulubionego języka. W momencie pisania tego artykułu (czerwiec 2023) możliwe było nawet pobranie samodzielnej wersji (<strong>4 alpha)</strong> Selenium IDE na kilka platform (np.: <strong>Windows</strong>, <strong>MacOS</strong>).&nbsp;</p>



<p>Dowiedz się więcej o <a href="https://github.com/SeleniumHQ/selenium-ide/releases/" target="_blank" rel="noreferrer noopener">najnowszych wersjach Selenium.</a>&nbsp;</p>



<p>Z punktu widzenia automatyzacji, a zwłaszcza integracji CI/CD, wygląda na to, że lepiej sprawdzi się tu duet Selenium i Java. Dobrze wpisuje się w powyższy proces – zazwyczaj natywnie i łatwo dzięki bardzo dobrej integracji z narzędziami takimi jak<strong> Jenkins / Maven / Gradle.</strong>&nbsp;</p>



<p>Nie oznacza to jednak, że nie można tego osiągnąć za pomocą Pythona. Będzie to co prawda bardziej męczące i wymaga użycia niektórych wtyczek. Ale przypomnijmy: <strong>Python oznacza łatwe programowanie i większą czytelność. </strong>Jeśli więc nie masz żadnego zaplecza programistycznego w obszarze Javy i Pythona, może kusić cię wykorzystanie drugiego z tych języków.&nbsp;</p>



<p><p>Jednym z ważnych punktów w procesie rozwoju automatyzacji testów w Selenium jest debugowanie testów. Wiele przeglądarek udostępnia „<strong>DevTools</strong>” – zestaw narzędzi zintegrowanych z przeglądarką, których programiści mogą używać do debugowania aplikacji internetowych i sprawdzania wydajności swoich stron.&nbsp;</p>
<!----></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/uat-user-acceptance-testing/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Frameworki do automatyzacji testów. Wprowadzenie do Atata</title>
		<link>https://nearshore-it.eu/pl/artykuly/test-automation-framework/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/test-automation-framework/#respond</comments>
		
		<dc:creator><![CDATA[Łucja Nowińska]]></dc:creator>
		<pubDate>Fri, 12 May 2023 05:17:00 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[QA]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/test-automation-framework/</guid>

					<description><![CDATA[Automatyzacja to coraz bardziej doceniane podejście do testowania oprogramowania. Nie tylko pozwala zaoszczędzić czas i koszty w projektach, ale w dłuższej perspektywie – dostarczyć klientowi produkt lepszej jakości. Decydując się na automatyzację, warto dobrze przemyśleć wybór narzędzi, w tym frameworków testowych. W tym artykule znajdziesz przegląd najważniejszych typów frameworków do automatyzacji testów. Wezmę też pod lupę wciąż nie tak bardzo znane na rynku narzędzie Atata, bazujące na Selenium WebDriver, i zestawię jego możliwości z tymi, jakie oferuje czyste Selenium.]]></description>
										<content:encoded><![CDATA[
<div class="table-of-contents">
    <p class="title">Spis treści:</p>
    <ol>
                    <li><a href="#Kiedy-i-dlaczego-automatyzować-testy-oprogramowania?">1.  Kiedy i dlaczego automatyzować testy oprogramowania?</a></li>
                    <li><a href="#Atata-automation-framework">2.  Atata automation framework</a></li>
                    <li><a href="#Atata-vs-Selenium">3.  Atata vs Selenium</a></li>
                    <li><a href="#Który-framework-do-automatyzacji-testów-będzie-najlepszy-dla-mojego-projektu?">4.  Który framework do automatyzacji testów będzie najlepszy dla mojego projektu?</a></li>
                    <li><a href="#Podsumowanie">5.  Podsumowanie</a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="Kiedy-i-dlaczego-automatyzować-testy-oprogramowania?">Kiedy i dlaczego automatyzować testy oprogramowania?</h2>



<h3 class="wp-block-heading">Czym jest automatyzacja?</h3>



<p>Zanim skupimy się na temacie frameworka, jakim jest Atata, chciałabym słowem wstępu przypomnieć, czym w ogóle jest automatyzacja testów oprogramowania i dlaczego warto się nią zainteresować. Wokół tego tematu narosło bowiem wiele mitów.</p>



<p>Testowanie to bardzo istotny element procesu wytwarzania oprogramowania. Jednym z podejść do tego zagadnienia jest automatyzacja, czyli wykorzystanie specjalnych narzędzi i frameworków, które umożliwiają programowanie testów i ich automatyczne wykonanie bez dalszej ingerencji człowieka.</p>



<h3 class="wp-block-heading">Korzyści automatyzacji</h3>



<p><a href="https://nearshore-it.eu/pl/artykuly/automatyzacja-testow-obalamy-mity/" data-type="jpro">Automatyzacja </a>tych procesów może przynieść niezliczone korzyści, w tym jedną z najważniejszych – oszczędność czasu i kosztów. Ponadto testy automatyczne są bardziej powtarzalne i dokładniejsze niż testy przeprowadzane ręcznie, co przekłada się na ich niezawodność i skuteczność.</p>



<h3 class="wp-block-heading">Scenariusze i przypadki testowe a automatyzacja</h3>



<p>Warto rozważyć opcję automatyzacji testów w naszym projekcie również z powodu możliwości przeprowadzania testów o skomplikowanych scenariuszach i w wielu środowiskach jednocześnie, co mogłoby stanowić wyzwanie podczas ręcznego realizowania scenariusza testowego na co dzień. Możliwe jest przeprowadzanie testów na różnych platformach, w różnych konfiguracjach sprzętowych i sieciowych, co byłoby trudne lub wręcz niemożliwe do osiągnięcia w przypadku testów manualnych.</p>



<p>Tworzenie przypadków testowych w zautomatyzowanej formie zapewnia ich powtarzalność, a co za tym idzie, podnosi ich skuteczność w wykrywaniu defektów. Właśnie dlatego automatyzacja jest szczególnie użyteczna w testowaniu funkcjonalności krytycznych dla aplikacji. Warto jednak pamiętać, że rzeczywistość testowa nie jest zero-jedynkowa i jak wszystko ma swoje plusy i minusy. Jakie są zatem ciemne strony automatyzacji?</p>



<p><strong>Przeczytaj także: <a href="https://nearshore-it.eu/pl/artykuly/scenariusze-testowe/">Jak pisać scenariusze testowe? Jak scenariusz testowy pomaga na późniejszych etapach pracy rozwoju oprogramowania? Czym różnią się scenariusze testowe i przypadki testowe? </a></strong></p>



<h3 class="wp-block-heading">Ciemne strony automatyzacji</h3>



<p>Automatyzacja testów może być fantastycznym rozwiązaniem w wielu projektach, lecz nie jest uniwersalnym rozwiązaniem. W niektórych przypadkach testy manualne mogą być dużo lepszą, bardziej efektywną lub nawet jedyną dostępną opcją. Dlatego przed podjęciem decyzji o automatyzacji testów warto dokładnie przeanalizować specyfikę projektu, potrzeby, które się z nim wiążą, oraz wszelkie dostępne narzędzia i frameworki.</p>



<p>Nie można też zapominać o czasie, który należy zainwestować w stworzenie zautomatyzowanych przypadków testowych. Wymaga to wielu godzin pracy, tworzenia konfiguracji oraz rozwiązywania problemów, które nie występują podczas ręcznego testowania oprogramowania. Jest to proces, który <strong>z początku może rozwijać się bardzo powoli, a miarodajne wyniki nieraz są widoczne dopiero po włożeniu w projekt ogromu pracy.</strong> Nie do pominięcia jest również potrzeba zatrudnienia testera automatyzującego, który będzie zdolny do zaprojektowania całego systemu tak, aby testy były stabilne i zgodne z dobrymi praktykami programowania.</p>



<h2 class="wp-block-heading">Typy frameworków do automatyzacji testów</h2>



<p>Frameworki do automatyzacji to narzędzia, które ułatwiają to zadanie, dostarczając rozwiązań dla wielu powszechnych problemów. W zależności od potrzeb i specyfiki projektu możemy wybierać spośród różnych typów frameworków. Poniżej krótki opis wybranych z nich.</p>



<h3 class="wp-block-heading">Library Architecture Framework</h3>



<p>Library Architecture Framework (LAF) to jedna z popularnych technik automatyzacji testów oprogramowania. W ramach tej metodyki wykorzystywane są biblioteki z gotowymi funkcjami testowymi, które mogą być wywoływane w kodzie testu. <strong>LAF jest często stosowany w przypadkach, gdy testy są skomplikowane i wymagają wielu etapów</strong>, a także w sytuacjach, gdy testy muszą działać na różnych systemach operacyjnych i przeglądarkach internetowych.</p>



<p>Ten typ frameworka sprawdza się zwłaszcza w przypadku testów niskiego poziomu, takich jak testy jednostkowe.</p>



<h3 class="wp-block-heading">Module Based Testing Framework (MBTF)</h3>



<p>To rodzaj frameworka do automatyzacji testów oprogramowania, który opiera się na modularnym podejściu do projektowania testów. W tym modelu testy są projektowane w sposób modułowy, a każdy moduł obejmuje jedną funkcjonalność lub przypadki testowe związane z jednym modułem aplikacji<strong>. W MBTF moduły testowe są projektowane w taki sposób, by były uniwersalne, mogły być wykorzystywane wielokrotnie dla różnych aplikacji i systemów. </strong>Po stworzeniu zestawu modułów można ich użyć w różnych projektach bez potrzeby ponownego pisania kodu.</p>



<h3 class="wp-block-heading">Linear Automation Framework</h3>



<p>Linear Automation Framework to rodzaj frameworka do automatyzacji testów, który opiera się na liniowym podejściu. W LAF testy są projektowane w taki sposób, aby odzwierciedlały procesy biznesowe lub scenariusze użytkowania aplikacji. Oznacza to, że są one wykonywane w sposób sekwencyjny. W tym modelu testy są projektowane jako zestawy kroków, a każdy krok testu jest związany z akcją użytkownika lub wynikiem, który jest oczekiwany w aplikacji. Zaletą Linear Automation Framework jest to, że <strong>testy są bardziej zbliżone do rzeczywistych przypadków użycia</strong>, co może przyczynić się do znalezienia bardziej życiowych defektów w aplikacji, takich, na które trafiłby użytkownik.</p>



<h3 class="wp-block-heading">Hybrid Test Automation Framework</h3>



<p>To rodzaj frameworka, który łączy w sobie cechy wszystkich wymienionych powyżej podejść. Ten typ umożliwia projektowanie i wykonanie testów w sposób elastyczny i dopasowany do potrzeb projektu. W HTAF testy są tworzone w sposób modularny, podobnie jak w Module Based Testing Framework, ale z większą elastycznością i dostępem do szerokiej gamy narzędzi testowych. Framework ten pozwala na integrację różnych narzędzi i technologii, takich jak Selenium WebDriver, TestNG, Appium, JMeter itp., co pozwala na automatyzację testów w różnych środowiskach, takich jak aplikacje webowe, mobilne, desktopowe i wiele innych.</p>



<h2 class="wp-block-heading" id="Atata-automation-framework">Atata automation framework</h2>



<p>Atata to pełnowartościowy framework do automatyzacji testów, który jest oparty na Selenium WebDriver i zaprojektowany z myślą o aplikacjach internetowych. Został napisany w języku C# i oferuje szeroki zakres funkcjonalności, które ułatwiają automatyzację testów aplikacji internetowych.</p>



<h3 class="wp-block-heading">Atata – zalety</h3>



<ul class="wp-block-list">
<li><strong>Dostępność </strong>– framework Atata jest w pełni open source’owy i dostępny na platformie GitHub na licencji Apache License 2.0.</li>



<li><strong>Przejrzystość i łatwość użytkowania </strong>– jednym z kluczowych elementów Atata Framework jest użycie modelu Fluent Page Object Pattern. Ten wzorzec pozwala na pisanie kodu, który jest łatwy do czytania i zrozumienia. Wbudowany system logowania ułatwia śledzenie i rozwiązywanie problemów podczas testowania.</li>



<li><strong>Triggery</strong> – dodatkowo, framework ma unikalną funkcjonalność triggerów, która pozwala na uruchamianie niestandardowego kodu w momencie wystąpienia określonych zdarzeń.</li>



<li><strong>Niski próg wejścia </strong>– Atata została zaprojektowana w taki sposób, aby była łatwa w użyciu i utrzymaniu. Framework dostarcza prostą i intuicyjną składnię do definiowania i używania obiektów występujących na stronie. Wymaga to minimalnej ilości kodu, co pozytywnie wpływa na czytelność oraz ułatwia wprowadzenie kolejnych testerów do projektu.</li>



<li><strong>Gotowe komponenty </strong>– framework dostarcza również zestaw gotowych do użycia komponentów, które mają ułatwiać pracę. Komponenty te to np. kontrolki, strony i układy. Atata dostarcza szeroki zakres wbudowanych kontrolek, które można wykorzystywać do interakcji z elementami internetowymi na stronie. Kontrolki to np. przyciski, pola tekstowe, pola wyboru, przyciski opcji i wiele, wiele innych.</li>



<li><strong>Data-driven testing </strong>– Atata obsługuje również testowanie oparte na danych. Umożliwia testerom tworzenie testów, korzystając z funkcji Data-Driven Testing. Dzięki tej funkcji developerzy mogą uruchamiać ten sam scenariusz testowy z różnymi zestawami danych.</li>



<li><strong>Testowanie równoległe </strong>– framework obsługuje również testowanie równoległe. Dzięki funkcji Parallel Testing testerzy mogą uruchamiać wiele testów jednocześnie, co może znacznie zmniejszyć czas potrzebny do przetestowania. Jest to szczególnie przydatne w przypadku dużych aplikacji internetowych, które wymagają rozbudowanej kontroli jakości.</li>
</ul>



<h3 class="wp-block-heading">Atata – wady</h3>



<p>Mimo swoich wielu zalet Atata Framework ma także pewne wady.</p>



<ul class="wp-block-list">
<li><strong>Ograniczone zastosowanie</strong> – jedną z głównych wad jest to, że framework jest ograniczony tylko do obsługi stron internetowych. Jest to istotne ograniczenie np. dla firm rozwijających oprogramowanie, które oprócz stron webowych projektują również inne rodzaje aplikacji. W takim przypadku konieczne może być użycie innego narzędzia do automatyzacji testów.</li>



<li><strong>Dostępny wyłącznie z C#</strong> – framework ten jest też stworzony tylko dla języka C#, co uniemożliwia wykorzystanie go przez wielu programistów specjalizujących się w innych popularnych językach programowania.</li>



<li><strong>Mała społeczność</strong> – kolejną wadą w porównaniu do innych narzędzi służących do automatyzacji testów może być mniejsza społeczność. Framework ten jest stosunkowo nowy, w porównaniu do innych narzędzi, które istnieją na rynku od wielu lat. Musimy się liczyć z mniejszą ilością zasobów i dokumentacji online, a także materiałów pomocy dostępnych dla użytkowników. Na szczęście społeczność użytkowników jest bardzo zaangażowana i gotowa do pomocy. Warto też zaznaczyć, że kontakt z twórcami frameworka jest niezwykle prosty, a komunikacja bardzo sprawna (odpowiedź na większość problemów można uzyskać od samych twórców nawet w 20 minut).</li>
</ul>



<p>Jednak pomimo tych wad Atata Framework jest nadal jednym z najlepszych narzędzi do automatyzacji testów internetowych w języku C#. Jego liczne zalety sprawiają, że jest on popularny wśród testerów, którzy szukają prostego i intuicyjnego sposobu na automatyzację.</p>



<h2 class="wp-block-heading" id="Atata-vs-Selenium">Atata vs Selenium</h2>



<p>Na wstępie warto zaznaczyć, że pytanie nie jest do końca adekwatne w kontekście omawianego zagadnienia. Powiem więcej, porównywanie Selenium, do nakładki, jaką stanowi Atata, może się wydawać bezzasadne. Jest to przecież nic innego jak framework przykrywający swoimi funkcjonalnościami bazę, która dostarcza nam niezbędnych, podstawowych narzędzi. Dzięki takiemu zabiegowi dostajemy „ładniejszą” wersję Selenium, przyjemniejszą w użytku i szybszą w implementacji. </p>



<p><strong>Przeczytaj także: <a href="https://nearshore-it.eu/pl/artykuly/testy-e2e-cypress/">Testy E2E – Cypress vs Selenium</a></strong></p>



<p>Mimo to postanowiłam zebrać istotne różnice w formie tabeli poniżej. Warto być świadomym, jakie korzyści może przynieść zastosowanie takiej nakładki dla całego projektu. Koniec końców przy planowaniu prac projektowych wybór nie jest prosty i im więcej możliwości, tym trudniej podjąć decyzję nawet w obrębie frameworków opierają się na innych, dostępnych już narzędziach.</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.04.19_graphic_1.png" alt="Atata vs Selenium" class="wp-image-6632" title="Frameworki do automatyzacji testów. Wprowadzenie do Atata 5"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">Atata</h2>



<p>Jedną z największych zalet frameworka Atata jest jego użyteczny system logowania, który umożliwia śledzenie i diagnozowanie problemów w trakcie testowania. Atata oferuje także unikalne funkcje, takie jak mechanizm triggerów, który umożliwia wykonywanie niestandardowego kodu w odpowiedzi na określone zdarzenia podczas testowania.</p>





<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.04.19_graphic_2.png" alt="Atata" class="wp-image-6633" title="Frameworki do automatyzacji testów. Wprowadzenie do Atata 6"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Atata oferuje również intuicyjną składnię do definiowania i używania obiektów strony, co ułatwia programowanie i utrzymanie testów. Wspiera zastosowanie modelu Page Object Pattern, co dla zwolenników tego wzorca jest ogromną zaletą. Struktura jest dzięki temu przejrzysta i łatwiejsza w zrozumieniu.&nbsp;</p>



<p>Framework posiada wbudowany zestaw gotowych komponentów, takich jak kontrolki, strony i układy, co przyspiesza proces automatyzacji testów. Poniżej zamieściłam przykład możliwości, jakie oferuje nam Atata &#8211; zawiera nie tylko podstawowe elementy stron jak pola tekstowe, ale rozróżnia też pola przeznaczone dla adresów e-mail, haseł, numerów czy plików. Poza tym, obsługuje listy wyborów, elementy klikalne i wiele, wiele innych. Pełną specyfikację i możliwości można zawsze odnaleźć w bardzo czytelnie napisanej dokumentacji <a href="https://atata.io/components/." target="_blank" rel="noreferrer noopener">https://atata.io/components/.</a></p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">using _ = TextBoxPage; //alias for better readability 
    [Url(TextBoxUrl)]      //Url extension to base url placed in SpecFlowHooks.cs 
    [VerifyTitle("ToolsQA")] 
    public class TextBoxPage : BasePage&lt;_>  
    { 
        private const string TextBoxUrl = "/text-box"; 
 
 
        [FindById("userName")] //Selector to find element 
        public TextInput&lt;_> UserNameTextBoxInput { get; set; } //An element with its type and name 
 
 
        [FindById("userEmail")] 
        public EmailInput&lt;_> UserEmailTextBoxInput { get; set; } 
 
 
        [FindById("currentAddress")] 
        public TextArea&lt;_> CurrentAddressTextBoxTextArea { get; set; } 
 
 
        [FindById("permanentAddress")] 
        public TextArea&lt;_> PermanentAddressTextBoxTextArea { get; set; } 
 
 
        [FindById("submit")] 
        public Button&lt;_> SubmitTextBoxButton { get; set; } 
        
        [FindById("output")] 
        public Text&lt;_> TextBoxOutputBox { get; set; } 
 
 
        [FindById("name")] 
        public Text&lt;_> TextBoxOutputName { get; set; } 
 
 
        [FindById("email")] 
        public Text&lt;_> TextBoxOutputEmail { get; set; } 
 
 
        [FindById("currentAddress")] 
        public Text&lt;_> TextBoxOutputCurrentAddress { get; set; } 
 
 
        [FindByXPath("output")] 
        public Text&lt;_> OutputBox { get; set; } 
 
 
        [FindById("permanentAddress")] 
        public Text&lt;_> TextBoxOutputPermanentAddress { get; set; } 
    } 
 
</pre>



<p>Zastosowanie gotowych komponentów</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.04.19_graphic_5.png" alt="Komponenty Atata" class="wp-image-6634" title="Frameworki do automatyzacji testów. Wprowadzenie do Atata 7"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Mimo ogromu możliwości zdarza się jednak, że brakuje nam komponentu lub niemożliwe jest zastosowanie gotowego rozwiązania, które oferuje Atata. Na szczęście twórcy nie odebrali nam możliwości sensownego dostępu do czystej wersji Selenium i bez przeszkód możemy wyszukiwać nasze elementy lub stosować określone akcje wobec nich. Poniżej przykład wywołania WebDrivera.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">  public class ProjectDetailsPage : BasePage&lt;ProjectDetailsPage> 
    { 
        public int findGarageParkingPlaces() 
        { 
            var element = AtataContext.Current.Driver.FindElement(By.XPath("//div[contains(text(),'Garage Parking Places')]")); 
            return int.Parse(element.FindElement(By.ClassName("value")).Text); 
        } 
    } </pre>



<p>Wywołanie AtataContext.Current.Driver&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Dla fanów raportów i tabelek również znajdzie się tu przydatna funkcja. Atata oferuje wbudowane narzędzie do wykonywania zrzutów ekranu według wybranego wzoru np. po wykonaniu każdego kroku. Jeżeli połączymy t funkcję z biblioteką do tworzenia raportów np. <strong>ExtendedReports </strong>otrzymujemy bardzo przyjemne środowisko do generowania raportów w formie<strong> pliku .html. </strong></p>



<p>Po uruchomieniu testów mamy natychmiastowy wgląd w wyniki wraz ze statystykami, zaznaczonymi błędami, tagami i wykresami. Na pierwszy rzut oka można powiedzieć, że takie dane oferuje nam również samo IDE, jednak forma zestawienia ich przez tą bibliotekę jest dużo czytelniejsza i przyjemniejsza dla oka. Po drobnych zmianach w celu dostosowania się do potrzeb projektu dostajemy raport, który możemy przedstawić podczas spotkań biznesowych bez dużego nakładu pracy.</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image size-full">
<figure class="aligncenter"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.04.19_graphic_3-1.png" alt=" class=" class="wp-image-6635" title="Frameworki do automatyzacji testów. Wprowadzenie do Atata 8"></figure></div>


<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.04.19_graphic_4.png" alt="Przykład raportu" class="wp-image-6636" title="Frameworki do automatyzacji testów. Wprowadzenie do Atata 9"><figcaption class="wp-element-caption">Przykład raportu</figcaption></figure></div>


<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">  [Screenshot(AfterAnyAction)] 
    public abstract class BasePage&lt;TOwner> : Page&lt;TOwner> 
        where TOwner : BasePage&lt;TOwner> 
    { 
        //Some general helping methods that can be used in all pages 
        public int[] GetElementSize(Text&lt;TOwner> element) 
        { 
            return new int[2] { element.ComponentSize.Width.Value, element.ComponentSize.Height.Value }; 
        } 
         
        public void AcceptAlert() 
        { 
            AtataContext.Current.Driver.SwitchTo().Alert().Accept(); 
        } 
 
 
        public string GetAlertMessage() 
        { 
            return AtataContext.Current.Driver.SwitchTo().Alert().Text; 
        } 
    } </pre>



<p>Przykład dodawania zrzutów ekranu do raportu</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Intuicyjnie zostało rozwiązane też zagadnienie dotyczące nawigowania między stronami aplikacji w trakcie jednej sesji. W załączonym niżej przykładzie można zauważyć, że wystarczy zastosować funkcję<strong> Go.To </strong>(idź do) lub <strong>On</strong> (pozostań na stronie). Wystarczy przesłać odpowiedni adres strony do metody &#8211; nie ma konieczności otwierania i zamykania sesji w odpowiedni sposób tak, jak ma to miejsce przy użyciu Selenium bez nakładki. Przyczynia się to do znacznych oszczędności czasu przy konfiguracji środowiska.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""> [Binding] 
    public sealed class TextBoxSteps : BaseSteps 
    { 
        private readonly ScenarioContext _scenarioContext; 
 
 
        [Obsolete("Visual Studio IntelliSense Work Around", true)] 
        public TextBoxSteps(ScenarioContext scenarioContext) 
        { 
           _scenarioContext = scenarioContext;   //Initializing scenario context, you can save test session data in it 
           SetRandomUser(_scenarioContext);      //Creating new fake user data and saving it in context so it can be used in multiple tests without generating new set  
        } 
 
 
        [When(@"User input all personal data on address form page")] //SpecFlow binding to feature files, methods are named the same as scenario steps  
        public void WhenUserInputAllPersonalDataOnAddressFormPage() 
        { 
            Go.To&lt;TextBoxPage>()                 //Open page    
                .UserNameTextBoxInput.Set(User.FirstName + " " + User.LastName) //Make actions on web elements from page you just opened eg. set -> input text  
                .UserEmailTextBoxInput.Set(User.Email) //User.Email is a reference to our generated fake data 
                .CurrentAddressTextBoxTextArea.Click() 
                .CurrentAddressTextBoxTextArea.Set(User.Country) 
                .PermanentAddressTextBoxTextArea.Set(User.Country); 
        } 
 
 
        [When(@"confirm the data by clicking button")] 
        public void WhenConfirmTheDataByClickingButton() 
        { 
            On&lt;TextBoxPage>()                     //On already opened page 
                .SubmitTextBoxButton.Click(); 
        } 
 
 
        [Then(@"user should see provided data below")] 
        public void ThenUserShouldSeeProvidedDataBelow() 
        { 
            On&lt;TextBoxPage>() 
                .TextBoxOutputBox.Should.BeVisible()  //Should is assertion verification if something is as you wanted 
                .TextBoxOutputName.Content.Should.Contain($"Name:{User.FirstName} {User.LastName}") 
                .TextBoxOutputEmail.Content.Should.Contain($"Email:{User.Email}") 
                .TextBoxOutputCurrentAddress.IsVisible.Should.BeTrue() 
                .TextBoxOutputCurrentAddress.GetContent(ContentSource.Value).Should.Contain(User.Country) 
                .TextBoxOutputPermanentAddress.GetContent(ContentSource.Value).Should.Contain(User.Country); 
        } 
    } 
 
 </pre>



<p>Przykład nawigowania po stronach (Go.To oraz On), ponownie wklejam pełny kontekst klasy</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Niestety, framework ten powstał tylko dla języka programowania C#, co jest poważnym ograniczeniem względem Selenium, które działa również z Javą czy Pythonem.</p>



<h2 class="wp-block-heading" id="Który-framework-do-automatyzacji-testów-będzie-najlepszy-dla-mojego-projektu?">Który framework do automatyzacji testów będzie najlepszy dla mojego projektu?</h2>



<p>Wybór frameworka do automatyzacji testów zależy od wielu czynników, takich jak rodzaj projektu, wymagania biznesowe, preferencje programistów i dostępne zasoby. Oto kilka kroków, które mogą pomóc w wyborze najlepszego frameworka dla twojego projektu:&nbsp;&nbsp;&nbsp;</p>



<ol start="1" class="wp-block-list">
<li><strong>Określ swoje wymagania</strong>&nbsp;&nbsp;</li>
</ol>



<p>Przed podjęciem decyzji o wykorzystaniu danego frameworka do automatyzacji testów musisz wiedzieć, jakie są twoje wymagania. Na przykład, jeśli twój projekt zakłada rozwój aplikacji webowej, to framework, który wspiera testowanie interfejsów użytkownika, może być najlepszym wyborem. Nie ma sensu też wybierać technologii, która wspiera dodatkowo inne rodzaje aplikacji kosztem tego, który nas interesuje.&nbsp;&nbsp;&nbsp;</p>



<ol start="2" class="wp-block-list">
<li><strong>Znajdź odpowiednie narzędzia</strong>&nbsp;&nbsp;</li>
</ol>



<p>Skonsultuj się z programistami i testerami, którzy mają doświadczenie w automatyzacji testów, i poproś ich o zalecenia co do narzędzi. Zbierz informacje o różnych frameworkach, ich <strong>funkcjonalnościach, ograniczeniach i zasobach społecznościowych. </strong>&nbsp;&nbsp;</p>



<ol start="3" class="wp-block-list">
<li><strong>Przetestuj frameworki</strong>&nbsp;&nbsp;</li>
</ol>



<p>Przetestuj wybrane frameworki w praktyce. Przygotuj zestaw testów, które są reprezentatywne dla twojego projektu, i zaimplementuj je w każdym z frameworków. Analizuj, jakie frameworki są najbardziej intuicyjne i proste w użyciu.&nbsp;&nbsp;&nbsp;</p>



<ol start="4" class="wp-block-list">
<li><strong>Sprawdź integrację</strong>&nbsp;&nbsp;</li>
</ol>



<p>Jeśli rozwijana aplikacja używa zewnętrznych narzędzi, upewnij się, że framework, który wybierzesz, integruje się z nimi. Na przykład, jeśli korzystasz z platformy Continuous Integration, upewnij się, że framework, który wybierzesz, posiada dla niej plugin.&nbsp;&nbsp;&nbsp;</p>



<ol start="5" class="wp-block-list">
<li><strong>Zwróć uwagę na dostępność dokumentacji i wsparcia społeczności</strong>&nbsp;&nbsp;</li>
</ol>



<p>Wybierz framework, który ma dobrą dokumentację i szeroką społeczność użytkowników. To pomoże w rozwiązywaniu problemów technicznych, jakie możesz napotkać podczas pracy z frameworkiem.&nbsp;&nbsp;&nbsp;</p>



<h2 class="wp-block-heading" id="Podsumowanie">Podsumowanie</h2>



<p>Podsumowując, wybór frameworka do automatyzacji testów zależy od wielu czynników i nie ma jednoznacznej odpowiedzi na pytanie, który z nich sprawdzi się w twoim projekcie. Obecnie na rynku jest dostępnych wiele typów frameworków, musisz więc zbadać różne opcje i wybrać ten, który najlepiej odpowiada twoim wymaganiom i specyfice projektu. </p>



<p>Mam nadzieję, że tym artykułem udało mi się też przybliżyć możliwości stosunkowo nowego narzędzia, jakim jest Atata. Choć Selenium jest jednym z bardziej popularnych i cenionych narzędzi, warto poznawać inne opcje. Atata jest ciągle rozwijana przez społeczność programistów, co oznacza, że każdy może przyczynić się do usprawnień, zgłaszając błędy, wprowadzając ulepszenia lub pisząc dokumentację. W ten sposób Atata staje się coraz lepszym narzędziem.</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/test-automation-framework/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Testuj przed wszystkimi, czyli shift-left testing w praktyce</title>
		<link>https://nearshore-it.eu/pl/artykuly/testuj-przed-wszystkimi-czyli-shift-left-testing-w-praktyce/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/testuj-przed-wszystkimi-czyli-shift-left-testing-w-praktyce/#respond</comments>
		
		<dc:creator><![CDATA[Mariusz Skomra]]></dc:creator>
		<pubDate>Mon, 12 Dec 2022 06:09:00 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[QA]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/testuj-przed-wszystkimi-czyli-shift-left-testing-w-praktyce/</guid>

					<description><![CDATA[Czym jest podejście „shift-left testing”? Zobacz, jak korzystamy z niego w praktyce, jakie przynosi korzyści, a także jakie okoliczności sprawiły, że jest ono możliwe do zastosowania.]]></description>
										<content:encoded><![CDATA[
<p></p>



<div class="table-of-contents">
    <p class="title">Spis treści:</p>
    <ol>
                    <li><a href="#Scrum-czy-Scrumfall">1.  Scrum czy Scrumfall?</a></li>
                    <li><a href="#Shift-left">2.  Shift-left – co to takiego?</a></li>
                    <li><a href="#Srodowisko-produkcyjne">3.  Środowisko produkcyjne</a></li>
                    <li><a href="#Srodowisko-testowe">4.  Środowisko testowe</a></li>
                    <li><a href="#Srodowisko-developerskie">5.  Środowisko developerskie</a></li>
                    <li><a href="#Analiza-biznesowa">6.  Analiza biznesowa i ustalanie wymagań</a></li>
                    <li><a href="#Czy-mozna-testowac-jeszcze-wczesniej">7.  Czy można testować jeszcze wcześniej?</a></li>
                    <li><a href="#Shift-left-testing ">8.  Shift-left testing – co nam to daje?</a></li>
                    <li><a href="#Shift-left-dlaczego-u-nas-dziala">9.  Shift-left – dlaczego u nas działa?</a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="Scrum-czy-Scrumfall">Scrum czy Scrumfall?</h2>



<p>W klasycznych metodykach wytwarzania oprogramowania, takich jak Waterfall, proces testowania oprogramowania następuje po fazie jego zaprojektowania i wytworzenia. Tym samym obiektem poddawanym testowaniu jest gotowy, ostateczny produkt. Głównymi problemami, jakie to rodzi, są długi czas naprawy błędów, ich wysoki koszt, a także ryzyko, iż wprowadzone zmiany wpłyną na inne funkcjonalności (co z kolei niesie za sobą konieczność ponownego wykonania wszystkich testów, a tym samym wydłużeniu ulega cały proces).</p>



<p>W ostatnich latach <em>state-of-the-art</em> w wytwarzaniu oprogramowania są tzw.<a href="https://nearshore-it.eu/pl/artykuly/metodyki-zwinne-scrum-a-inne-podejscia-safe-less-nexus/" data-type="post" data-id="29686"> metodyki zwinne</a> (Scrum, Kanban itp.). Dzięki iteracyjnemu podejściu procesowi testowania nie jest poddawany cały, gotowy produkt, lecz jego fragmenty będące rozwinięciem poprzedniej wersji, niebędące jednak jego ostateczną wersją.</p>



<p>Niestety, niepoprawne wdrożenie metodyk zwinnych również niesie ryzyko powtórzenia powyżej opisanych błędów. Przykładem niech będzie jeden z moich wcześniejszych projektów, gdzie w czasie trwania Sprintu był wyraźny podział na fazę omawiania zadań, development, a następnie testowanie. Czym się kończył taki <em>Scrumfall </em>pod koniec Sprintu?</p>



<ul class="wp-block-list">
<li><strong>Testerzy</strong> mieli mało czasu na wykonanie testów (bo development zadania się przedłużył),</li>



<li><strong>Developerzy</strong> mieli mało czasu na wykonanie ewentualnych poprawek (bo testerzy potrzebowali czasu na testy),</li>



<li><strong>Product Owner</strong> sugerował, aby niekiedy przymknąć oko na testy (bo trzeba oddać, a przetestować można później),</li>



<li><strong>Klient</strong> zastanawiał się, czy testerzy są potrzebni na cały etat (bo przecież w pierwszym tygodniu Sprintu nic nie robią).</li>
</ul>



<p>Dodatkowo dochodziło do sytuacji, gdzie na etapie testowania okazywało się, że developer zrozumiał zadanie w jeden sposób, tester w drugi, a klientowi chodziło o coś zupełnie innego. Tym samym zadanie, które było uznawane za „prawie skończone” stawało się zadaniem „do omówienia” (co wydłużało proces jego dostarczenia).</p>



<h2 class="wp-block-heading" id="Shift-left">Shift-left – co to takiego?</h2>



<p>Nie tylko błędne zrozumienie Agile w organizacji może zwiększać ryzyko niepowodzenia w projekcie. Problem planowania czasu na testy oprogramowania pojawia się w wielu projektach bez względu na stosowaną metodykę. Okazuje się jednak, że istnieje podejście, które może być jeśli nie „lekiem na całe zło”, to na pewno środkiem łagodzącym objawy nieumiejętnego rozplanowania prac w projekcie. <strong>Mowa tu o shift-left testing. To podejście mówiące o tym, żeby proces testowania zaczynać na jak najwcześniejszym etapie wytwarzania oprogramowania.</strong></p>



<p>Przejdźmy teraz przez wszystkie etapy &nbsp;wytwarzania oprogramowania i odpowiedzmy sobie na pytania:</p>



<p><strong>„Czy to jest wystarczająco wcześnie na testy? A jeżeli nie, to dlaczego?”.</strong></p>



<h2 class="wp-block-heading" id="Srodowisko-produkcyjne">Środowisko produkcyjne</h2>



<p>Pytanie o testy na produkcji zawsze jest dyskusyjne i niejednokrotnie prowadzi do odpowiedzi: „To zależy”. Czy warto testować na tym etapie? Moim zdaniem tak. Jednakże mówimy tu wówczas o tzw. <em>smoke testach</em>. Za ich pomocą sprawdzamy jedynie, czy kluczowe ścieżki działają. <strong>Szczegółowe testy powinny zostać wykonane na wcześniejszych etapach – o ile jest to możliwe.</strong> Kiedy nie jest? Przykładowo: serwis należy do zewnętrznego dostawcy i na niższych środowiskach jest on <a href="https://nearshore-it.eu/pl/artykuly/mockowanie-w-testach-nie-tylko-automatycznych/" data-type="post" data-id="29313">mockowany</a>. Kolejny przykład: wysyłamy zapytanie do innego serwisu, którego baza produkcyjna jest 1000-krotnie większa niż na środowisku testowym (kilkanaście milionów obiektów vs kilkanaście tysięcy), co znacząco wpływa na rozmiar otrzymywanych danych i ich liczbę. Jeszcze innym przykładem testów na produkcji mogą być np. testy konfiguracji. W jednym z projektów dostaliśmy zadanie, aby zmienić sposób budowania aplikacji. Z poziomu użytkownika nic się nie zmieniło. Dla zespołu developerskiego zmieniło się wszystko, gdyż wdrożone zostało nowe narzędzie wraz z nową konfiguracją. Dodatkowo okazało się, że jego konfiguracje nieco różniły się na każdym ze środowisk.</p>



<h2 class="wp-block-heading" id="Srodowisko-testowe">Środowisko testowe</h2>



<p>Środowisko testowe to środowisko starające się odzwierciedlić w jak największym stopniu środowisko produkcyjne. Wykonujemy na nim testy regresji (w postaci testów automatycznych uruchamianych co noc), które mają nie tylko sprawdzić jak najszerszy zakres funkcjonalności naszej usługi, ale też jej integrację z innymi serwisami. Takie podejście pozwala nam upewnić się, że najnowsza wersja aplikacji może być wydana na produkcję.<strong> Jednakże ten etap procesu wytwarzania również nie jest najwcześniejszym, na jakim wykonujemy testy.</strong> Traktujemy go bardziej jako element &nbsp;pewnego rodzaju <em>„double check”,</em> dodatkowego sprawdzenia zmiany. Takie podejście wynika z faktu, iż proces naprawy błędu zajmuje sporo czasu ze względu na konieczność stworzenia nowej wersji kodu z poprawką, poddania jej procesowi <em>code review</em>, scalenia oraz wydania nowej wersji aplikacji.</p>



<h2 class="wp-block-heading" id="Srodowisko-developerskie">Środowisko developerskie</h2>



<p>To środowisko wykorzystywane jest przez developerów podczas codziennego wytwarzania oprogramowania. Charakteryzuje się tym, iż wdrożona na nim wersja aplikacji może zmieniać się bardzo często (nawet kilkukrotnie w ciągu dnia) oraz tym, iż nie musi ona działać poprawnie (stabilnie). Jednakże właśnie ze względu na bardzo krótki czas wdrażania zmian <strong>jest to również wyśmienite miejsce do przeprowadzania testów funkcjonalnych</strong> (zarówno wstępnych, jak i całościowych) oraz zgrubnych testów regresji. Dzięki testom na tym środowisku, jako tester, w bardzo krótkim czasie jestem w stanie powiedzieć, czy dana wersja&nbsp; może wejść na środowisko testowe, czy jednak wymaga zmian. Niekiedy zmiany te wprowadzane są niemalże w czasie rzeczywistym – developer obserwuje zachowanie aplikacji podczas testów, analizuje przyczynę problemu, wprowadza poprawkę, a następnie wykonywany jest retest, który sprawdza, czy wszystko działa. Takie podejście zdecydowanie skraca czas otrzymania informacji zwrotnej od testera. Skraca również proces <em>code review</em>, ponieważ oddawany kod działa tak, jak powinien, i nie trzeba go modyfikować celem poprawy błędów (co tylko wydłużyłoby jego przegląd).</p>



<h2 class="wp-block-heading" id="Analiza-biznesowa">Analiza biznesowa i ustalanie wymagań</h2>



<p>Czy można testować dokumentację bądź wymagania biznesowe? Oczywiście! Bardzo często spotykam się z sytuacją, kiedy ustalane są cele zadań i ich zakres, wszyscy mówią, że rozumieją i wiedzą, co ma być zrobione, po czym padają pytania: „A czy to nie wpływa na inny obszar aplikacji?”, „A czy ta logika na pewno jest zgodna z wymaganiami innych serwisów?”, „A czy wiemy, skąd te dane mamy pobrać?”, „A czy mamy makiety i tłumaczenia tekstów?”. I nagle okazuje się, że zadanie, które już zostałoby wzięte w zakres Sprintu – jest z niego usuwane lub zostaje zablokowane celem dalszych wyjaśnień. Gdyby nie to, to bardzo prawdopodobna &nbsp;byłaby sytuacja, w której te pytania zostałyby zadane już w trakcie developmentu. A to skutkowałoby przedłużonym czasem rozwoju oprogramowania lub nawet niedostarczeniem funkcjonalności.</p>



<h2 class="wp-block-heading" id="Czy-mozna-testowac-jeszcze-wczesniej">Czy można testować jeszcze wcześniej?</h2>



<p>Wydawać by się mogło, że określanie wymagań biznesowych to najwcześniejszy etap procesu wytwarzania oprogramowania, w którym możliwe są testy oprogramowania. A co za tym idzie – nie da się przesunąć testowania bardziej w lewo. Otóż&#8230; nie jest to do końca prawda. Na konferencji TestWarez 2019 <a href="https://www.linkedin.com/in/marcus-merrell-285266/" target="_blank" rel="noopener">Marcus Merrell</a> w swoim wystąpieniu <a href="https://www.youtube.com/watch?v=UBx12A0n74k" target="_blank" rel="noopener">&#8222;Shift Left, Shift Right – Why These Buzzwords Matter”</a>&nbsp;powiedział, że kolejnym przesunięciem testowania na wcześniejszy etap jest… środowisko produkcyjne. Ale jak to? Testowanie na produkcji? Otóż nie testowanie, a monitorowanie. A następnie wyciąganie wniosków i tworzenie na ich podstawie nowych zadań mogących usprawnić działanie systemu.</p>



<p>Przykładowo: w naszym projekcie jedną z metryk, jakie zbieramy i analizujemy, jest rodzaj błędów biznesowych występujących w aplikacji. Gdy któryś błąd zaczyna się pojawiać dużo częściej, badamy, co jest jego przyczyną, i zastanawiamy się, co możemy zrobić, aby zredukować jego występowanie.</p>



<h2 class="wp-block-heading" id="Shift-left-testing">Shift-left testing – co nam to daje?</h2>



<p>Najbardziej oczywistą i podkreślaną przez wszystkich zaletą podejścia shift-left testing jest wykrycie błędów na wczesnym etapie developmentu. Niemniej podejście to, w projekcie, jaki realizujemy w Inetum dla klienta z obszaru e-commerce, przynosi też inne zalety. Oto one:</p>



<h3 class="wp-block-heading">Wczesna automatyzacja</h3>



<p>W dyskusjach o automatyzacji testów bardzo często pojawia się pytanie: <strong>„Kiedy zacząć automatyzować?”</strong>. Moja odpowiedź zawsze brzmi: „Jak najwcześniej”. Przykładowo – zadanie polega na wprowadzeniu nowego pola do formularza oraz dodaniu nowych walidacji. Czy muszę czekać, aż developerzy przygotują backend i frontend, abym mógł zacząć testować manualnie, a następnie stworzyć testy automatyczne? Nie. Na podstawie opisu zadania tworzę <a href="https://nearshore-it.eu/pl/artykuly/minimalistyczny-przypadek-testowy/" data-type="post" data-id="30771">przypadki testowe</a><a href="https://nearshore-it.eu/pl/artykuly/minimalistyczny-przypadek-testowy">,</a> jakie będą wykonane, wybieram te, które zostaną zautomatyzowane, a następnie przygotowuję kod testów. W efekcie, kiedy developer oddaje mi zadanie do testów, bardzo często wystarczy, że uruchomię taki kod i w bardzo krótkim czasie dostanę informację, czy funkcjonalność działa zgodnie z założeniami, czy nie (niekiedy wręcz nie muszę wykonywać testów manualnych, ponieważ automatyczne pokryją wszystkie przypadki, a na dodatek będą szybsze i dokładniejsze).</p>



<h3 class="wp-block-heading">Podwójne sprawdzenie</h3>



<p>Automatyzacja na wczesnym etapie niesie ze sobą dodatkową zaletę, jaką jest podwójne sprawdzenie funkcjonalności. Tzn. zmiana testowana jest na środowisku developerskim, kod jest scalany, nowa wersja aplikacji jest wydawana i wgrywana na środowisko testowe. Przygotowane testy automatyczne mają dać takie same wyniki na obu środowiskach. Czy tak się dzieje? Zazwyczaj tak. Niestety, w projektach zdarzały się sytuacje, kiedy jednego dnia scalonych zostało kilka różnych zmian, co w efekcie spowodowało niepoprawne działanie już przetestowanych funkcjonalności. Na szczęście codzienne uruchamianie testów pozwoliło nam na szybkie wykrycie tego problemu i jego poprawę.</p>



<h3 class="wp-block-heading">Większa świadomość znaczenia testów</h3>



<p>W dzisiejszym świecie bardzo często podkreśla się znaczenie testów w procesie wytwarzania oprogramowania. A jak jest naprawdę? Różnie. Pokuszę się o stwierdzenie, że co zespół, to inne podejście. W moim obecnym projekcie początkowo tryb pracy był&#8230; typowy tzn. developer zaczynał pracę nad zadaniem, przygotowywał zmianę, kod przechodził proces <em>code review</em>, wydawana była nowa wersja aplikacji i zadanie przechodziło w etap testów. Po kilku miesiącach pracy ten proces się znacząco zmienił. Wypracowaliśmy podejście, w którym przed przesunięciem zadania do <em>code review</em> kod jest sprawdzany przez QA.</p>



<h2 class="wp-block-heading" id="Shift-left-dlaczego-u-nas-dziala">Shift-left – dlaczego u nas działa?</h2>



<p><strong>Czy podejście shift-left zadziała zawsze i w każdym zespole?</strong></p>



<p>Moim zdaniem nie. Dlaczego u nas się sprawdza? Jest kilka powodów:</p>



<ol class="wp-block-list">
<li><strong>Wszystkie osoby tworzą zespół developerski.</strong> Nie mamy sytuacji, w których np. zespół dostaje zadania do wykonania bez wcześniejszych konsultacji czy testerzy i developerzy tworzą osobne zespoły bez bieżącego kontaktu ze sobą. Każdy ma wygląd w zadania i może zgłosić swoje uwagi na każdym etapie pracy.</li>



<li><strong>Odpowiednia infrastruktura.</strong> Jako zespół developerski nie musimy angażować swojego czasu w tworzenie infrastruktury, środowisk itp. Wszystko to przygotowywane jest przez osobny, dedykowany do tego zespół. My zgłaszamy zapotrzebowanie na zasoby, a następnie dostajemy działające rozwiązania.</li>



<li><strong>Dojrzałość zespołu</strong>. Zespół tworzony jest przez osoby, które mają doświadczenie w pracy zarówno w dobrze zorganizowanych projektach, jak i takich, które nie mogą zostać określone tym mianem. Tym samym wszelkie nasze doświadczenia („Wtedy robiliśmy tak i tak, i to powodowało, że mieliśmy problemy z tym i tamtym”) pozwalają nam teraz ustalić dużo lepszy proces developmentu i testowania. Dodatkowo wiemy, że swoboda naszego działania jest akceptowana, póki dostarczamy produkt wysokiej jakości. Dlatego też wszystkim zależy, aby błędy wykrywane były jak najszybciej.</li>
</ol>



<p><a href="#_ftnref1" name="_ftn1"></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/testuj-przed-wszystkimi-czyli-shift-left-testing-w-praktyce/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Testy E2E – wprowadzenie do Cypress</title>
		<link>https://nearshore-it.eu/pl/artykuly/testy-e2e-cypress/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/testy-e2e-cypress/#respond</comments>
		
		<dc:creator><![CDATA[Sebastian Szemer]]></dc:creator>
		<pubDate>Wed, 09 Nov 2022 12:35:25 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[QA]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/testy-e2e-cypress/</guid>

					<description><![CDATA[Przez lata to Selenium wyznaczało standardy w automatyzacji testów aplikacji przeglądarkowych. Jednak wielu testerów podkreśla, że to narzędzie nie zawsze radzi sobie w przypadku testów nowoczesnych aplikacji webowych. W ostatnim czasie spośród dostępnych frameworków popularność zaczął zyskiwać Cypress – narzędzie do testów end-to-end oferujące prostą składnię i niski próg wejścia. Czy jest dla każdego? Jakie są jego zalety, a w czym ustępuje Selenium? Sprawdź, w jakim projekcie warto postawić na to narzędzie.]]></description>
										<content:encoded><![CDATA[
<div class="table-of-contents">
    <p class="title">Przejdź do:</p>
    <ol>
                    <li><a href="#Czym-jest-Cypress?">1.  Czym jest Cypress?</a></li>
                    <li><a href="#-Wykorzystanie-dodatkowych-bibliotek-">2.   Wykorzystanie dodatkowych bibliotek </a></li>
                    <li><a href="#Cypress-vs-Selenium">3.  Cypress vs Selenium</a></li>
                    <li><a href="#Nasz-pierwszy-test-w-Cypress">4.  Nasz pierwszy test w Cypress</a></li>
                    <li><a href="#Zalety-Cypressa">5.  Zalety Cypressa</a></li>
                    <li><a href="#Wady-Cypressa">6.  Wady Cypressa</a></li>
                    <li><a href="#Podsumowanie:-czy-Cypress-jest-frameworkiem-dla-każdego?">7.  Podsumowanie: czy Cypress jest frameworkiem dla każdego?</a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="Czym-jest-Cypress?">Czym jest Cypress?</h2>



<p>Cypress to framework open source do tworzenia testów end-to-end i testów komponentów aplikacji webowych. Stworzony przez frontend developerów dla frontend developerów, dzięki swojej prostocie i przyjaznemu debuggerowi stał się popularny także w świecie testerskim.</p>



<p>Jego główne zalety to czytelna składnia oraz łatwa instalacja, po której od razu możemy pisać pierwsze testy i tym samym łatwo zweryfikować działanie aplikacji. Cypress cechuje się szybkością pisania i wykonywania testów, zapewniając przy tym ich niezawodność dzięki automatycznemu czekaniu na elementy na stronie.</p>



<h2 class="wp-block-heading" id="-Wykorzystanie-dodatkowych-bibliotek-">Wykorzystanie dodatkowych bibliotek&nbsp;</h2>



<p>Stos Cypressa korzysta z kilku dość popularnych bibliotek testowych do asercji czy generowania raportów. Są to:&nbsp;&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Mocha</strong> – pozwala zbudować raport JUnit lub TeamCity. Istnieje mnóstwo pluginów do biblioteki Mocha, dzięki czemu z pewnością wygenerujemy raport w formacie, jakiego potrzebujemy.</li>



<li><strong>Chai</strong> – wbudowana biblioteka do asercji.</li>



<li><strong>Sinon</strong> – framework, którego metody Cypress wykorzystuje w cy.spy, cy.stub, czyli w monitorowaniu wywołań funkcji.</li>
</ul>



<p>Jest kilka pluginów, które nie są wbudowane, ale uważam, że warto je zainstalować. Mam na myśli m.in.:</p>



<ul class="wp-block-list">
<li><strong>Cypress-recurse</strong> – plugin ułatwiający pisanie funkcji rekurencyjnych.</li>



<li><strong>Cypress-tab</strong> – plugin dodający możliwość wysyłania klawisza ‘TAB’ do przeglądarki.</li>



<li><strong>Cypress-xpath</strong> – w Cypress szukamy elementów za pomocą selektorów CSS, ten plugin pozwoli korzystać z xpath.</li>
</ul>



<h2 class="wp-block-heading" id="Cypress-vs-Selenium">Cypress vs Selenium</h2>



<p>To nie jest tak, że jakieś rozwiązania są lepsze lub gorsze, ale wszyscy wiemy, że Selenium jest po prostu przestarzałe i nie radzi sobie najlepiej w przypadku witryn internetowych z nowoczesnym frontem, gdzie elementy w DOM są dynamicznie podmieniane zamiast ładowania całego DOM od nowa.</p>



<p>To największa wada Selenium i głównie w kontrze do niej powstał Cypress, stawiając na stabilność testów nowoczesnych aplikacji frontendowych. Początkowo miał być wsparciem dla frontend developerów piszących testy integracyjne, dziś skupia się na testach end-to-end i testach komponentów. Dzięki przejrzystej składni narzędzie szybko zdobyło zaufanie wielu testerów.</p>



<p><strong>Przeczytaj również:</strong> <a href="https://nearshore-it.eu/pl/artykuly/piramida-testow-czyli-co-kiedy-i-jak-testowac-zeby-testy-przyniosly-zysk/" data-type="link" data-id="https://nearshore-it.eu/pl/artykuly/piramida-testow-czyli-co-kiedy-i-jak-testowac-zeby-testy-przyniosly-zysk/">Piramida testów: dowiedz się, jak testować, żeby testy przynosiły zysk</a>.</p>



<p>Selenium ma sporą przewagę, jeśli chodzi o obsługiwane języki programowania. Jest ono dostępne dla <strong>Javy, Pythona, C#, JavaScript i Ruby. </strong> Cypress z założenia obsługuje tylko JavaScript (po konfiguracji także TypeScript), co może być problemem, gdy w zespole bądź firmie brakuje odpowiednich kompetencji.</p>



<p>Selenium jest na rynku od lat i choć ma wiele wad, to są one dobrze znane, a internet jest pełen poradników, jak sobie z nimi radzić. Selenium wyznaczyło pewien standard i przez lata wiodło prym w automatyzacji testów aplikacji przeglądarkowych, ale nowe czasy wymagają nowych rozwiązań, a Cypress z pewnością jest godny uwagi.</p>



<p>Testy w Cypress są wykonywane szybko i stabilnie, a ich pisanie to, moim zdaniem, wręcz przyjemność (w przeciwieństwie do Selenium, wystarczy stworzyć lokator i można na obiekcie wykonywać akcje – w Selenium trzeba mieć lokator i Factory, żeby to działało). </p>



<p>Obsługuje on wszystkie najważniejsze przeglądarki, takie jak<strong> Chrome, Edge, Firefox czy nawet Webkit.</strong> Co ciekawe, do wyboru mamy też <strong>Brave</strong>, a domyślną przeglądarką jest <strong>Electron</strong>. Przeglądarki te są zawarte w pakiecie, więc nie trzeba o nie dbać, jak w przypadku Selenium. Należy jednak pamiętać o aktualizacji Cypressa, jeśli chcemy mieć ich najnowsze wersje.</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image size-full">
<figure class="aligncenter"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.11.09_graphic_12.png" alt=" class=" class="wp-image-68472" title="Testy E2E – wprowadzenie do Cypress 10"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Nasz-pierwszy-test-w-Cypress">Nasz pierwszy test w Cypress</h2>



<p>Aby zacząć pisać test w Cypress, możemy użyć aplikacji standalone (do pobrania na oficjalnej stronie Cypress.io) lub stworzyć projekt poprzez komendę npm (po uprzedniej instalacji): </p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">mkdir cypress 
cd cypress 
npm init 
npm install cypress --save-dev </pre>



<p>Po pierwszym uruchomieniu utworzony zostaje folder /cypress – a w nim kolejne:</p>



<ul class="wp-block-list">
<li>do przechowywania testów e2e, </li>



<li>fixtures dla wszelkich testaliów, </li>



<li>downloads, screenshots, </li>



<li>oraz support dla różnych helperów. </li>
</ul>



<p></p>



<p>Otwieramy więc Test Runner, wybieramy typ testów e2e i wybieramy domyślną przeglądarkę.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">npx cypress open </pre>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image size-full">
<figure class="aligncenter"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/screen1.png" alt="Cypress E2E testing" class="wp-image-68454" title="Testy E2E – wprowadzenie do Cypress 11"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image size-full">
<figure class="aligncenter"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/screen2.png" alt="Cypress E2E testig configuration files" class="wp-image-68456" title="Testy E2E – wprowadzenie do Cypress 12"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image size-full">
<figure class="aligncenter"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/screen3.png" alt="Cypress E2E testig configuration files - start testing" class="wp-image-68458" title="Testy E2E – wprowadzenie do Cypress 13"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Następnie stworzymy nowy plik firstSpec.cy.js w folderze e2e, a w jego treści umieszczamy poniższy kod, który otwiera stronę, wprowadza nazwę użytkownika i hasło, loguje do aplikacji, a następnie weryfikuje skuteczność zalogowania poprzez sprawdzenie widoczności elementu. </p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">describe('My First Test', () => { 

  it('Does not do much!', () => { 

    cy.visit('http://zero.webappsecurity.com/login.html');  
    cy.get('#user_login').type('username');  
    cy.get('#user_password').type('password'); 
    cy.get('[name="submit"]').click(); //klikamy submit 
    cy.get('#account_summary_tab').should('be.visible'); 

  }) 

}); </pre>



<p>Test możemy uruchomić w konsoli przy pomocy komendy:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">npx cypress run </pre>



<p>lub w debuggerze:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">npx cypress open </pre>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image size-full">
<figure class="aligncenter"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/screen4.png" alt="Cypress E2E testig account summary" class="wp-image-68460" title="Testy E2E – wprowadzenie do Cypress 14"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Zalety-Cypressa">Zalety Cypressa</h2>



<h3 class="wp-block-heading">Prosta instalacja</h3>



<p>Jeśli kiedykolwiek konfigurowaliście <strong>JBehave</strong>, to z pewnością docenicie prostotę instalacji Cypressa i to, jak szybko można po niej zacząć pisać wartościowe testy. Nie oferuje tego żaden inny, nawet najbardziej nowoczesny, framework do testów e2e w przeglądarce.</p>



<h3 class="wp-block-heading">Niski próg wejścia</h3>



<p>Mimo że Cypress działa tylko w połączeniu z JavaScript, wcale nie jest to dużą przeszkodą dla chcących z niego korzystać. Sam nie miałem z JavaScript wiele wspólnego, poznając Cypress. Jednak aby zacząć pisać testy, wystarczy poznać podstawowe komendy, których składnia jest bardzo prosta i naturalna. Możliwość <strong>łączenia komend pozwala na synchroniczne ich wykonanie</strong>, co sprawia, że testy są nadzwyczaj stabilne (dla przykładu, klikamy w dany input, czyścimy jego zawartość, wpisujemy text, po czym klikamy button i weryfikujemy, czy owy button zmienił swój text).</p>



<h3 class="wp-block-heading">Sprawdzanie stanu elementów</h3>



<p>Cypress domyślnie sprawdza, czy szukany element znajduje się w <strong>DOM</strong>, czy jest widoczny, zakończył animacje. Pozwala to usunąć z testu zbędny kod związany z czekaniem, a jeśli jakiś element ładuje się dłużej, to po prostu zwiększamy danej komendzie timeout. Dzięki temu testy są jednocześnie czytelne i stabilne.</p>



<h3 class="wp-block-heading">Narzędzia</h3>



<p>Jedną z moich ulubionych cech Cypressa jest to, że dostarcza sporo narzędzi przydatnych w testach, jak<strong> cy.fixture </strong>czy<strong> cy.intercept</strong>. Pierwsze pozwala na zarządzanie danymi testowymi czy to PDF, który chcemy wgrać do aplikacji, czy to plik JSON z payloadem do API bądź danymi testowymi w podejściu <strong>DDD</strong>. Drugie zaś pozwala na przechwytywanie ruchu sieciowego, a nawet <a href="https://nearshore-it.eu/pl/artykuly/mockowanie-w-testach-nie-tylko-automatycznych/" data-type="link" data-id="https://nearshore-it.eu/pl/artykuly/mockowanie-w-testach-nie-tylko-automatycznych/">mockowanie </a>odpowiedzi z backendu. Jest to wielce przydatne, gdy czekamy na odpowiedź z API, która ma zasilić danymi front, lub gdy dostawca zewnętrzny nie odpowiada i chcemy jego odpowiedzi zmockować.</p>



<h3 class="wp-block-heading">Debugger GUI</h3>



<p>Po tym narzędziu widać, że Cypress został napisany przez frontend developerów. Ma świetny interfejs użytkownika <strong>(UI)</strong> łączący ze sobą możliwość uruchamiania i debugowania testów. Tworzenie snapshotów stanu aplikacji po każdej akcji daje nam możliwość odbycia „podróży w czasie” po różnych etapach trwania naszego testu. Dostęp do narzędzi developerskich pozwala podejrzeć np. ruch sieciowy. Wszystko to daje nam komplet narzędzi niezbędnych do szukania błędów.</p>



<h2 class="wp-block-heading" id="Wady-Cypressa">Wady Cypressa</h2>



<p>Mimo wielu plusów Cypress ma też swoje wady i nie można obok nich przejść obojętnie, jeśli jesteśmy na etapie wybierania najlepszego rozwiązania dla projektu.</p>



<h3 class="wp-block-heading">Testowe post mortem</h3>



<p>Chyba każdy doświadczył tego, jak uciążliwe może być debugowanie testu nieprzechodzącego w środowisku CI/CD. Pod tym względem Cypress oferuje nam nagranie video, zrzut ekranu, a w logach – <strong>error message</strong>. O ile w wielu przypadkach okazuje się to wystarczające, to bywa uciążliwe, kiedy chcemy prześledzić chociażby ruch sieciowy. W Selenium wcale nie było pod tym względem lepiej – moim osobistym faworytem jest <strong>Playwright </strong>ze swoimi trace’ami. Cypress to domyślnie narzędzie z GUI i to na nim najłatwiej debugować testy.</p>



<h3 class="wp-block-heading">Wielowątkowość</h3>



<p>Cypress chwali się wsparciem dla równoległego wykonywania testów. Nie jest ono jednak włączone domyślnie i <strong>wymaga nieprostej konfiguracji w CI/CD.</strong> W ten sposób możemy tworzyć wiele kontenerów, z których każdy wykona jeden wątek testów (podobnie do Selenium Grid). W porównaniu z Playwright, gdzie testy domyślnie uruchamiają się w wielu wątkach, albo nUnit, gdzie taka konfiguracja to jedna linijka kodu, to dość rażące niedociągnięcie.</p>



<h3 class="wp-block-heading">Wątpliwe wsparcie dla BDD</h3>



<p>Sam w sobie Cypress nie wspiera <a href="https://nearshore-it.eu/pl/artykuly/testy-bdd-czy-naprawde-sa-potrzebne/" data-type="link" data-id="https://nearshore-it.eu/pl/artykuly/testy-bdd-czy-naprawde-sa-potrzebne/">BDD</a>, za to polega na zewnętrznych pluginach bazujących na <strong>cucumber-js</strong>. Oficjalnie wspierany cypress-cucumber-preprocessor przestał być rozwijany i musimy się posilać różnymi klonami precyzyjnie wybranymi dla naszej konkretnej wersji Cypressa.</p>



<h2 class="wp-block-heading" id="Podsumowanie:-czy-Cypress-jest-frameworkiem-dla-każdego?">Podsumowanie: czy Cypress jest frameworkiem dla każdego?</h2>



<p>Cypress skraca czas pisania testów e2e dzięki swojej składni i narzędziom, jakie oferuje. Pisanie testów w Cypress to sama przyjemność i nie powinno sprawić problemów nawet początkującym użytkownikom. Debugowanie błędów lub bardziej zawiłe konfiguracje mogą się jednak okazać trudniejsze, niżbyśmy chcieli.</p>



<p>Jeśli potrzebujemy więc w krótkim czasie napisać testy na potrzeby danego projektu i nie jest ich dużo, to śmiało możemy użyć Cypressa. Jego bezproblemowa konfiguracja i prosta składnia wybaczą niedobory wiedzy o JavaSripcie. Proste rzeczy w Cypressie są… naprawdę proste. Jeśli jednak projekt jest bardziej wymagający, to i bardziej wymagająca będzie konfiguracja Cypressa, środowiska uruchomieniowego czy licznych pluginów, niekoniecznie zgodnych z najnowszymi wydaniami Cypressa. Jeśli JavaScript nie jest wam jednak obcy, to Cypress może się okazać nowym rozwiązaniem dla waszego projektu.</p>



<p>Przykładowy kod możecie znaleźć na moim <strong>Githubie</strong>:<br><a href="https://github.com/sszemer/cypress.io" target="_blank" rel="noreferrer noopener">https://github.com/sszemer/cypress.io</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/testy-e2e-cypress/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Co łączy testera z branżą filmową? Czyli scenariusze testowe bez tajemnic</title>
		<link>https://nearshore-it.eu/pl/artykuly/scenariusze-testowe/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/scenariusze-testowe/#respond</comments>
		
		<dc:creator><![CDATA[Paweł Chojnacki]]></dc:creator>
		<pubDate>Wed, 28 Sep 2022 05:54:39 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[QA]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/scenariusze-testowe/</guid>

					<description><![CDATA[W branży filmowej scenarzysta tworzy różnorodne fabuły, szkice postaci, opisy miejsc akcji oraz dialogi. To właśnie w dużej mierze dzięki scenarzyście powstają fantastyczne filmy, wspaniałe przedstawienia teatralne lub wciągające programy i seriale telewizyjne. W tym artykule postaram się przybliżyć wam jednak inny rodzaj scenariusza, który również odgrywa znaczącą rolę, ale w świecie wytwarzania oprogramowania. Scenariusz testowy, bo o nim mowa, tworzy tester oprogramowania lub QA.]]></description>
										<content:encoded><![CDATA[
<p>Jak scenariusz testowy pomaga na późniejszych etapach pracy rozwoju oprogramowania? Jak pisać scenariusze testowe? Czym różnią się scenariusze testowe i przypadki testowe? Sprawdźmy!</p>



<div class="table-of-contents">
    <p class="title"></p>
    <ol>
                    <li><a href="#Inny-rodzaj-scenariusza,-czyli-kilka-słów-o-scenariuszach-testowych">1.  Inny rodzaj scenariusza, czyli kilka słów o scenariuszach testowych</a></li>
                    <li><a href="#Czym-jest-scenariusz-testowy?-">2.  Czym jest scenariusz testowy? </a></li>
                    <li><a href="#Miniscenariusz-testowy,">3.  Kilka słów o przypadkach testowych</a></li>
                    <li><a href="#Przepis-na-przypadek-testowy">4.  Przepis na przypadek testowy</a></li>
                    <li><a href="#Przykład-scenariusza-testowego">5.  Przykład scenariusza testowego</a></li>
                    <li><a href="#podsumowanie">6.  Podsumowanie</a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="Inny-rodzaj-scenariusza,-czyli-kilka-słów-o-scenariuszach-testowych">Inny rodzaj scenariusza, czyli kilka słów o scenariuszach testowych</h2>



<p>Czy są jakieś podobieństwa między scenariuszem filmowym a scenariuszem testowym? Owszem, można pewne zauważyć. Scenariusz filmowy opisuje zwykle pewną fabułę, historię – scenariusz testowy również, ale bardziej w aspekcie technicznym. Przedstawia on zazwyczaj <strong>listę wykonywanych akcji w danym oprogramowaniu</strong> – historię użytkownika, który porusza się np. po aplikacji webowej, mobilnej lub desktopowej. Jest to bardzo ważny rodzaj dokumentacji, dzięki której testerzy oprogramowania mogą zweryfikować, czy dane oprogramowanie działa poprawnie, sprawdzić działanie dostępnych funkcji i upewnić się, czy system spełnia wymogi stawiane przez klientów.</p>



<p><strong>Przeczytaj także:</strong> <a href="https://jcommerce.catdesignapp.com/testowanie-oprogramowania" target="_blank" rel="noopener">Testowanie oprogramowania: co warto wiedzieć?</a></p>



<h2 class="wp-block-heading" id="Czym-jest-scenariusz-testowy?-">Czym jest scenariusz testowy?&nbsp;</h2>



<p>Zacznijmy od definicji scenariusza testowego <a href="https://istqb-glossary.page/test-scenario/" target="_blank" rel="noopener">ISTQB</a>. Według niej jest to:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p> „Dokument zawierający sekwencję działań wymaganych do wykonania testu. Znany również jako skrypt testowy lub manualny skrypt testowy&#8221;.</p>
</blockquote>



<h3 class="wp-block-heading">Tworzenie scenariusza testowego polega na:</h3>



<ul class="wp-block-list">
<li>Identyfikacji scenariusza testowego</li>



<li>Stworzeniu wykazu czynności przygotowawczych scenariusza testowego</li>



<li>Stworzeniu wykazu przypadków testowych</li>



<li>Stworzeniu wykazu czynności końcowych</li>
</ul>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.09.21_graphic_2.png" alt="tworzenie scenariusza testowego" class="wp-image-68135" title="Co łączy testera z branżą filmową? Czyli scenariusze testowe bez tajemnic 15"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">Ale po co pisać scenariusz testowy? Przecież logowanie do aplikacji jest proste…</h2>



<p>Często można się spotkać z opiniami osób, które twierdzą, że tworzenie tego typu dokumentacji, jaką jest scenariusz testowy, jest bezużyteczne. Argumenty? „Logowanie jest przecież dziecinnie proste, to jest rzecz oczywista, a rozpisywanie tego wszystkiego to strata czasu…”. Ja sam, pracując w branży testerskiej w różnych projektach, spotkałem się z tego typu tokiem myślenia.</p>



<h3 class="wp-block-heading">Zalety posiadania scenariuszy testowych</h3>



<p>Tworzenie dokładnych, przemyślanych, dobrze zaprojekowanych scenariuszy testowych jest jak najbardziej potrzebne i przynosi wiele korzyści. Najważniejsze z nich:</p>



<ul class="wp-block-list">
<li>przejrzyste scenariusze testowe są doskonałą pomocą dla nowo zatrudnionych w firmie testerów. Dzięki nim proces zapoznania się z daną aplikacją oraz wdrożenia do projektu jest o wiele szybszy,</li>



<li>dobrze przygotowany scenariusz jest świetną podstawą do manualnych <a href="https://nearshore-it.eu/pl/artykuly/testy-regresji/" data-type="link" data-id="https://nearshore-it.eu/pl/artykuly/testy-regresji/">testów regresji</a> (jeśli scenariusz nie jest zautomatyzowany). Trzymając się danego scenariusza, tester wykonuje zawsze te same kroki, co pozwala zachować powtarzalność testów. Bez scenariusza testowego byłoby trudno zapamiętać całą historię użytkownika i testowanie oprogramowania stałoby się chaotyczne,</li>



<li>scenariusze testowe są często bazą do późniejszej <a href="https://nearshore-it.eu/pl/artykuly/automatyzacja-testow-obalamy-mity">automatyzacji</a> danej historyjki użytkownika. W oparciu o taką dokumentację znacznie łatwiej jest implementować testy automatyczne z gwarancją, że nie pominie się ważnych części systemu.</li>
</ul>



<p></p>



<h2 class="wp-block-heading" id="Miniscenariusz-testowy,">Miniscenariusz testowy, czyli kilka słów o przypadkach testowych</h2>



<p>W praktyce najczęściej spotykam się z sytuacją, że dana aplikacja jest na początkowym etapie rozwoju i dany scenariusz testowy opisuje np. tylko akcje logowania do systemu. Gdy taki scenariusz jest jeszcze na etapie, na którym są rozpisane tylko akcje logowania, to wówczas mamy do czynienia z przypadkiem testowym. Tym samym odpowiadam na częste pytanie początkujących testerów:<strong> „Co odróżnia przypadek testowy od scenariusza testowego?&#8221;.</strong></p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.09.21_graphic_3_mobile.png" alt="Przypadki użycia do wykonywania danego scenariusza testowego" class="wp-image-68139" title="Co łączy testera z branżą filmową? Czyli scenariusze testowe bez tajemnic 16"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Na kolejnych etapach projektu powstają coraz to nowsze historyjki użytkownika, więc istnieje potrzeba tworzenia kolejnych przypadków testowych. Przykładowa sytuacja: programiści dodali opcję zmiany hasła po zalogowaniu – powstaje kolejny przypadek testowy.</p>



<p>Wraz z rozwojem aplikacji powstaje coraz to więcej przypadków testowych, które po zebraniu <strong>tworzą dany scenariusz testowy</strong> – historyjkę użytkownika. Zbiór przypadków testowych będzie zatem niezbędny do realizacji danego scenariusza testowego celem sprawdzenia poprawności działania systemu w jakimś zakresie.</p>



<h2 class="wp-block-heading" id="Przepis-na-przypadek-testowy">Przepis na przypadek testowy</h2>



<p>Jeśli chodzi o formę przypadków testowych, często jest ona elastyczna, w zależności od danego projektu i klienta. Jednak przyjęło się, że przypadek testowy powinien zawierać następujące elementy:</p>



<ul id="block-6138b0b5-e2fa-4551-a31b-a18d696c54be" class="wp-block-list">
<li>Tytuł, ID&nbsp;oraz&nbsp;informacje o&nbsp;testerze, który&nbsp;tworzy dany przypadek</li>



<li>Krótki opis, wymagania biznesowe, do&nbsp;których&nbsp;się odnosi</li>



<li>Warunki wstępne</li>



<li>Kroki testowe</li>



<li>Oczekiwany rezultat</li>
</ul>



<div style="height:32px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Przykład-scenariusza-testowego">Przykład scenariusza testowego</h2>



<p>Scenariusze testowe mają elastyczne formy. Jedne są mniej rozbudowane, inne bardziej, na przykład zawierają dane testowe, informacje o środowisku testowym, statusy, etykiety itp.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.09.21_graphic_1.png" alt="manualny skrypt testowy do uruchomienia zestawu przypadków testowych" class="wp-image-68141" title="Co łączy testera z branżą filmową? Czyli scenariusze testowe bez tajemnic 17"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="podsumowanie">Scenariusze testów: podsumowanie</h2>



<p>Scenariusze testów są pomocne nie tylko w branży filmowej. Scenariusz testowy jest ważnym elementem codziennej pracy w wielu firmach dostarczających oprogramowanie na całym świecie. Dzięki nim testowanie aplikacji dla różnych platform jest wykonywane skutecznie, a ryzyko pojawienia się błędów w oprogramowaniu na etapie produktu końcowego znacząco maleje.</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/scenariusze-testowe/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Złote zasady wytwarzania oprogramowania w przemyśle kosmicznym</title>
		<link>https://nearshore-it.eu/pl/artykuly/oprogramowanie-w-przemysle-kosmicznym/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/oprogramowanie-w-przemysle-kosmicznym/#respond</comments>
		
		<dc:creator><![CDATA[Monika Wojciechowska]]></dc:creator>
		<pubDate>Tue, 16 Aug 2022 08:57:00 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[QA]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/oprogramowanie-w-przemysle-kosmicznym/</guid>

					<description><![CDATA[Opisane w moim poprzednim artykule przykłady misji kosmicznych, w których wystąpiły błędy oprogramowania, ukazują, że w niektórych przypadkach lepszy, bardziej rzetelny proces testów mógłby zapobiec ich wystąpieniu. Często można wskazać konkretny przypadek testowy, który został pominięty. Powody? Niewłaściwe zarządzanie lub błędna, niestarannie wykonana analiza ryzyka. Dziś natomiast skupimy się na najważniejszych zasadach wytwarzania oprogramowania w przemyśle kosmicznym, które zwiększają szanse powodzenia tych nieraz niebotycznie kosztownych projektów.]]></description>
										<content:encoded><![CDATA[
<div class="table-of-contents">
    <p class="title"></p>
    <ol>
                    <li><a href="#Test-what-you-fly-and-fly-what-you-test">1.  Test what you fly and fly what you test </a></li>
                    <li><a href="#Testuj,-żeby-ujawniać-błędy,-a-nie-dowodzić-ich-braku">2.  Testuj, żeby ujawniać błędy, a nie dowodzić ich braku  </a></li>
                    <li><a href="#Testuj-najwcześniej,-jak-tylko-się-da">3.  Testuj najwcześniej, jak tylko się da </a></li>
                    <li><a href="#Testuj-na-czas">4.  Testuj na czas </a></li>
                    <li><a href="#SpaceX-–-jak-oni-testują?">5.  SpaceX – jak oni testują? </a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="Test-what-you-fly-and-fly-what-you-test">Test what you fly and fly what you test&nbsp;</h2>



<p>Generalna zasada w przemyśle kosmicznym brzmi:<strong> „Test what you fly and fly what you test” </strong>i oznacza, że należy sprawdzać te komponenty misji, które mają być używane, oraz wykorzystywać te, które zostały przetestowane. Brzmi banalnie, lecz to właśnie ścisłe trzymanie się tej zasady mogłoby pomóc w wielu projektach. <a href="https://nearshore-it.eu/pl/artykuly/testowanie-oprogramowania/" data-type="jpro">Testowanie</a> w przypadku misji kosmicznych jest o tyle trudne, że nie zawsze możliwe jest wierne odtworzenie warunków środowiskowych lotu lub takich, jakie panują na innej planecie. Tworzy się w tym celu specjalne laboratoria bądź symulacje komputerowe, lecz nawet wtedy stanowi to duże wyzwanie. ISTQB mówi wprost – <strong>testowanie gruntowne jest niemożliwe. </strong>Tylko w najprostszych przypadkach da się sprawdzić wszystkie kombinacje danych i warunków, a złożone systemy wykorzystywane w misjach kosmicznych zdecydowanie nie należą do prostych. Ponadto testowanie jest zależne od kontekstu. Tak specyficzne systemy wymagają również dostosowanych testów.&nbsp;</p>



<h2 class="wp-block-heading" id="Testuj,-żeby-ujawniać-błędy,-a-nie-dowodzić-ich-braku">Testuj, żeby ujawniać błędy, a nie dowodzić ich braku&nbsp;&nbsp;</h2>



<p>Kolejną zasadą, która odgrywa ogromną rolę w <a href="https://nearshore-it.eu/pl/artykuly/bledy-oprogramowania-misje/" data-type="jpro" data-id="66656">testowaniu oprogramowania misji kosmicznych, </a>jest testowanie jako<strong> proces ujawniający istnienie błędów, a nie dowodzący ich braku.</strong> Jest to pesymistyczne, ale nader realistyczne podejście, o którym zapomniano choćby w przypadku <a href="https://www.dobreprogramy.pl/najdrozszy-bug-w-historii-przez-blad-w-kodzie-rozpadla-sie-rakieta,6676587891968832a" target="_blank" rel="noopener">katastrofy Ariane 5 z satelitami Cluster.</a> Wspomina o tym nawet oficjalny raport, w którym stwierdzono, że oprogramowanie zostało uznane za poprawne, dopóki nie okazało się, że jest wadliwe.&nbsp;</p>



<h2 class="wp-block-heading" id="Testuj-najwcześniej,-jak-tylko-się-da">Testuj najwcześniej, jak tylko się da&nbsp;</h2>



<p>Równie istotna jest wspomniana już wcześniej zasada związana z testowaniem tzw.<a href="https://nearshore-it.eu/pl/artykuly/testuj-przed-wszystkimi-czyli-shift-left-testing-w-praktyce/" data-type="jpro"> <em>shift-left</em>.</a> Wykrycie błędów na wczesnym etapie projektu pozwala zaoszczędzić czas i pieniądze. W wielu misjach błędy pojawiły się już na etapie projektowania i nie zostały wykryte z powodu niedostatecznie rzetelnych procesów weryfikacji.&nbsp;&nbsp;</p>



<div style="height:32px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.06.09_graphic_3.png" alt="wytwarzanie oprogramowania - jak to się robi w przemyśle kosmicznym" class="wp-image-5489" title="Złote zasady wytwarzania oprogramowania w przemyśle kosmicznym 18"></figure></div>


<div style="height:32px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Jeśli chodzi o stosowane w NASA praktyki, to wiadomo, że organizacja kładzie duży nacisk na testowanie w cyklu tworzenia oprogramowania. Szacuje się, że<strong> około 40% budżetu projektu jest poświęcone właśnie na testy.</strong> Aktywności związane z <a href="https://nearshore-it.eu/pl/artykuly/quality-assurance-czyli-jak-zagwarantowac-jakosc-i-bezpieczenstwo-w-projektach-it/" target="_blank" rel="noreferrer noopener">zapewnianiem jakości</a> rozpoczynane są zwykle na etapie analizy wymagań, które muszą być zrozumiałe, szczegółowe, realistyczne i adekwatne do możliwości, a także testowalne. Celem dobrze zaprojektowanej specyfikacji oprogramowania jest to, aby inżynier sprzętu rozumiał, jak oprogramowanie kieruje systemem. We wczesnych stadiach testowania oprogramowania NASA używa często symulacji danych wejściowych. W późniejszych fazach testowanie obejmuje również sprzęt do testowania operacji i interfejsów, poleceń naziemnych i końcowej fazy. Dużą wagę przykłada się wtedy nawet do takich szczegółów jak odpowiednia długość kabli. Ponadto większość sprzętu NASA nie może być naprawiana w trakcie eksploatacji, co nadaje jeszcze większą wagę zapewnianiu jakości już na etapie jego tworzenia.&nbsp;</p>



<h3 class="wp-block-heading">Quality Assurance</h3>



<p>Zapewnianie jakości w projektach IT. Sprawdź jakie trendy ukształtują rynek, na którym będzie wysokie zapotrzebowanie na testerów oprogramowania i zespoły zarządzania jakością.</p>



<p><strong>Przeczytaj artykuł:</strong> <a href="https://nearshore-it.eu/pl/artykuly/quality-assurance-czyli-jak-zagwarantowac-jakosc-i-bezpieczenstwo-w-projektach-it/" data-type="link" data-id="https://nearshore-it.eu/pl/artykuly/quality-assurance-czyli-jak-zagwarantowac-jakosc-i-bezpieczenstwo-w-projektach-it/">Quality Assurance (QA) &#8211; zapewnij jakość w Twoich projektach IT</a></p>



<h2 class="wp-block-heading" id="Testuj-na-czas">Testuj na czas&nbsp;</h2>



<p>Innym istotnym dla testowania w misjach kosmicznych czynnikiem jest czas. Chodzi nie tylko o okna pogodowe umożliwiające start i synchronizację działań w czasie, ale także logistykę na etapie wytwarzania produktu (np. przygotowanie komponentu lub systemu w odpowiednim terminie, aby można było go przetestować w komorze próżniowej). Nawet tego typu testy zazwyczaj nie są jednak w stanie zagwarantować identycznych warunków jak te,&nbsp;które panują w kosmosie.&nbsp;</p>



<p>Proces testowania w NASA obejmuje także najnowsze i najbardziej zaawansowane technologie, które pozwalają też na oszczędności. Jedną z nich jest technologia <em>Digital Twin</em>, polegająca na tworzeniu dokładnych i szczegółowych cyfrowych replik produktów, procesów i systemów.&nbsp;</p>



<h2 class="wp-block-heading" id="SpaceX-–-jak-oni-testują?">SpaceX – jak oni testują? &nbsp;</h2>



<p>Również w SpaceX powszechną praktyką jest testowanie połączeń różnych systemów i symulacja warunków ich działania. Do testów oprogramowania wykorzystuje się m.in. tzw. <em>table rocket</em>. Polega to na ułożeniu wszystkich komputerów i kontrolerów lotu na stole i połączeniu ich tak, jakby były w prawdziwej rakiecie. W celu wykonania testów integracyjnych przeprowadza się na komponentach pełną symulację lotu, monitorując wydajność i wychwytując potencjalne awarie. W przypadku testów obciążeniowych inżynierowie robią to, co nazywają „przecinaniem sznurków” – losowo wyłączają komputer pokładowy w trakcie symulacji, aby zobaczyć, jak zareaguje. Ten poziom symulacji, połączony ze znacznym udziałem <a href="https://nearshore-it.eu/pl/artykuly/automatyzacja-testow-obalamy-mity/" data-type="jpro">automatyzacji</a>, pozwala osiągać świetne wyniki.<strong> </strong></p>



<p><strong>SpaceX jest w stanie bez obaw wprowadzać zmiany w oprogramowaniu produktu nawet 17 000 razy dziennie! </strong>Z tego, jak SpaceX tworzy oprogramowanie, możemy wywnioskować, że ponowne wykorzystywanie kodu, <a href="https://nearshore-it.eu/pl/artykuly/kim-jest-devops-i-jak-wspiera-projekty-it/" data-type="jpro">kultura DevOps</a> i ciągły przepływ testowania są dla nich kluczem do sukcesu.&nbsp;</p>



<h2 class="wp-block-heading">Podsumowanie&nbsp;&nbsp;</h2>



<p>Powyższe obserwacje, chociaż kontekst może wydawać się odległy o lata świetlne, są całkiem bliskie projektowej codzienności każdego z nas. </p>



<p>Wiele z opisanych w artykule przypadków dostarcza uniwersalnych wniosków, które mogą znaleźć zastosowanie w projektach z innych branż, nie tylko kosmicznej. Mowa tu, chociażby o takich obszarach jak:&nbsp;&nbsp;</p>



<ul class="wp-block-list">
<li>analiza ryzyka,</li>



<li>cykl życia oprogramowania (<em>shift-left </em>i włączenie procesu testowania do wczesnych faz powstawania software’u),</li>



<li>testowanie produktu w środowiskach o różnych konfiguracjach i zasobach (dev, stage, preprod),</li>



<li>automatyzacja procesu wytwarzania i integracji oprogramowania (CI/CD),</li>



<li>pokrywanie funkcjonalności różnymi <a href="https://nearshore-it.eu/pl/artykuly/minimalistyczny-przypadek-testowy">przypadkami testowymi. </a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/oprogramowanie-w-przemysle-kosmicznym/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Test regresji – strata czasu czy must have w projekcie?</title>
		<link>https://nearshore-it.eu/pl/artykuly/testy-regresji/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/testy-regresji/#respond</comments>
		
		<dc:creator><![CDATA[Natalia Klockiewicz]]></dc:creator>
		<pubDate>Wed, 03 Aug 2022 11:41:35 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[QA]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/testy-regresji/</guid>

					<description><![CDATA[Mówi się, że lepsze jest wrogiem dobrego, ale też – że jedyną stałą jest zmiana. W czasie rozwoju oprogramowania nie sposób uniknąć wprowadzania nowych funkcji, zmian w oprogramowaniu. Często aktualizacja wersji oprogramowania jest konieczna, żeby działało ono poprawnie. Weryfikacja zmian to ważny element tego procesu – i chodzi tu nie tylko o testowanie istniejącej funkcjonalności. Testowanie regresji pozwala upewnić się, czy zmiana nie narobiła bałaganu w innej, zdawałoby się, niepowiązanej części oprogramowania.]]></description>
										<content:encoded><![CDATA[
<div class="table-of-contents">
    <p class="title"></p>
    <ol>
                    <li><a href="#Rozwój-oprogramowania-a-testowanie-regresyjne">1.  Rozwój oprogramowania a testowanie regresyjne</a></li>
                    <li><a href="#Co-to-są-testy-regresji?">2.  Co to są testy regresji?</a></li>
                    <li><a href="#Jak-często-przeprowadzać-testy-regresji?">3.  Jak często przeprowadzać testy regresji?</a></li>
                    <li><a href="#Na-jakim-poziomie-przeprowadza-się-testy-regresji?">4.  Na jakim poziomie przeprowadza się testy regresji?</a></li>
                    <li><a href="#Tworzenie-przypadków-testowych">5.  Tworzenie przypadków testowych</a></li>
                    <li><a href="#Wybór-przypadków-testowych-w-regresji">6.  Wybór przypadków testowych w regresji</a></li>
                    <li><a href="#Co-robimy-podczas-sprawdzania-regresji?-">7.  Co robimy podczas sprawdzania regresji? </a></li>
                    <li><a href="#Regresja-a-retesty-–-jaka-jest-różnica?">8.  Regresja a retesty – jaka jest różnica?</a></li>
                    <li><a href="#W-jaki-sposób-wykonujemy-testy?-Czyli-automatyzacja-w-regresji">9.  W jaki sposób wykonujemy testy? Czyli automatyzacja w regresji</a></li>
                    <li><a href="#Testowanie-regresji-–-korzyści-">10.  Testowanie regresji – korzyści </a></li>
                    <li><a href="#Podsumowanie-">11.  Podsumowanie </a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="Rozwój-oprogramowania-a-testowanie-regresyjne">Rozwój oprogramowania a testowanie regresyjne</h2>



<p>Wyobraźmy sobie, że mamy już działającą w środowisku produkcyjnym aplikację. Klient jest bardzo zadowolony, ponieważ cieszy się ona popularnością wśród użytkowników, i chce dodać nową funkcjonalność, która ma zwiększyć ich zadowolenie oraz spowodować napływ nowych. Zespół projektowy już pali się do pracy: nowa funkcjonalność, nowe zadanie, nowe wyzwanie! Po ustaleniu szczegółów developerzy ochoczo zabrali się do pracy. Następnie testerzy sprawdzili nową funkcjonalność. Po drobnych poprawkach wszystko działa. Czas wrzucić nową funkcjonalność na produkcję. Gdy nadszedł dzień wypuszczenia nowej wersji aplikacji, wszyscy byli szczęśliwi, że projekt udało się zrealizować w terminie i zgodnie z wymaganiami.</p>



<p>Niestety, szczęście nie trwało długo… Już dzień później serwis został zasypany zgłoszeniami, że nie wszystkie dotychczasowe funkcje aplikacji działają prawidłowo. W zespole zdziwienie: przecież nawet nie ruszaliśmy tych funkcjonalności, a nowo dodana działa w prawidłowy sposób. <strong>Co poszło nie tak?</strong></p>



<h3 class="wp-block-heading">Smutne skutki braku testów regresji&#8230;</h3>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<p>Otóż zabrakło jednego, ale jakże istotnego elementu w procesie testowania. <strong>Nie sprawdzono, czy nowo dodana funkcjonalność nie wpłynęła na te, które już w aplikacji istniały. </strong>Innymi słowy, nie przeprowadzono testów regresji.</p>



<p>Brak testów regresji spowodował, że aplikacja nie tylko nie zyskała nowych użytkowników, ale straciła też znaczną część dotychczasowych. Utraciła swoją wysoką pozycję w rankingach, spadły zyski, co spowodowało spore niezadowolenie klienta.</p>
</div></div>



<h2 class="wp-block-heading" id="Co-to-są-testy-regresji?">Co to są testy regresji?</h2>



<p>Definicja według słownika ISTQB mówi, że testowanie regresji to: <em>„Rodzaj testowania związanego ze zmianami mający na celu wykrycie, czy defekty zostały wprowadzone lub odkryte w niezmienionych obszarach oprogramowania”.</em></p>



<p>Przedstawiając to w bardziej obrazowy sposób: w trakcie testów sprawdzamy, czy „podczas kładzenia tapety w jednym pokoju nie odpadł nam tynk ze ściany w drugim pokoju&#8221;. <strong>Wszelkie zmiany w kodzie w jednym miejscu mogą spowodować zepsucie funkcji w innym,</strong> choć na pierwszy rzut oka wydaje się, że nie są one ze sobą powiązane. Dlatego tak ważne jest ponowne przetestowanie oprogramowania po wprowadzonych zmianach.</p>



<p><strong>Przeczytaj artykuł: </strong><a href="https://nearshore-it.eu/pl/artykuly/testowanie-oprogramowania/">Testowanie oprogramowania – poznaj świat testów</a></p>



<h2 class="wp-block-heading" id="Jak-często-przeprowadzać-testy-regresji?">Jak często przeprowadzać testy regresji?</h2>



<p>Widzimy już, jak istotne jest, żeby upewnić się, czy zmiany nie wpłynęły negatywnie na dotychczasowe funkcje, i znaleźć błędy odpowiednio wcześnie. Wprowadzane zmiany mogą wynikać z modyfikacji wymagań i kodu oprogramowania, dodania nowych funkcjonalności czy naprawy usterki, dlatego ważne jest, aby testy regresji były przeprowadzane tak często, jak wydawana jest nowa wersja oprogramowania.</p>



<h2 class="wp-block-heading" id="Na-jakim-poziomie-przeprowadza-się-testy-regresji?">Na jakim poziomie przeprowadza się testy regresji?</h2>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="alignleft size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/2021.07.06_jpro_graphic_piramida_testow.png" alt="piramida testów " class="wp-image-65578" style="object-fit:cover" title="Test regresji – strata czasu czy must have w projekcie? 19"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Testy regresji są niezależne od <a href="https://nearshore-it.eu/pl/artykuly/piramida-testow-czyli-co-kiedy-i-jak-testowac-zeby-testy-przyniosly-zysk" data-type="jpro" data-id="54090">poziomu testów </a>oraz ich rodzajów. Można je przeprowadzać na poziomie testów modułowych, integracyjnych, systemowych czy też akceptacyjnych i niezależnie od tego, czy mamy do czynienia z <a href="https://nearshore-it.eu/pl/artykuly/testowanie-funkcjonalne" data-type="jpro" data-id="66532">testami funkcjonalnymi,</a> czy <a href="https://nearshore-it.eu/pl/artykuly/testy-niefunkcjonalne" data-type="jpro" data-id="62596">niefunkcjonalnymi.</a></p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Tworzenie-przypadków-testowych">Tworzenie przypadków testowych</h2>



<p>Podczas sprawdzania oprogramowania tester tworzy przypadki testowe. Nie wszystkie jednak wejdą do puli przypadków wykonywanych podczas regresji. Od czego to zależy?&nbsp;</p>



<p><strong>Przede wszystkim od ich ilości i czasu, jaki trzeba poświęcić, aby je wykonać. </strong>Jeżeli mamy do czynienia z nierozbudowanym systemem i wykonanie wszystkich przypadków testowych podczas przeprowadzania testów regresji nie zajmie zbyt wiele czasu – to jak najbardziej można je wykonać.</p>



<p>Najczęściej jednak systemy czy aplikacje są mocno rozbudowane i zależne od innych systemów. Nie jesteśmy wtedy w stanie użyć wszystkich utworzonych przypadków testowych. Czym w takim razie się kierować podczas wyboru przypadków, które powinny się znaleźć na liście podczas wykonywania testów regresji?</p>



<h2 class="wp-block-heading" id="Wybór-przypadków-testowych-w-regresji">Wybór przypadków testowych w regresji</h2>



<p>Jeżeli musimy się ograniczyć, warto odpowiednio dobrać zestaw przypadków testowych. Ujmijmy koniecznie te przypadki, które:</p>



<ol style="list-style-type:1" class="wp-block-list">
<li><strong>Sprawdzają najbardziej krytyczne funkcje </strong>– przede wszystkim należy uwzględnić przypadki testowe, które weryfikują działanie głównych funkcji aplikacji albo sprawdzają często używane funkcjonalności.</li>



<li><strong>Powstały na bazie defektów </strong>– przypadki testowe, które powstały na bazie zgłoszonych defektów, są ważne.</li>



<li><strong>Weryfikują podatność na błędy </strong>– warto się zastanowić, który obszar aplikacji jest najbardziej narażony na błędy po wprowadzonej zmianie, i podczas testów regresji wykonać także przypadki testowe z danego obszaru.&nbsp;</li>



<li><strong>Sprawdzają nową funkcjonalność </strong>– nie możemy również zapomnieć o przypadkach testowych, które sprawdzają nowo dodaną funkcjonalność.&nbsp;</li>



<li><strong>Wymagają wielu kroków </strong>– pamiętajmy też o złożonych przypadkach testowych wymagających wykonania dłuższej sekwencji czynności.</li>
</ol>



<h3 class="wp-block-heading">Odpowiedni priorytet</h3>



<p>Ważne jest również odpowiednie nadanie priorytetu przypadkom testowym. Pomaga to w ich doborze, szczególnie wtedy, kiedy zakres obszaru testów jest duży, a czasu na ich wykonanie – mało.</p>



<p>W takiej sytuacji tester, uwzględniając czas, jaki ma na wykonanie testów, wybiera przypadki testowe o najwyższym priorytecie. Daje nam to pewność, że sprawdzone będą najbardziej krytyczne obszary aplikacji. Pozostałe przypadki z niższym priorytetem, które nie były wykonane w czasie regresji, należy umieścić w raporcie końcowym, odpowiednio je oznaczając jako niewykonane. </p>



<h3 class="wp-block-heading">Jak nadawać priorytety przypadkom testowym?</h3>



<p>Podczas nadawania priorytetów przypadkom testowym należy wziąć pod&nbsp;uwagę kilka czynników:</p>



<ul class="wp-block-list">
<li>Ważność danej funkcjonalności z punktu widzenia biznesowego</li>



<li>Jej dostępność / widoczność dla użytkownika końcowego</li>



<li>Złożoność danej funkcjonalności</li>



<li>Jej wpływ na szeroko pojęte finanse</li>



<li>Czy była tworzona pod presją czasu</li>



<li>Czy w podobnych funkcjonalnościach występowały problemy</li>
</ul>



<p>Uwzględniając powyższe aspekty i odpowiadając sobie na zadane pytania, przypisanie priorytetu przypadkom nie powinno stwarzać większego problemu. A praca włożona w ten proces zaowocuje w sytuacji, gdy czas na testy będzie mocno ograniczony.</p>



<h3 class="wp-block-heading">Przypadki testowe wielokrotnego użytku w regresji</h3>



<p>Listę przypadków testowych wytypowanych do testów regresji należy weryfikować cyklicznie. Część z nich będzie można wykorzystać w kolejnych testach regresji, są to tzw. <strong>przypadki wielokrotnego użytku.</strong> Inne zaś mogą okazać się już nieaktualne, a co za tym idzie – nieprzydatne w następnych cyklach regresji i taki „przestarzały przypadek&#8221; należy usunąć z listy testów regresji.&nbsp;</p>



<p>Weryfikacja przydatności polega głównie na próbie wykonania danego przypadku testowego. Jeżeli nie da się odtworzyć opisanych kroków lub dana funkcjonalność już nie istnieje, to taki przypadek testowy należy usunąć. Często zdarza się, że ścieżka wykonania lub oczekiwany rezultat uległy niewielkiej modyfikacji i wystarczy tylko zaktualizować dany przypadek testowy. Weryfikacja zbioru przypadków testowych wytypowanych do testów regresji jest konieczna, gdyż pozostawienie nieaktualnych przypadków testowych daje nam w raportach końcowych<strong> zafałszowany obraz stanu aplikacji,</strong> <strong>a cały proces regresji nie przynosi żadnej wartości.</strong></p>



<h2 class="wp-block-heading" id="Co-robimy-podczas-sprawdzania-regresji?-">Co robimy podczas sprawdzania regresji?&nbsp;</h2>



<h3 class="wp-block-heading">Sprawdzamy oczekiwany rezultat</h3>



<p>Podczas przeprowadzania testów regresji sprawdzamy, czy system zachowuje się w oczekiwany sposób. Jeżeli testy regresji są przygotowane w formie przypadków testowych, to po wykonaniu opisanych w przypadku kroków sprawdzamy, czy otrzymujemy to, co jest przedstawione jako oczekiwany rezultat.</p>



<h3 class="wp-block-heading">Weryfikujemy z checklistą&nbsp;</h3>



<p>Innym sposobem na testowanie regresji jest przygotowanie listy kontrolnej, czyli tzw. checklisty. Lista kontrolna to zbiór operacji w aplikacji, które będą testowane, zapisany w formie krótkich haseł. <strong>Checklista jest stosunkowo łatwa w przygotowaniu i utrzymaniu i idealnie sprawdza się, kiedy osoby testujące bardzo dobrze znają aplikację i nie potrzebują szczegółowo rozpisanych kroków.</strong> Osoby te wiedzą, jakie operacje należy sprawdzić w danym obszarze i jaki jest oczekiwany rezultat. </p>



<p>Niestety, w przypadku checklisty istnieje ryzyko, że nie wszystkie operacje, które powinny zostać sprawdzone, będą przetestowane. W celu uniknięcia takiej sytuacji dobrze jest aktualizować checklistę w czasie omawiania przez zespół zmian, jakie mają zostać wprowadzone. Również podczas procesu testowania danej funkcjonalności należy na bieżąco uzupełniać brakujące elementy, tak by podczas regresji lista była kompletna.</p>



<h3 class="wp-block-heading">Idealna checklista, czyli jaka?&nbsp;</h3>



<p><strong>Dobrze przygotowana checklista powinna być zwięzła, ale jednocześnie powinna obejmować wszystkie istotne funkcjonalności. </strong>Jeżeli system jest obszerny i checklista jest długa, to powinna być ona podzielona na odpowiednie kategorie, które jasno definiują obszar podlegający testowaniu. Warto też zadbać, by testowane operacje były ustawione w odpowiedniej kolejności, co przyspieszy testy i nie będzie trzeba wracać do już sprawdzonych rzeczy. Nie można zapomnieć, że każda checklista musi być rozbudowywana wraz z rozwojem oprogramowania.</p>



<h2 class="wp-block-heading" id="Regresja-a-retesty-–-jaka-jest-różnica?">Regresja a retesty – jaka jest różnica?</h2>



<p>Wiele osób, zwłaszcza stawiających pierwsze kroki w IT, zastanawia się, czy retesty i testy regresji to to samo.</p>



<ul class="wp-block-list">
<li><strong>Retest </strong>to pojedynczy test, który sprawdza, czy defekt został usunięty. To ponowne testowanie przypadku, którego rezultat końcowy był inny od oczekiwanego i zostało to zgłoszone jako błąd oraz naprawione przez programistę. Jeżeli po wprowadzonej poprawce system działa tak, jak tego oczekiwano, możemy zamknąć zgłoszenie. Natomiast jeżeli nadal nie otrzymujemy oczekiwanych rezultatów, zgłoszenie powinno pozostać nadal otwarte, gdyż wymaga dalszej analizy i naprawy.</li>



<li><strong>Regresja </strong>to zbiór testów, których wykonanie daje nam odpowiedź, czy cały moduł lub system nie zawiera błędów po wprowadzeniu zmian do kodu oprogramowania. Testy regresji są znacznie bardziej czasochłonne od retestów, ale pamiętajmy też, że są przeprowadzane w innym celu.</li>
</ul>



<h2 class="wp-block-heading" id="W-jaki-sposób-wykonujemy-testy?-Czyli-automatyzacja-w-regresji">W jaki sposób wykonujemy testy? Czyli automatyzacja w regresji<del></del></h2>



<p>To, w jaki sposób zostaną przeprowadzone testy regresyjne, zależy głównie od tego, z jak dużym systemem mamy do czynienia oraz często od dostępnego budżetu.</p>



<p>W małych projektach, gdy testy regresyjne nie zawierają dużej liczby przypadków testowych, <strong>często wystarczy wykonać test manualnie. </strong>Co jednak, jeśli do wykonania mamy ich tysiące i ręczne wykonywanie trwałoby miesiącami? Albo podczas wykonywania regresji wystąpiłby błąd blokujący dalszą pracę i po jego usunięciu trzeba by sprawdzić wszystko od nowa? <strong>Wtedy najlepszym rozwiązaniem jest zastosowanie testów automatycznych. </strong>Testy regresji są idealnym kandydatem do tego, by je zautomatyzować. Głównie dlatego, że wykonujemy je cyklicznie oraz dlatego, że testy automatyczne zdecydowanie skracają czas wykonania przypadków testowych. Jeśli jest ich kilka tysięcy, automatyzacja pozwala na sporą oszczędność czasu i nakładu pracy.</p>



<p>Oczywiście wprowadzenie <a href="https://nearshore-it.eu/pl/artykuly/automatyzacja-testow-obalamy-mity" data-type="jpro" data-id="53599">testów automatycznych</a> niesie za sobą koszty związane np. z zakupem licencji dla narzędzi oraz zatrudnienia osoby z odpowiednimi kompetencjami. Nadal jednak koszty te w przypadku dużych projektów są znacznie niższe niż te ponoszone za każdym razem przy przeprowadzaniu regresji w sposób manualny.</p>



<h2 class="wp-block-heading">A jeśli nie możemy skorzystać z automatyzacji testów?</h2>



<p>Bardzo często w projektach stosuje się <strong>podejście mieszane,</strong> gdyż nie każdy przypadek testowy pozwala na automatyzację. Często problemem są złożone przypadki testowe, które trudno zautomatyzować, dlatego najczęściej wykonuje się je manualnie. Oczywiście najlepiej, jeśli przypadków do wykonania manualnego jest najmniej, a pozostałe są zautomatyzowane – wtedy proces regresji przebiega sprawnie i nie zajmuje tak dużo czasu.</p>



<h2 class="wp-block-heading" id="Testowanie-regresji-–-korzyści-">Testowanie regresji – korzyści&nbsp;</h2>



<p><strong>Proces testowania regresji wymaga pracy i odpowiedniego przygotowania.</strong> Niewątpliwie pociąga za sobą też koszty związane z czasem, nakładem pracy czy narzędziami. Jednak mądrze zaplanowany i odpowiednio przeprowadzony, przynosi korzyści znacznie przewyższające poczynioną inwestycję. Testowanie regresji zapobiega wprowadzeniu na produkcję defektów, przez które klient może ponieść wielotysięczne straty. Jeśli dojdzie do takiej sytuacji, to zespół musi zająć się naprawianiem defektów, przez co dalszy rozwój oprogramowania schodzi na dalszy plan i najczęściej jest odłożony w czasie.</p>



<p>Raport z testów regresji daje nam odpowiedź, czy dane oprogramowanie posiada oczekiwaną jakość i czy może zostać wdrożone w środowisku produkcyjnym. Często też wskazuje moduły czy obszary oprogramowania szczególnie podatne na defekty, co daje zespołowi możliwość zbadania problemu i objęcia tego obszaru szczególną uwagą.&nbsp;&nbsp;</p>



<h2 class="wp-block-heading" id="Podsumowanie-">Podsumowanie&nbsp;</h2>



<p>Testy regresji są bardzo ważnym etapem w procesie wytwarzania oprogramowania niezależnie od tego, w jakiej metodologii jest prowadzony projekt: czy w podejściu kaskadowym, czy zwinnym. Odpowiadają one na pytanie, w jakiej kondycji jest nasza aplikacja po wprowadzeniu zmian, oraz pozwalają na uniknięcie kosztów naprawy defektów, które mogłyby wydostać się na produkcję. A jak już wiadomo, <strong>koszty poniesione podczas naprawy takich błędów znacznie przewyższają te poniesione podczas procesu testowania regresji.</strong></p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/testy-regresji/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
