{"id":30366,"date":"2025-09-09T11:26:00","date_gmt":"2025-09-09T10:26:00","guid":{"rendered":"https:\/\/www.web-systems.pl\/automated-testing-web-apps-what-when-to-test\/"},"modified":"2026-09-30T23:06:46","modified_gmt":"2026-09-30T22:06:46","slug":"automated-testing-web-apps-what-when-to-test","status":"publish","type":"post","link":"https:\/\/www.web-systems.pl\/en\/automated-testing-web-apps-what-when-to-test\/","title":{"rendered":"Automated Testing for Web Apps: What to Test and When"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Testy automatyczne aplikacji webowej to skrypty, kt\u00f3re po ka\u017cdej zmianie w kodzie same sprawdzaj\u0105, czy najwa\u017cniejsze funkcje nadal dzia\u0142aj\u0105. W umowie z software housem dobrze mie\u0107 co najmniej trzy rzeczy: testy jednostkowe, testy end-to-end dla krytycznych \u015bcie\u017cek i uruchamianie ich w pipeline CI. Ten poradnik pisz\u0119 dla zamawiaj\u0105cego, kt\u00f3ry nie czyta kodu, a mimo to musi oceni\u0107 wycen\u0119 i zakres test\u00f3w. Znajdziesz tu rodzaje test\u00f3w opisane prostym j\u0119zykiem, kolejno\u015b\u0107 automatyzacji i list\u0119 pyta\u0144 do wykonawcy.<\/p>\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_86 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of contents<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.web-systems.pl\/en\/automated-testing-web-apps-what-when-to-test\/#Czym_sa_testy_automatyczne_aplikacji_webowej_i_po_co_zamawiajacemu\" >Czym s\u0105 testy automatyczne aplikacji webowej i po co zamawiaj\u0105cemu?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.web-systems.pl\/en\/automated-testing-web-apps-what-when-to-test\/#Rodzaje_testow_jednostkowe_integracyjne_end-to-end_i_regresji\" >Rodzaje test\u00f3w: jednostkowe, integracyjne, end-to-end i regresji<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.web-systems.pl\/en\/automated-testing-web-apps-what-when-to-test\/#Piramida_testow_ile_czego_potrzeba\" >Piramida test\u00f3w: ile czego potrzeba<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.web-systems.pl\/en\/automated-testing-web-apps-what-when-to-test\/#Co_automatyzowac_najpierw_Krytyczne_sciezki_aplikacji\" >Co automatyzowa\u0107 najpierw? Krytyczne \u015bcie\u017cki aplikacji<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.web-systems.pl\/en\/automated-testing-web-apps-what-when-to-test\/#Kiedy_testy_sie_uruchamiaja_testy_w_CICD\" >Kiedy testy si\u0119 uruchamiaj\u0105: testy w CI\/CD<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.web-systems.pl\/en\/automated-testing-web-apps-what-when-to-test\/#Testy_automatyczne_w_umowie_i_wycenie_o_co_zapytac_wykonawce\" >Testy automatyczne w umowie i wycenie: o co zapyta\u0107 wykonawc\u0119<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.web-systems.pl\/en\/automated-testing-web-apps-what-when-to-test\/#Najczestsze_pytania\" >Najcz\u0119stsze pytania<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.web-systems.pl\/en\/automated-testing-web-apps-what-when-to-test\/#Czy_mala_aplikacja_lub_MVP_potrzebuje_testow_automatycznych\" >Czy ma\u0142a aplikacja lub MVP potrzebuje test\u00f3w automatycznych?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.web-systems.pl\/en\/automated-testing-web-apps-what-when-to-test\/#Czym_roznia_sie_testy_end-to-end_od_testow_jednostkowych\" >Czym r\u00f3\u017cni\u0105 si\u0119 testy end-to-end od test\u00f3w jednostkowych?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.web-systems.pl\/en\/automated-testing-web-apps-what-when-to-test\/#Kto_utrzymuje_testy_po_oddaniu_aplikacji\" >Kto utrzymuje testy po oddaniu aplikacji?<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Czym_sa_testy_automatyczne_aplikacji_webowej_i_po_co_zamawiajacemu\"><\/span>Czym s\u0105 testy automatyczne aplikacji webowej i po co zamawiaj\u0105cemu?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n<p class=\"wp-block-paragraph\">To kod, kt\u00f3ry sprawdza inny kod. Odpala si\u0119 sam, bez testera klikaj\u0105cego po ekranach. Tester r\u0119czny za ka\u017cdym razem przechodzi scenariusz od nowa, a przy cz\u0119stych zmianach po prostu nie nad\u0105\u017ca (albo co\u015b pomija, bo jest pi\u0105tek po 16:00). Automat powtarza te same kroki identycznie, w kilka minut, przy ka\u017cdej poprawce. Co z tego ma firma? Mniej b\u0142\u0119d\u00f3w na produkcji, spokojniejsze wdra\u017canie nowych funkcji i \u0142atwiejsz\u0105 zmian\u0119 wykonawcy w przysz\u0142o\u015bci, bo nowy zesp\u00f3\u0142 od razu widzi, co psuje. Testy to cz\u0119\u015b\u0107 jako\u015bci, nie dodatek. A ich pomini\u0119cie to jeden z typowych problem\u00f3w, o kt\u00f3rych piszemy przy temacie <a href=\"https:\/\/www.web-systems.pl\/najczestsze-bledy-do-unikania-podczas-tworzenia-aplikacji-webowych\/\">b\u0142\u0119dy przy tworzeniu aplikacji<\/a>.<\/p>\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Rodzaje_testow_jednostkowe_integracyjne_end-to-end_i_regresji\"><\/span>Rodzaje test\u00f3w: jednostkowe, integracyjne, end-to-end i regresji<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n<p class=\"wp-block-paragraph\">Ka\u017cdy rodzaj sprawdza aplikacj\u0119 na innym poziomie, od pojedynczej funkcji po ca\u0142\u0105 \u015bcie\u017ck\u0119 u\u017cytkownika. R\u00f3\u017cnice trzeba zna\u0107, bo w ofertach nazwy cz\u0119sto lec\u0105 zamiennie:<\/p>\n\n<ul class=\"wp-block-list\">\n<li><strong>Testy jednostkowe<\/strong> - sprawdzaj\u0105 jedn\u0105 funkcj\u0119 w izolacji, np. wyliczenie ceny z rabatem. Dzia\u0142aj\u0105 w u\u0142amkach sekundy. Pisz\u0105 je programi\u015bci, cz\u0119sto w narz\u0119dziach takich jak PHPUnit albo Jest.<\/li>\n<li><strong>Testy integracyjne<\/strong> - weryfikuj\u0105, jak elementy ze sob\u0105 wsp\u00f3\u0142pracuj\u0105: aplikacja z baz\u0105 danych, z bramk\u0105 p\u0142atno\u015bci, z zewn\u0119trznym API. S\u0105 wolniejsze, bo anga\u017cuj\u0105 kilka system\u00f3w naraz.<\/li>\n<li><strong>Testy end-to-end (E2E)<\/strong> - udaj\u0105 cz\u0142owieka w przegl\u0105darce i przechodz\u0105 ca\u0142\u0105 \u015bcie\u017ck\u0119, od klikni\u0119cia do wyniku. Przyk\u0142adowe narz\u0119dzia to Playwright i Cypress. Trwaj\u0105 najd\u0142u\u017cej, pisz\u0105 je programi\u015bci albo testerzy automatyzuj\u0105cy.<\/li>\n<li><strong>Testy regresji<\/strong> - to nie osobna technika, tylko cel: upewni\u0107 si\u0119, \u017ce nowa zmiana nie zepsu\u0142a czego\u015b, co dzia\u0142a\u0142o. Realizuje go komplet powy\u017cszych test\u00f3w puszczonych razem.<\/li>\n<\/ul>\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Piramida_testow_ile_czego_potrzeba\"><\/span>Piramida test\u00f3w: ile czego potrzeba<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n<p class=\"wp-block-paragraph\">Zasada jest prosta. Najwi\u0119cej szybkich test\u00f3w jednostkowych, mniej integracyjnych i najmniej wolnych, drogich w utrzymaniu E2E. Projekt oparty wy\u0142\u0105cznie na E2E? D\u0142ugie czekanie na wynik, testy sypi\u0105ce si\u0119 przy ka\u017cdej zmianie wygl\u0105du i \u017cmudne szukanie przyczyny b\u0142\u0119du. Same jednostkowe te\u017c nie wystarcz\u0105, bo nie wy\u0142api\u0105 problem\u00f3w na styku modu\u0142\u00f3w ani w przegl\u0105darce. I uwa\u017caj na procent pokrycia kodu wpisany do umowy jako norma. M\u00f3wi on tylko, ile kodu zosta\u0142o uruchomione. Nie m\u00f3wi, czy sprawdzono to, co wa\u017cne dla biznesu.<\/p>\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Co_automatyzowac_najpierw_Krytyczne_sciezki_aplikacji\"><\/span>Co automatyzowa\u0107 najpierw? Krytyczne \u015bcie\u017cki aplikacji<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n<p class=\"wp-block-paragraph\">Na start id\u0105 \u015bcie\u017cki, kt\u00f3rych awaria zatrzymuje biznes: logowanie, p\u0142atno\u015b\u0107, zapis danych. Moim zdaniem rozs\u0105dna kolejno\u015b\u0107 wygl\u0105da tak:<\/p>\n\n<ol class=\"wp-block-list\">\n<li>Logowanie, rejestracja i uprawnienia u\u017cytkownik\u00f3w.<\/li>\n<li>P\u0142atno\u015b\u0107 i sk\u0142adanie zam\u00f3wienia (checkout).<\/li>\n<li>Zapis, edycja i odczyt kluczowych danych.<\/li>\n<li>Integracje z systemami zewn\u0119trznymi.<\/li>\n<li>Obliczenia biznesowe: ceny, rabaty, podatki.<\/li>\n<\/ol>\n\n<p class=\"wp-block-paragraph\">A z czym poczeka\u0107? Z ekranami, kt\u00f3re na etapie MVP zmieniaj\u0105 si\u0119 co tydzie\u0144, z sam\u0105 warstw\u0105 graficzn\u0105 i z funkcjami jednorazowymi. Szkoda czasu. Zakres test\u00f3w ma rosn\u0105\u0107 razem z produktem, co dobrze wida\u0107, gdy przejrzysz <a href=\"https:\/\/www.web-systems.pl\/etapy-budowy-aplikacji-webowej-od-mvp-do-skali\/\">etapy budowy aplikacji webowej<\/a> od pierwszej wersji do skali.<\/p>\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Kiedy_testy_sie_uruchamiaja_testy_w_CICD\"><\/span>Kiedy testy si\u0119 uruchamiaj\u0105: testy w CI\/CD<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n<p class=\"wp-block-paragraph\">W porz\u0105dnie ustawionym projekcie testy startuj\u0105 same przy ka\u017cdej zmianie w repozytorium, w pipeline CI, zanim kod trafi na serwer. CI, czyli ci\u0105g\u0142a integracja, to automat: programista wysy\u0142a kod, a on buduje aplikacj\u0119 i odpala testy. Czerwony wynik blokuje wdro\u017cenie. B\u0142\u0105d zatrzymuje si\u0119 wi\u0119c u programisty, a nie u klienta. Zwykle najpierw lec\u0105 szybkie testy jednostkowe, a E2E uruchamia si\u0119 na \u015brodowisku testowym tu\u017c przed publikacj\u0105 na produkcji. No i przy pracy w sprintach, typowej dla podej\u015bcia <a href=\"https:\/\/www.web-systems.pl\/jak-wdrozyc-skuteczne-strategie-agile-w-projektach-it\/\">zwinne zarz\u0105dzanie projektami IT<\/a>, pe\u0142na regresja przechodzi po ka\u017cdej iteracji.<\/p>\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Testy_automatyczne_w_umowie_i_wycenie_o_co_zapytac_wykonawce\"><\/span>Testy automatyczne w umowie i wycenie: o co zapyta\u0107 wykonawc\u0119<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n<p class=\"wp-block-paragraph\">Umowa powinna m\u00f3wi\u0107 wprost: jakie rodzaje test\u00f3w powstaj\u0105, kt\u00f3re \u015bcie\u017cki obejmuj\u0105, gdzie si\u0119 uruchamiaj\u0105 i kto je utrzymuje po odbiorze. Przed podpisaniem zadaj software house&#8217;owi te pytania:<\/p>\n\n<ul class=\"wp-block-list\">\n<li>Jakie testy s\u0105 uwzgl\u0119dnione w wycenie?<\/li>\n<li>Kt\u00f3re \u015bcie\u017cki dostan\u0105 testy E2E?<\/li>\n<li>Czy testy dzia\u0142aj\u0105 w CI i blokuj\u0105 wdro\u017cenie przy b\u0142\u0119dzie?<\/li>\n<li>Czy otrzymam kod test\u00f3w i dost\u0119p do ich wynik\u00f3w?<\/li>\n<li>Kto aktualizuje testy przy zmianach w aplikacji?<\/li>\n<li>Jak wygl\u0105da \u015brodowisko testowe i sk\u0105d pochodz\u0105 w nim dane?<\/li>\n<\/ul>\n\n<p class=\"wp-block-paragraph\">Czerwone lampki? Odpowied\u017a \u201etestujemy r\u0119cznie przed wdro\u017ceniem\u201d bez \u017cadnej automatyzacji. Brak test\u00f3w w repozytorium. Testy wyceniane jako p\u0142atny dodatek bez okre\u015blonego zakresu. W praktyce zakres test\u00f3w najlepiej om\u00f3wi\u0107 ju\u017c przy pierwszej rozmowie o projekcie, oboj\u0119tnie, czy chodzi o tworzenie oprogramowania na zam\u00f3wienie, czy o aplikacje oparte na AI.<\/p>\n\n<p class=\"wp-block-paragraph\">Testy automatyczne aplikacji webowej maj\u0105 by\u0107 zapisem w umowie, a nie ustn\u0105 obietnic\u0105. Minimum jest kr\u00f3tkie: testy jednostkowe dla logiki biznesowej, testy end-to-end dla krytycznych \u015bcie\u017cek i ca\u0142o\u015b\u0107 odpalana w CI przy ka\u017cdej zmianie. Z takim zapisem \u0142atwiej por\u00f3wna\u0107 oferty, odebra\u0107 projekt i spokojnie go rozwija\u0107.<\/p>\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Najczestsze_pytania\"><\/span>Najcz\u0119stsze pytania<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-1790789631378-0\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><span class=\"ez-toc-section\" id=\"Czy_mala_aplikacja_lub_MVP_potrzebuje_testow_automatycznych\"><\/span>Czy ma\u0142a aplikacja lub MVP potrzebuje test\u00f3w automatycznych?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Tak. Przynajmniej dla logowania, p\u0142atno\u015bci i zapisu danych, bo ich awaria od razu uderza w u\u017cytkownik\u00f3w. Reszt\u0119 mo\u017cna obj\u0105\u0107 testami p\u00f3\u017aniej, gdy produkt si\u0119 ustabilizuje. Taki skromny zestaw chroni najwa\u017cniejsze \u015bcie\u017cki bez du\u017cego kosztu na starcie.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1790789631378-1\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><span class=\"ez-toc-section\" id=\"Czym_roznia_sie_testy_end-to-end_od_testow_jednostkowych\"><\/span>Czym r\u00f3\u017cni\u0105 si\u0119 testy end-to-end od test\u00f3w jednostkowych?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>E2E sprawdzaj\u0105 ca\u0142\u0105 \u015bcie\u017ck\u0119 u\u017cytkownika w przegl\u0105darce, jednostkowe pojedyncz\u0105 funkcj\u0119 w izolacji. Pierwsze pokazuj\u0105, \u017ce proces dzia\u0142a jako ca\u0142o\u015b\u0107. Drugie szybko wskazuj\u0105, kt\u00f3ra cz\u0119\u015b\u0107 logiki zawiod\u0142a. Potrzebne s\u0105 oba rodzaje, nie ma co wybiera\u0107.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1790789631378-2\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><span class=\"ez-toc-section\" id=\"Kto_utrzymuje_testy_po_oddaniu_aplikacji\"><\/span>Kto utrzymuje testy po oddaniu aplikacji?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Zale\u017cy od umowy, wi\u0119c lepiej to w niej doprecyzowa\u0107. Dobry zapis: testy s\u0105 cz\u0119\u015bci\u0105 kodu przekazywanego zamawiaj\u0105cemu i s\u0105 aktualizowane przy ka\u017cdej zmianie w ramach wsparcia. Dzi\u0119ki temu nie trac\u0105 warto\u015bci po pierwszych poprawkach.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Testy automatyczne aplikacji webowej to skrypty, kt\u00f3re po ka\u017cdej zmianie w kodzie same sprawdzaj\u0105, czy najwa\u017cniejsze funkcje nadal dzia\u0142aj\u0105. W umowie z software housem dobrze mie\u0107 co najmniej trzy rzeczy: testy jednostkowe, testy end-to-end dla krytycznych \u015bcie\u017cek i uruchamianie ich w pipeline CI. Ten poradnik pisz\u0119 dla zamawiaj\u0105cego, kt\u00f3ry nie czyta kodu, a mimo to [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":30347,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[836],"tags":[2341,919,1081,1132,2340,865],"class_list":["post-30366","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programming","tag-automated-testing","tag-ci-cd-en","tag-how-to","tag-software-house-en","tag-testing","tag-web-applications"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/posts\/30366","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/comments?post=30366"}],"version-history":[{"count":3,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/posts\/30366\/revisions"}],"predecessor-version":[{"id":30415,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/posts\/30366\/revisions\/30415"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/media\/30347"}],"wp:attachment":[{"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/media?parent=30366"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/categories?post=30366"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/tags?post=30366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}