Testy automatyczne są jak lasagne: świetne, gdy świeże, śmierdzące, gdy zaniedbane.
W świecie testów automatycznych istnieją rzeczy, o których się nie mówi. Brudne sekrety. Dziwne struktury folderów. Skrypty pisane po pijaku. I dziś się z nimi rozprawimy.
Czas przyjrzeć się antywzorcom w testach automatycznych – czyli temu, co robimy źle (często nieświadomie), a co sprawia, że nasze frameworki przypominają spaghetti kod zamiast eleganckiego lasagne z testami na każdej warstwie.
🧟♂️ Potworny przykład z życia wzięty
qa_tests/
├── tests/
│ ├── TestClass1.py
│ ├── BashTests.py
│ ├── ApiTestClass2.py
│ └── ConfigReader.py
├── resources/
│ └── test_data.json
Pierwsze objawy choroby:
- Zero modularności: kod testów, helperów i konfiguracji zmiksowany w jednym folderze.
- Brak konwencji: pliki nazwane „na pałę” – próbujesz znaleźć test klasy 2? Powodzenia.
- Brak separacji odpowiedzialności: testy, logika, i dane wszystko w jednym pliku – jak barszcz, tylko bez smaku.
🔍 Diagnoza: Najczęstsze antywzorce
🔥 Wszystko w jednym worku
Logika, testy, setup, dane testowe – jedno wielkie miszmasz.
➡️ Zrób tak: Rozdziel testy (/tests
), page objecty (/pages
), dane (/resources
) i helpery (/utils
).
🎭 Udawanie Page Object Model
Masz klasę z 200 metodami do kliknięcia wszystkiego na stronie? To nie jest POM. To horror klasy B.
➡️ Zrób tak: Dziel według widoków i odpowiedzialności. Każda strona = osobna klasa.
🤕 Testy klecone na pałę
Nazwy typu test_1
, test_final_fixed_final2
, try_this_one
– serio?
➡️ Zrób tak: Test ma mówić co sprawdza: test_user_login_with_valid_credentials
– prosto i zrozumiale.
📦 Dane testowe hardcodowane w kodzie
Serio? username = "admin"
w środku testu?
➡️ Zrób tak: Używaj plików .json
, .yaml
, lub fixture’ów do generowania danych.
😴 Brak raportowania
Brak wyników testów? Albo co gorsza – printy w konsoli?
➡️ Zrób tak: Wygeneruj HTML report. Albo jeszcze lepiej – zintegruj z TestRail/JIRA i bądź królem CI.
🛠 Jak to posprzątać?
Oto proponowana struktura:
root/
├── Config/
├── Pages/
├── Results/
├── Model/
├── Utils/
├── tests/
│ ├── api/
│ ├── web/
│ └── conftest.py
📐 Dodaj BaseTest
Każda klasa testowa dziedziczy po BaseTestClass
, który ogarnia setup/teardown. Nie duplikuj kodu – nie jesteśmy w latach 90.
🧪 Fixture’y, nie magia
Zamiast tworzyć WebDriver w każdym teście – użyj fixture’a. conftest.py
to twoje centrum dowodzenia.
📊 Raportuj jak człowiek
Podłącz pytest-html
albo Allure
. Zrób z testów coś, co można pokazać PMowi bez tłumaczenia „co autor miał na myśli”.
🔁 Automatyzacja = ewolucja
Framework testowy to organizm. Refaktoruj. Rób code review. Mierz coverage. I co jakiś czas – wróć do tego posta ;)
🧠 TL;DR – Antywzorce vs dobre praktyki
Antywzorzec | Co robić zamiast |
---|---|
Wszystko w jednym folderze | Rozdziel strukturę projektu |
Brak POM | Dziel Page Objecty per widok |
Hardcodowane dane | Externalizacja danych testowych |
Brak raportów | pytest-html, Allure, TestRail |
Brak modularności | BaseTest, fixture’y, utils |
Testy nie muszą być piekłem.
Ale muszą być pisane z głową.
Nie pozwól, żeby twój framework wyglądał jak Frankenstein po refaktorze w Notatniku.
Bo debugowanie w piekle to nie jest coś, co chcesz przeżyć.
Pisz dobrze. Refaktoruj często. Testuj z dumą.