01Pierwsze kroki
TestRun nagrywa to, co klikasz na swojej stronie, zamienia to w scenariusz testu i odtwarza go na serwerze w prawdziwej przeglądarce (Playwright + Chromium) – ręcznie, w kolejce albo według harmonogramu.
Szybki start
- Załóż konto i potwierdź adres e-mail
Bez potwierdzenia panel się nie otworzy. Niepotwierdzone konta są usuwane po 7 dniach.
- Utwórz projekt
Podaj nazwę i pełny adres strony, np.
https://uat.twoj-sklep.pl. Powstanie środowiskodomyślnei wpis domeny do weryfikacji. Chcesz najpierw tylko spróbować? Wpisz adres sklepu demohttps://testrun.pl/demo– nie wymaga weryfikacji. - Zweryfikuj domenę
Ustawienia › Weryfikacja domeny: dodaj meta tag, plik albo rekord TXT i kliknij Sprawdź teraz. Szczegóły.
- Jeśli strona jest za zaporą – wpuść IP TestRun
Adres serwera znajdziesz w Ustawienia › Środowiska. Szczegóły.
- Nagraj test
Kliknij ● Nagraj test, wybierz W przeglądarce TestRun i przejdź ścieżkę jak użytkownik. Dane (e-mail, PESEL, hasło) wstawiaj przyciskiem Wstaw dane, a na końcu dodaj sprawdzenie przyciskiem Sprawdź. Zakończ przyciskiem Zakończ.
- Uruchom i ustaw harmonogram
W scenariuszu kliknij Uruchom. Gdy przechodzi – w zakładce Harmonogram dodaj np. „W dni robocze o 6:00”.
Najważniejsze pojęcia
@inbox.testrun.pl, na który TestRun odbiera maile z Twojej aplikacji.Mapa panelu
Po wybraniu projektu w menu po lewej masz zakładki:
| Zakładka | Do czego służy |
|---|---|
| Scenariusze | Lista testów, przycisk ● Nagraj test, Pusty scenariusz, szybkie Uruchom. |
| Kolejki testów | Scenariusze uruchamiane po kolei z przekazywaniem danych. |
| Przebiegi | Historia wszystkich wykonań (ostatnie 100), odświeża się sama. |
| Harmonogram | Testy uruchamiane automatycznie. |
| Dane testowe | Wartości przekazywane między scenariuszami – podgląd, ręczna edycja, usuwanie. |
| Skrzynki e-mail | Wszystkie skrzynki projektu i odebrane maile z załącznikami. |
| Webhooki i mocki | Adres webhooków projektu, odebrane żądania, gotowe przykłady kroków. |
| Ustawienia | Snippet, powiadomienia, domeny, środowiska, IP serwera, sekrety, nazwa projektu. |
W stopce menu widać zużycie planu, np. Darmowy: 42/300 przebiegów.
02Konfiguracja projektu
Konfigurację robi się raz na projekt. Wszystko jest w zakładce Ustawienia.
Projekt i plan
Projekt należy do organizacji. Tworząc go, podajesz nazwę i adres strony – adres staje się pierwszym środowiskiem (domyślne). Limity zależą od planu:
| Limit | Plan darmowy | Co się dzieje po przekroczeniu |
|---|---|---|
| Przebiegi w miesiącu | 300 | Nowe uruchomienia są odrzucane z komunikatem „Wykorzystano limit 300 przebiegów w tym miesiącu”. Licznik zeruje się 1. dnia miesiąca. |
| Projekty | 3 | Nie da się utworzyć kolejnego (usunięty projekt się nie liczy). |
| Przebiegi równoległe | 1 | Kolejne czekają w kolejce – nie są odrzucane. |
| Najczęstszy harmonogram | co 60 min | Zapis harmonogramu z krótszym odstępem jest odrzucany. |
| Przechowywanie wyników | 14 dni | Zrzuty, trace i pobrane pliki są usuwane automatycznie. |
| Członkowie organizacji | 1 | — |
Co liczy się jako przebieg? Każde wykonanie jednego scenariusza – także w kolejce i harmonogramie. Kolejka z trzema scenariuszami to trzy przebiegi. Kroki include nie są osobnymi przebiegami.
Środowiska
Adres strony nie jest zapisany w scenariuszu – pochodzi ze środowiska. Dzięki temu test nagrany na UAT uruchomisz bez zmian na stagingu i produkcji.
- Dodawanie: Ustawienia › Środowiska → nazwa (np.
produkcja) + adres → Dodaj środowisko. Domena nowego adresu trafia automatycznie do weryfikacji. - Domyślne: Ustaw domyślne – używane, gdy nie wybierzesz innego (np. szybkie Uruchom na liście scenariuszy, dane testowe bez wskazanego środowiska).
- Usuwanie: projekt musi mieć co najmniej jedno środowisko.
Ścieżka z kroku jest doklejana do całego adresu środowiska, razem z jego ścieżką: https://testrun.pl/demo + /rejestracja = https://testrun.pl/demo/rejestracja. Pełny adres w kroku (z https://) jest używany bez zmian. Adres środowiska jest utrwalany w przebiegu w chwili uruchomienia – późniejsza zmiana nie wpływa na historię.
Weryfikacja domeny
Testy (i nagrywanie w przeglądarce TestRun) działają tylko na domenach, których jesteś właścicielem. To chroni przed użyciem TestRun do automatycznego zakładania kont w cudzych serwisach. Wystarczy jedna z trzech metod:
| Metoda | Co zrobić |
|---|---|
| Rekord DNS TXT | Dodaj w DNS domeny rekord TXT o treści testrun-verification=<token>. |
| Plik | Umieść plik https://twoja-domena/.well-known/testrun-verification.txt zawierający sam token. |
| Znacznik meta | Dodaj na stronie głównej <meta name="testrun-verification" content="<token>">. |
Token i gotowe do skopiowania wartości są przy domenie w panelu. Po wdrożeniu kliknij Sprawdź teraz – przy niepowodzeniu panel pokaże, co sprawdził i dlaczego się nie udało.
Jedna weryfikacja na wiele środowiskZweryfikowana domena obejmuje subdomeny. Zweryfikuj twoj-sklep.pl (np. rekordem TXT), a uat., staging. i test.twoj-sklep.pl będą od razu dozwolone.
- Metody są sprawdzane po kolei: DNS → plik → meta tag. Pierwsza, która się zgadza, wygrywa.
- Plik i stronę główną TestRun pobiera przez HTTPS, z limitem 8 s, idąc za maks. 3 przekierowaniami; adresy wewnętrzne są blokowane.
- Weryfikacja jest trwała – nie trzeba trzymać tokenu na stronie w nieskończoność, choć warto (łatwiej odtworzyć projekt).
- Sklep demo
https://testrun.pl/demonie wymaga weryfikacji.
Dostęp z IP serwera TestRun
Przebiegi i przeglądarka nagrywania łączą się z Twoją stroną z adresu IP serwera TestRun – znajdziesz go w Ustawienia › Środowiska (przycisk Kopiuj IP). Jeśli środowisko jest chronione (zapora, lista dozwolonych IP, panel hostingu, Cloudflare lub inna ochrona przed botami), dodaj ten adres do dozwolonych, a potem zaznacz to przy środowisku.
Zaznaczenie to punkt listy kontrolnej – niczego nie blokuje, ale bez niego okno nagrywania ostrzega, że strona może nie wpuścić TestRun. Zmiana adresu środowiska kasuje potwierdzenie (nowy adres to zwykle inny serwer).
Sekrety
Hasła do kont testowych, klucze bramek płatności, tokeny API. Dodajesz je w Ustawienia › Sekrety: nazwa WIELKIE_LITERY_I_CYFRY, wartość i zakres – wszystkie środowiska albo jedno konkretne.
W scenariuszu sekret to zmienna typu secret:
"haslo": { "type": "secret", "name": "ADMIN_PASSWORD" }- Wartość per środowisko wygrywa z wartością dla wszystkich środowisk – np. inne hasło na produkcji.
- Brak sekretu = przebieg kończy się błędem „Brak sekretu ADMIN_PASSWORD”. Wyjątek:
"required": false(w edytorze: odznacz wymagany) – wtedy w każdym przebiegu powstaje nowe, losowe hasło. Idealne przy rejestracji. - Panel nigdy nie pokazuje wartości – można ją tylko nadpisać lub usunąć.
Sekrety są szyfrowane AES-256-GCM kluczem trzymanym poza bazą danych. Odszyfrowuje je dopiero worker tuż przed przebiegiem. Każde wystąpienie wartości sekretu w wynikach – komunikatach błędów, szczegółach kroków, zmiennych przebiegu – jest zamieniane na ••••••.
Atrybut identyfikatorów testowych
Jeśli Twoja aplikacja ma atrybuty typu data-testid="register-submit", nagrywanie użyje ich jako najstabilniejszego sposobu wskazania elementu. Domyślnie data-testid; inną nazwę (np. data-qa, data-cy) ustawisz w Ustawienia › Projekt.
Dodanie data-testid do przycisków i pól formularzy to najlepsza inwestycja w stabilność testów – zmiana tekstu czy układu strony ich nie zepsuje.
Powiadomienia e-mail
Gdy przebieg kończy się statusem failed, error albo timeout, TestRun wysyła maila z nazwą testu, środowiskiem, krokiem, komunikatem błędu i linkiem do wyników.
- Dostają go członkowie organizacji z prawem edycji (nie
viewer). - Nie dostaje go osoba, która sama uruchomiła przebieg z panelu – i tak patrzy na wynik. Przebiegi z harmonogramu i kolejek powiadamiają wszystkich.
- Każdy wyłącza je dla siebie: Ustawienia › Powiadomienia e-mail albo linkiem w stopce maila.
- Jeden mail na przebieg – ponowienie go nie zdubluje.
Role i uprawnienia
| Rola | Uprawnienia |
|---|---|
owner, admin | Wszystko, w tym tworzenie i usuwanie projektów. |
member | Nagrywanie, edycja, uruchamianie, harmonogramy, sekrety, dane testowe. |
viewer | Tylko odczyt: wyniki, scenariusze, skrzynki. Bez powiadomień e-mail. |
Usunięcie projektu wymaga wpisania jego nazwy. Projekt jest archiwizowany, a jego harmonogramy – wyłączane.
↑ Na górę03Nagrywanie testów
Nagrywasz, klikając po stronie. TestRun zapisuje zdarzenia (kliknięcia, wpisy, przejścia), a po zakończeniu zamienia je w czytelne kroki scenariusza.
Dwa tryby nagrywania
Kliknij ● Nagraj test, wybierz środowisko (gdy jest ich kilka) i tryb:
| W przeglądarce TestRun zalecane | We własnej przeglądarce | |
|---|---|---|
| Co trzeba mieć | Zweryfikowaną domenę | Snippet TestRun na stronie |
| Gdzie działa przeglądarka | Na serwerze TestRun; widzisz jej obraz w karcie panelu | U Ciebie |
| Strony zewnętrzne (np. sandbox bramki) | Nagrywane | Nienagrywane – tylko powrót z nich |
| localhost, VPN, dostęp tylko z Twojego IP | Niedostępne | Działa |
| Instalacja czegokolwiek | Nic | Jedna linijka w szablonie strony |
Przeglądarka TestRun i pasek nagrywania
Po Rozpocznij otwiera się nowa karta z obrazem strony na całe okno. Klikasz i piszesz normalnie – mysz i klawiatura trafiają do przeglądarki na serwerze. Nad stroną jest pasek:
| Element | Działanie |
|---|---|
| Karty | Jak w zwykłej przeglądarce: przełączanie, zamykanie, + otwiera nową kartę z adresem środowiska. Linki otwierane w nowej karcie też tu trafią. |
| ● licznik kroków | Lista nagranych kroków. ✕ usuwa zbędny krok (z opcją Cofnij). |
| ← → ⟳ i pasek adresu | Nawigacja. W pasku adresu wpiszesz pełny adres albo samą ścieżkę (/koszyk). Otwiera tylko domeny projektu. |
| Wstaw dane ▾ | Wpisuje w aktywne pole wygenerowane dane, adres skrzynki testowej albo zapisaną wartość. Szczegóły. |
| Poczta | Maile odebrane w tym nagraniu – otwieranie linków i podgląd załączników. |
| Sprawdź ▾ | Dodaje asercję: element widoczny / zawiera tekst, adres strony, tytuł. |
| 📷 ▾ | Krok zrzutu ekranu do oceny wizualnej. |
| Pobrane pliki | Pliki ściągnięte na stronie – podgląd PDF/obrazów/tekstu i zapis, do końca nagrania. |
| Rozmiar okna | Dopasuj do okna, 1366×768, 1280×720, 1920×1080, wąski ekran 390×844. Zapisze się w scenariuszu. |
| ⇅ | Przenosi pasek na górę lub dół. |
| Następny test | Zapisuje test i nagrywa kolejny w tej samej sesji. Szczegóły. |
| Zakończ / Anuluj | Zapisuje scenariusz / porzuca nagrywany test. |
Natywne okna alert, confirm i prompt pokazują się nad podglądem – Twoja odpowiedź zostanie nagrana. Pole z nazwą testu możesz uzupełnić w trakcie nagrywania.
- Chromium działa w procesie API TestRun. Obraz strony jest przesyłany jako strumień klatek (CDP screencast), a mysz, klawiatura i polecenia paska idą przez WebSocket.
- Sesje nagrywania dzielą jedną przeglądarkę – każda dostaje osobny, izolowany kontekst. Nowa sesja startuje tylko, gdy po niej zostanie bezpieczny zapas pamięci serwera; inaczej tester czeka w kolejce, widzi swoje miejsce, a przeglądarka uruchamia się sama, gdy zwolni się miejsce.
- Po 15 minutach bezczynności przeglądarka się zamyka – nagrane kroki zostają, można ją uruchomić ponownie.
- Adresy wewnętrzne (sieci prywatne serwera) są zablokowane także podczas nagrywania.
Wstaw dane
Najpierw kliknij pole formularza na stronie, potem otwórz Wstaw dane ▾. Menu ma trzy części:
- Wygeneruj nowe – E-mail (nowa skrzynka testowa), Imię, Nazwisko, PESEL, NIP, REGON, Nr konta (NRB), Nr dowodu, Telefon, Kod pocztowy, Miasto, Ulica, Nazwa firmy, Hasło. Obok e-maila możesz wpisać własny adres skrzynki – wtedy w każdym przebiegu będzie ten sam.
- Użyte w tym nagraniu – ponowne wpisanie wartości, która już padła (np. hasło w polu „Powtórz hasło”).
- Zapisane dane – wartości z danych testowych, np. e-mail z wcześniejszej rejestracji – do testu logowania.
Dlaczego nie wpisać danych ręcznie?Bo wpisana ręcznie wartość jest stała. Wartość z „Wstaw dane” staje się zmienną (np. {{pesel}}) i generuje się na nowo w każdym przebiegu – rejestracja zadziała codziennie, a nie tylko raz. Wyjątek: wpisanie ręcznie wartości, która jest w danych testowych, zostanie rozpoznane i zamienione na zmienną.
Wartości wstawione paskiem są oznaczane do zapisu (save: true): trafiają do danych testowych od razu po zakończeniu nagrania i po każdym udanym przebiegu.
Poczta w nagraniu
- Wstaw adres skrzynki
W polu e-mail formularza: Wstaw dane → E-mail.
- Wyślij formularz
Np. rejestracji albo „Nie pamiętam hasła”.
- Otwórz Poczta
Po kilku sekundach pojawi się mail (licznik przy przycisku). Kliknij Otwórz: <link>.
W scenariuszu powstaną dwa kroki: Czekaj na e-mail (z filtrem tematu i wyciągnięciem linku) i Otwórz link z e-maila. W przebiegu TestRun poczeka na świeży mail w nowej skrzynce i otworzy aktualny link – nie ten z nagrania. Kod z maila (np. 2FA) dodasz ręcznie w edytorze – patrz czekanie na maila.
Sprawdzenia i zrzuty
Test bez sprawdzeń mówi tylko, że dało się kliknąć. Dodaj na końcu (i w ważnych miejscach) asercję:
- Sprawdź → Element na stronie… → kliknij element → Jest widoczny albo Zawiera tekst (podpowiada obecny tekst – skróć go do stałej części).
- Adres strony – czy adres zawiera obecną ścieżkę (np.
/panel). - Tytuł strony – czy tytuł karty jest taki jak teraz.
📷 dodaje krok zrzutu: Widoczny ekran albo Cała strona, z opcjonalnym opisem „co sprawdzić”. Zrzut trafi do wyników każdego przebiegu, także zaliczonego – do oceny wizualnej przez człowieka.
Następny test – kilka testów w jednej sesji
Następny test zapisuje bieżący test jako scenariusz i od razu nagrywa kolejny – w tej samej przeglądarce: zalogowanie, ciasteczka i skrzynki zostają. Za pierwszym razem powstaje kolejka testów, a każdy kolejny test trafia na jej koniec. Wartości wygenerowane we wcześniejszych testach kolejne odczytują jako zapisane dane. Tak nagrasz np. 1. Rejestracja → 2. Logowanie → 3. Zakup, gotowe do uruchamiania jako całość.
Snippet – nagrywanie we własnej przeglądarce
Dla stron niedostępnych z internetu. Wklej kod z Ustawienia › Snippet w części wspólnej wszystkich podstron (np. przed </head>):
<script src="https://testrun.pl/r.js" data-key="pk_…" async></script>
Dla zwykłych odwiedzających skrypt nic nie robi. Aktywuje się dopiero, gdy tester otworzy link nagrywania z panelu.
- Wybierz „We własnej przeglądarce” i Rozpocznij
Panel pokaże link do nagrywania (ważny 2 godziny) i listę otwartych kart, w których już nagrywano.
- Otwórz link
Także w innej przeglądarce lub na telefonie. Albo przy znanej karcie kliknij Nagrywaj tę kartę.
- Potwierdź kod
Sprawdź, czy strona pokazuje ten sam kod co panel, i kliknij Akceptuj i nagrywaj.
- Nagrywaj
Na stronie pojawi się pływający pasek (w Shadow DOM, nie koliduje ze stylami strony) z tymi samymi narzędziami co w przeglądarce TestRun (wstawianie danych, poczta, sprawdzenia). Przejście na kolejne podstrony nie przerywa nagrania.
Strony bez snippetu nie są nagrywaneGdy w trakcie przejdziesz np. na stronę bramki płatności, kroki tam się nie nagrają. Powrót jest oznaczany, a edytor scenariusza podpowie symulację bramki.
Jak nagranie staje się testem
Surowe zdarzenia są „sprzątane” w kroki, które da się czytać i edytować:
| Co zrobiłeś | Jaki powstaje krok |
|---|---|
| Seria wpisów w tym samym polu | Jeden fill z wartością końcową |
| Klik w etykietę checkboxa | Jeden check |
| Klik przycisku wysyłającego formularz | Jeden click |
| Enter w polu, który wysyła formularz | press Enter |
| Przeładowanie strony po kliknięciu (do 15 s) | Tylko click – nawigacja jest skutkiem |
| Pierwsze załadowanie strony | navigate ze ścieżką względną |
| Wartość z „Wstaw dane” | fill ze zmienną {{…}} (zapisywaną w danych testowych) |
| Ręcznie wpisana wartość z danych testowych | fill ze zmienną typu stored |
Ręcznie wpisane hasło (type=password) | fill z sekretem – jawna wartość nigdy nie trafia do scenariusza |
| Autouzupełnienie przeglądarki | Pomijane |
| Ruchy myszy, przewijanie bez celu, focus/blur | Pomijane |
Jeśli scenariusz wymaga uzupełnienia (np. sekretu dla hasła wpisanego ręcznie), notatka wersji 1 zawiera „Do uzupełnienia: …”, a edytor pokaże ostrzeżenie o brakujących sekretach.
Dobre praktyki nagrywania
- Jeden test = jedna ścieżka (rejestracja, logowanie, zakup). Łącz je w kolejki, a nie w jeden długi test.
- Zawsze wstawiaj dane paskiem, nie wpisuj na sztywno – inaczej drugi przebieg trafi na „konto już istnieje”.
- Kończ asercją – „widać Witaj, …”, „adres zawiera /zamowienie/dziekujemy”.
- Zamykaj banery cookies kliknięciem, a potem w edytorze oznacz ten krok jako
optional– gdy baner się nie pojawi, test pójdzie dalej. - Nie czekaj „na oko” – kroki i asercje same czekają na elementy. Krok
waitz czasem to ostateczność.
04Scenariusze i ręczna edycja
Każdy scenariusz – nagrany albo pusty – możesz zmienić w panelu: krok po kroku albo jako dokument JSON.
Edytor scenariusza
- Nazwa – edytowalna na górze strony.
- Kroki – przeciągaj za uchwyt z numerem, by zmienić kolejność (działa też klawiaturą). Ołówek otwiera krok jako JSON, kosz go usuwa.
- + Dodaj krok… – wstawia gotowy szablon: Otwórz stronę, Kliknij, Wpisz, Naciśnij klawisz, Wybierz z listy, Zaznacz, Czekaj na e-mail, Sprawdź, Czekaj na adres, Czekaj, Zrób zrzut ekranu, Podmień odpowiedź usługi, Wyślij żądanie HTTP, Czekaj na webhook, Oblicz skrót / podpis. Szablon od razu otwiera się do edycji.
- Symulacja bramki płatności… – kreator kroków płatności (opis).
- Zmienne – lista z opisem; przy sekretach przełącznik wymagany, przy generatorach i skrzynkach zapisuj w danych testowych. Edytuj otwiera wszystkie zmienne jako JSON.
- Edytuj jako JSON – cały scenariusz naraz: najszybszy sposób na hurtowe zmiany, kopiowanie kroków między scenariuszami czy dodanie
include. - Zapisz / Zapisz i uruchom – zapis tworzy nową wersję. Przy kilku środowiskach obok wybierasz, gdzie uruchomić.
Zmiany są lokalne do chwili zapisu – na górze widać „niezapisane zmiany”, a przeglądarka ostrzeże przed zamknięciem karty. Scenariusz jest sprawdzany przy zapisie: niepoprawne pola zostaną wskazane z dokładną ścieżką, np. steps.3.target: ….
Struktura scenariusza
{
"schemaVersion": 1,
"name": "Rejestracja i logowanie",
"description": "Nowe konto z potwierdzeniem mailowym",
"settings": {
"viewport": { "width": 1366, "height": 768 },
"locale": "pl-PL",
"timezone": "Europe/Warsaw",
"defaultTimeoutMs": 10000,
"screenshots": "onFailure"
},
"variables": { … },
"steps": [ … ]
}| Ustawienie | Znaczenie |
|---|---|
viewport | Rozmiar okna przeglądarki (200–3840 × 200–2160). Wpływa na wersję strony (mobilna/desktopowa). |
locale, timezone | Język i strefa czasowa przeglądarki – np. format dat na stronie. |
defaultTimeoutMs | Ile każdy krok może czekać (np. na element). 100 ms – 120 s, domyślnie 10 s. |
screenshots | onFailure (domyślnie), always albo never – zrzut po kroku. |
Scenariusz może mieć do 500 kroków. Identyfikatory kroków (id) muszą być unikalne i nie zmieniają się przy zmianie kolejności.
Zmienne
W krokach używasz ich przez {{nazwa}}. Nazwa: litery, cyfry i _, nie zaczyna się od cyfry; run i env są zarezerwowane. Wartości są tworzone na nowo przy każdym przebiegu.
| Typ | Przykład | Wartość |
|---|---|---|
mailbox | {"type":"mailbox"} | Nowa skrzynka testowa w każdym przebiegu. Z "address":"subskrypcje" – stała skrzynka subskrypcje@inbox.testrun.pl. |
generate | {"type":"generate","generator":"pesel"} | Wartość z generatora. |
static | {"type":"static","value":"JESIEN2026"} | Stała. |
secret | {"type":"secret","name":"ADMIN_PASSWORD"} | Wartość z sekretów, maskowana w wynikach. |
stored | {"type":"stored","key":"email"} | Wartość z danych testowych. Brak = błąd przebiegu. |
webhook | {"type":"webhook"} | Unikalny adres odbierający webhooki w tym przebiegu. |
mailbox i generate z "save": true zapisują wartość w danych testowych po udanym przebiegu. Zmienne powstają też w trakcie testu – przez saveAs w krokach (extract, waitForEmail, mock, request, hash, waitForWebhook) i krok setVariable.
Wbudowane zmienne i składnia
| Zapis | Wartość |
|---|---|
{{run.id}}, {{run.startedAt}} | ID przebiegu, czas startu (ISO 8601) |
{{env.baseUrl}}, {{env.name}} | Adres i nazwa środowiska |
{{env.webhookUrl}} | Adres webhooków projektu |
{{email.local}}, {{email.domain}} | Część adresu e-mail przed / po @ |
{{mail.subject}}, {{hook.json.status}} | Pole obiektu zapisanego przez saveAs (kropki wchodzą głębiej) |
\{{ | Dosłowny tekst {{ |
Podstawianie odbywa się tuż przed wykonaniem kroku – zmienne zapisane przez wcześniejsze kroki są już dostępne. Odwołanie do nieistniejącej zmiennej przerywa krok błędem „Nieznana zmienna: {{x}}”. Obiekt wstawiony w tekst (np. {{hook.json}}) jest zamieniany na JSON. Wartości zmiennych (bez sekretów) są zapisywane przy przebiegu – widać je w sekcji „Dane użyte w przebiegu”.
Generatory danych
Polskie identyfikatory mają poprawne sumy kontrolne, więc walidacja formularza ich nie odrzuci.
| Generator | Opcje | Przykład |
|---|---|---|
pesel | gender: male/female, minAge | 92071304817 |
nip, regon, regon14 | — | 5261040828 |
iban | — | polski NRB/IBAN |
idCard, passport | — | nr dowodu, paszportu |
firstName, lastName, fullName | gender | Anna Kowalska |
phone | — | polski nr komórkowy |
postalCode, street, city, companyName | — | 00-950 |
password | length (domyślnie 14) | mała i wielka litera, cyfra, znak specjalny |
number | min, max (0–1000) | 417 |
date | from, to, format (YYYY-MM-DD) | 1987-03-12 |
text | length (50) | zdanie |
uuid | — | UUID v4 |
"pesel": { "type": "generate", "generator": "pesel", "options": { "gender": "female", "minAge": 18 } }, "urodziny": { "type": "generate", "generator": "date", "options": { "from": "1960-01-01", "to": "2000-12-31", "format": "DD.MM.YYYY" } }
Lokatory i self-healing
Krok działający na elemencie ma pole target z kilkoma strategiami wskazania, od najbardziej do najmniej stabilnej. Nagrywanie zapisuje je wszystkie.
"target": {
"strategies": [
{ "type": "testId", "value": "register-submit" },
{ "type": "role", "role": "button", "name": "Załóż konto" },
{ "type": "text", "value": "Załóż konto", "exact": true },
{ "type": "css", "value": "form#register button[type=submit]" }
],
"frame": null,
"nth": null
}| Strategia | Pola | Szuka |
|---|---|---|
testId | value | Atrybutu identyfikatora testowego (np. data-testid) |
role | role, name | Roli dostępności i nazwy, np. przycisk „Zapisz” |
label | value | Pola po etykiecie |
placeholder | value | Pola po tekście podpowiedzi |
text | value, exact | Elementu po widocznym tekście |
css, xpath | value | Selektora CSS / XPath |
frame– selektor CSS ramkiiframe, gdy element jest w niej (działa też dla ramek z innej domeny).nth– numer elementu (od 0), gdy strategia celowo wskazuje kilka.
- Co 150 ms runner sprawdza strategie w kolejności i bierze pierwszą, która wskazuje dokładnie jeden element. Gdy główna zacznie działać po chwili (np. po doładowaniu strony), wygra z zapasową.
- Strategie tekstowe (
role,label,placeholder,text) próbują najpierw dokładnego dopasowania, potem fragmentu (np. etykieta „Imię *”). Każda próba jest też zawężana do elementów widocznych – strony często mają ukryte duplikaty (menu mobilne). - Po upływie limitu czasu błąd pokazuje, ile elementów znalazła każda strategia – od razu widać, czy element zniknął (0), czy jest niejednoznaczny (2+).
- Self-healing: wynik kroku zapamiętuje, która strategia zadziałała. Gdy była to zapasowa, strona przebiegu pokaże ostrzeżenie z przyciskiem Zaktualizuj selektory – przesuwa działające strategie na początek i zapisuje nową wersję scenariusza.
Kroki – pełna lista
Wspólne pola każdego kroku:
| Pole | Opis |
|---|---|
id | Stały identyfikator (np. s7), unikalny w scenariuszu. |
action | Typ kroku. |
label | Opis dla człowieka – widoczny w edytorze, wynikach i mailu o błędzie. |
timeoutMs | Własny limit czasu kroku (100 ms – 10 min). |
optional | true – błąd nie przerywa testu; krok dostaje status warning. |
retries | Ile razy ponowić krok po błędzie (0–5). |
screenshot | Nadpisuje ustawienie zrzutów dla tego kroku. |
Nawigacja
| Krok | Pola | Działanie |
|---|---|---|
navigate | url | Otwiera adres (ścieżka względna = adres środowiska). |
back, reload | — | Wstecz, odśwież. |
waitForUrl | url, match | Czeka, aż adres będzie equals / contains / matches (regex). |
Interakcje
| Krok | Pola | Działanie |
|---|---|---|
click | target, button, clickCount, modifiers | Klik (lewy/prawy/środkowy, 1–3 razy, z Alt/Control/Meta/Shift). |
fill | target, value | Czyści pole i wpisuje wartość od razu. |
type | target, value, delayMs | Wpisuje znak po znaku (domyślnie co 50 ms) – dla masek i autouzupełniania. |
press | key, target? | Klawisz, np. Enter, Tab, Control+A. |
select | target, by, values | Wybór z listy po label albo value. |
check | target, checked | Zaznacza/odznacza – także własne checkboxy z ukrytym polem. |
hover, scroll | target / x, y | Najechanie (menu rozwijane), przewinięcie do elementu lub pozycji. |
dialog | accept, promptText | Ustala odpowiedź na następny alert/confirm/prompt. Bez tego kroku okna są odrzucane. |
upload | target, files | Wysyłanie pliku (asset:<nazwa>). wkrótce – wgrywanie plików projektu nie jest jeszcze dostępne w panelu. |
Oczekiwanie, dane, zrzuty
| Krok | Pola | Działanie |
|---|---|---|
waitFor | target, state | Czeka, aż element będzie visible / hidden / attached / detached. |
wait | ms | Stała pauza (maks. 60 s). Odradzana. |
extract | target?, property, regex?, saveAs | Odczyt ze strony: text, value, attribute:href, url, title. Z regex zapisuje pierwszą grupę. |
setVariable | name, value | Ustawia zmienną (z podstawianiem innych). |
screenshot | name?, fullPage? | Zrzut do wyników każdego przebiegu. |
{ "id": "s17", "action": "extract", "target": { "strategies": [{ "type": "css", "value": ".order-number" }] },
"property": "text", "regex": "Nr zamówienia: (\\d+)", "saveAs": "nrZamowienia" }Kroki e-mail, webhooków i mocków są opisane w osobnych rozdziałach: waitForEmail, waitForWebhook, request, hash, mock.
Asercje
check | Wymaga | Sprawdza |
|---|---|---|
visible / hidden | target | Widoczność elementu |
enabled / disabled | target | Czy kontrolka jest aktywna |
text | target, op, expected | Tekst elementu (białe znaki znormalizowane) |
value | target, op, expected | Wartość pola |
attribute | target, name, op, expected | Atrybut elementu |
count | target, op, expected (liczba) | Liczbę elementów – wg pierwszej strategii |
url / title | op, expected | Adres / tytuł strony (equals przyjmuje ścieżkę /panel) |
variable | variable, op, expected | Wartość zmiennej, np. mail.subject, hook.json.status |
Operatory op: equals, notEquals, contains, notContains, matches (regex), gt, gte, lt, lte.
{ "id": "a1", "action": "assert", "check": "text", "target": { … }, "op": "contains", "expected": "Witaj, {{imie}}" }
{ "id": "a2", "action": "assert", "check": "count", "target": { … }, "op": "gte", "expected": 1 }
{ "id": "a3", "action": "assert", "check": "variable", "variable": "mail.attachmentNames", "op": "contains", "expected": "faktura" }Asercje czekają do limitu czasu kroku, aż warunek zacznie być spełniony (jak expect w Playwright), sprawdzając co 150 ms. To eliminuje większość „migających” testów. Wyjątek: variable sprawdza od razu – wartość zmiennej się nie zmienia. Wynik kroku zawiera wartość oczekiwaną i faktyczną.
Wspólne fragmenty (include)
Krok include wstawia inny scenariusz projektu – np. wspólne „Logowanie” używane w dziesięciu testach. Zmienne przekazujesz w inputs; zmienne scenariusza wstawianego, których nie przekażesz, tworzą się normalnie.
{ "id": "s2", "action": "include", "scenarioId": "8f0c…", "inputs": { "login": "{{email}}", "haslo": "{{haslo}}" } }Identyfikator scenariusza znajdziesz w adresie jego strony (/s/<id>). Maksymalne zagnieżdżenie: 3 poziomy. Kroki wstawionego scenariusza widać w wynikach przebiegu.
Wersje
Każdy zapis tworzy nową, niezmienną wersję. Przebieg zapamiętuje dokładnie tę wersję, którą wykonał – nawet po zmianach wiesz, co było testowane. W Historii wersji kliknij Pokaż, a potem Przywróć tę wersję (przywrócenie też jest nowym zapisem).
↑ Na górę05Uruchamianie i wyniki
Uruchamianie
- Ręcznie: Uruchom na liście scenariuszy (środowisko domyślne) albo w scenariuszu (z wyborem środowiska). Panel przejdzie od razu do wyników.
- Kolejka: Uruchom przy kolejce – rozdział 06.
- Harmonogram: automatycznie albo Teraz – rozdział 07.
- Ponownie: Uruchom ponownie na stronie przebiegu.
Przebieg, który jeszcze czeka w kolejce, można anulować.
Statusy
| Status | Znaczenie |
|---|---|
| queued | Czeka na wolną przeglądarkę. |
| running | Trwa – kroki pojawiają się na bieżąco. |
| passed | Wszystkie obowiązkowe kroki przeszły. |
| failed | Test wykrył problem – krok nie przeszedł (brak elementu, niespełniona asercja, nie przyszedł mail). |
| error | Test nie mógł wystartować – brak sekretu lub zapisanej wartości, niezweryfikowana domena, limit planu, błąd po stronie TestRun. |
| timeout | Przekroczony maksymalny czas przebiegu (10 min). |
| cancelled | Anulowany. |
Statusy kroków: passed, failed, warning (nieudany krok opcjonalny), skipped (pominięty po wcześniejszym błędzie).
Wyniki przebiegu
- Kroki – status, czas, liczba prób, komunikat błędu i szczegóły (np. oczekiwany i faktyczny tekst, kod HTTP, odebrany mail).
- Zrzuty ekranu – przy nieudanym kroku (domyślnie) i z kroków
screenshot; Pełny rozmiar otwiera oryginał. - Pliki z przebiegu – pliki pobrane na stronie (np. faktura PDF) przy kroku, który je pobrał, załączniki maili i zrzuty do oceny wizualnej. PDF, obrazy i tekst mają podgląd; reszta jest do zapisu.
- Dane użyte w przebiegu – wartości zmiennych (adresy e-mail, PESEL-e…), z sekretami zamaskowanymi. Pozwala odtworzyć błąd ręcznie.
- Nagranie przebiegu (trace) – przy nieudanym przebiegu.
Trace Playwrighta
Trace to pełny zapis przebiegu: każdy krok z wyglądem strony przed i po, drzewo DOM, żądania sieciowe i konsola. Pobierz trace.zip ze strony przebiegu i przeciągnij go na trace.playwright.dev – plik jest otwierany lokalnie w Twojej przeglądarce, nigdzie nie jest wysyłany.
Trace jest zapisywany tylko przy przebiegach, które nie przeszły – zaliczone go nie potrzebują.
Jak wykonywany jest przebieg
- Kontrole przy uruchomieniu: scenariusz istnieje, środowisko nie jest na localhost, domena jest zweryfikowana, a limit przebiegów planu nie jest wyczerpany. Wtedy licznik miesięczny rośnie o 1, a przebieg trafia do kolejki z bieżącą wersją scenariusza i utrwalonym adresem środowiska.
- Kolejka: worker dostaje natychmiastowe powiadomienie z bazy danych (a dodatkowo sprawdza kolejkę co 5 s). Bierze najstarszy przebieg, pomijając organizacje, które wykorzystały limit równoległych przebiegów – jeden klient z wieloma testami nie blokuje innych.
- Przeglądarka: worker trzyma jeden Chromium dla wszystkich przebiegów, ale każdy przebieg dostaje własny, czysty kontekst – osobne ciasteczka, localStorage i karty. Kontekst znika razem z przebiegiem.
- Przygotowanie zmiennych: tworzone są skrzynki, generowane dane, odszyfrowywane sekrety, wczytywane dane testowe. Brak sekretu lub zapisanej wartości kończy przebieg statusem
error, zanim otworzy się strona. - Kroki wykonywane są po kolei i zapisywane na bieżąco (panel pokazuje postęp). Pierwszy nieudany krok obowiązkowy przerywa test; pozostałe dostają
skipped. Cały przebieg ma limit 10 minut. - Na koniec: zapis zrzutów, trace i pobranych plików; po udanym przebiegu – zapis wartości do danych testowych; w kolejce – start następnego scenariusza; przy błędzie – powiadomienia e-mail.
Gdy worker zostanie zrestartowany w trakcie, przerwane przebiegi dostają status error „Przebieg przerwany (restart workera)”.
06Kolejki testów
Kolejka uruchamia scenariusze po kolei, a każdy kolejny korzysta z danych (i opcjonalnie sesji przeglądarki) poprzednich. Typowo: 1. Rejestracja → 2. Logowanie → 3. Zakup.
Tworzenie kolejki
- Kolejki testów → + Nowa kolejka
Albo nagraj kilka testów przyciskiem Następny test – kolejka powstanie sama.
- Dodaj scenariusze w kolejności wykonywania
Strzałkami zmieniasz kolejność. Ten sam scenariusz może wystąpić kilka razy (np. logowanie przed i po zmianie hasła).
- Ustaw opcje i zapisz
Patrz niżej. Potem Uruchom i wybierz środowisko.
Wspólna sesja i zatrzymanie po błędzie
| Opcja | Domyślnie | Działanie |
|---|---|---|
| Wspólna sesja przeglądarki | włączona | Kolejny scenariusz startuje z ciasteczkami i localStorage poprzedniego – np. zakup od razu jako zalogowany użytkownik, bez logowania w każdym teście. |
| Zatrzymaj po błędzie | włączona | Gdy scenariusz nie przejdzie, kolejne są pomijane (i tak nie miałyby danych). Wyłącz, gdy testy są od siebie niezależne. |
Przepływ danych
Strona kolejki pokazuje, co każdy scenariusz zapisuje (→ email) i czego potrzebuje – oraz skąd to dostanie: od wcześniejszego scenariusza w kolejce, z danych testowych projektu, albo znikąd (ostrzeżenie – przebieg skończy się błędem).
Po uruchomieniu strona przebiegu kolejki pokazuje postęp, wynik każdego scenariusza i sekcję Dane przekazane dalej.
Pod spodem
- W chwili startu zapamiętywana jest lista scenariuszy – późniejsza edycja kolejki nie zmienia trwającego uruchomienia.
- Przebiegi tworzone są po jednym: następny trafia do kolejki wykonania dopiero, gdy poprzedni się skończy.
- Zmienna
storeddostaje najpierw wartość zapisaną przez wcześniejszy scenariusz tego samego uruchomienia, a dopiero potem z danych testowych projektu. Dzięki temu równoległy przebieg innego testu nie podmieni kolejce konta. - Wartości przekazuje tylko scenariusz, który przeszedł.
- Sesja przeglądarki (format
storageStatePlaywrighta) jest przechowywana zaszyfrowana i usuwana po zakończeniu kolejki. - Anulowanie kolejki anuluje jej oczekujące przebiegi. Wynik kolejki:
passed, gdy przeszły wszystkie scenariusze.
07Harmonogramy
Harmonogram działa na serwerze TestRun – nie potrzebujesz CI ani nikogo, kto pamięta, żeby kliknąć „uruchom”.
Nowy harmonogram
Harmonogram › + Dodaj:
- Co uruchamiać – jeden lub więcej scenariuszy i kolejek (do 30 pozycji), w ustalonej kolejności: + Dodaj kolejny test lub kolejkę, strzałki ↑↓, ✕.
- Środowisko – na którym uruchamiać.
- Jak często – Co godzinę, Codziennie o…, W dni robocze o…, Co tydzień (poniedziałek) o…, albo Własne wyrażenie cron.
- Nazwa – opcjonalna; bez niej powstanie z pozycji i częstotliwości.
Na liście: termin następnego uruchomienia, ostatni wynik, Teraz (uruchamia od razu, nie zmieniając następnego terminu), włączanie/wyłączanie, edycja i usuwanie.
Wyrażenia cron
Pięć pól: minuta godzina dzień-miesiąca miesiąc dzień-tygodnia, czas polski (Europe/Warsaw, ze zmianą czasu letniego).
| Wyrażenie | Kiedy |
|---|---|
0 6 * * 1-5 | Dni robocze o 6:00 |
30 7 * * * | Codziennie o 7:30 |
0 * * * * | Co godzinę o pełnej |
0 8-18 * * 1-5 | Co godzinę od 8 do 18 w dni robocze |
0 */4 * * * | Co 4 godziny |
0 9 * * 1 | Poniedziałki o 9:00 |
0 3 1 * * | Pierwszego dnia miesiąca o 3:00 |
Plan określa najkrótszy odstęp (darmowy: 60 min). Sprawdzany jest odstęp między dwoma najbliższymi uruchomieniami – */15 * * * * zostanie odrzucone komunikatem „Twój plan pozwala uruchamiać testy najczęściej co 60 min”.
Seria a kolejka
Harmonogram z kilkoma pozycjami uruchamia je jako serię. To co innego niż kolejka:
| Kolejka testów | Seria z harmonogramu | |
|---|---|---|
| Kolejność | Po kolei | Po kolei |
| Sesja przeglądarki | Wspólna (opcja) | Każda pozycja osobno |
| Przekazywanie danych | Tak | Nie (poza danymi testowymi projektu) |
| Błąd | Zatrzymuje kolejne (opcja) | Nie zatrzymuje kolejnych |
| Do czego | Zależne kroki jednej ścieżki | „Nocny przegląd” wielu niezależnych testów |
Kolejka może być pozycją serii – wewnątrz działa według własnych ustawień. Pozycje serii nie startują równocześnie, więc nie obciążą testowanego środowiska.
Pod spodem
- Worker sprawdza harmonogramy co 30 s. Termin następnego uruchomienia jest wyliczany z cron w strefie Europe/Warsaw.
- Rozproszenie startów: wiele harmonogramów „o pełnej” nie rusza w tej samej sekundzie. Każdy ma stałe przesunięcie (do 2 minut) wyliczone z jego identyfikatora – odstępy między jego przebiegami pozostają równe.
- Jeden harmonogram z jednym scenariuszem = zwykły przebieg; z jedną kolejką = przebieg kolejki; z kilkoma pozycjami = seria.
- Błąd startu nie ginie: gdy przebiegu nie da się uruchomić (niezweryfikowana domena, wyczerpany limit), w historii pojawia się przebieg ze statusem
errori powodem – takie wpisy nie zużywają limitu. - Usunięcie scenariusza lub kolejki usuwa je z harmonogramów; harmonogram bez pozycji jest wyłączany. Usunięcie projektu wyłącza wszystkie jego harmonogramy.
08Dane testowe
Mechanizm przekazywania wartości między scenariuszami: rejestracja zapisuje e-mail i hasło, a logowanie używa zawsze konta z ostatniej udanej rejestracji.
Zapis i odczyt
- Zapis automatyczny: zmienne
mailboxigeneratez"save": true– po każdym udanym przebiegu i od razu po zakończeniu nagrania. Nagrywanie ustawia to samo dla wartości z „Wstaw dane”. - Zapis ręczny: zakładka Dane testowe – dodaj, edytuj, usuń (np. login konta testowego założonego ręcznie).
- Odczyt: zmienna
{"type":"stored","key":"email"}, a w nagraniu Wstaw dane → Zapisane dane. - Osobno dla każdego środowiska – konto z UAT nie trafi do testu produkcji.
- Kolumna Źródło pokazuje, który scenariusz (lub nagranie, lub wpis ręczny) zapisał wartość ostatnio.
Skrzynka e-mail zapisana w danych testowych nie wygasa, dopóki tam jest – scenariusz logowania może np. zresetować hasło i odebrać maila. Gdy wartość zostanie nadpisana nową skrzynką, stara wraca do zwykłego 7-dniowego okresu ważności.
Przykład: rejestracja → logowanie
"variables": {
"email": { "type": "mailbox", "save": true },
"haslo": { "type": "generate", "generator": "password", "save": true }
}"variables": {
"email": { "type": "stored", "key": "email" },
"haslo": { "type": "stored", "key": "haslo" }
}Uruchamiane osobno – logowanie użyje ostatniego zapisanego konta. W kolejce – konta z rejestracji z tego samego uruchomienia.
↑ Na górę09Skrzynki e-mail
Prawdziwe skrzynki w domenie inbox.testrun.pl – Twoja aplikacja wysyła maile normalnie, a TestRun je odbiera, otwiera linki, przepisuje kody i sprawdza załączniki.
Adresy i ważność
- Zmienna
{"type":"mailbox"}lub „Wstaw dane → E-mail” daje w każdym przebiegu nowy adres w postaci<nazwa-zmiennej>-<8 znaków>@inbox.testrun.pl, np.email-3fa91c2d@inbox.testrun.pl. - Zwykła skrzynka działa 7 dni, potem jest usuwana razem z mailami i załącznikami. Skrzynki zapisane w danych testowych i z własnym adresem nie wygasają.
- Zakładka Skrzynki e-mail pokazuje wszystkie skrzynki projektu (📌 = zapisana w danych testowych), skąd pochodzą (przebieg, scenariusz) i odebrane maile. Skrzynce możesz nadać własną nazwę.
TestRun ma własny serwer SMTP przyjmujący pocztę dla *@inbox.testrun.pl. Mail na adres, który nie istnieje lub wygasł, jest odrzucany już na etapie SMTP (kod 550) – nie da się „zaśmiecić” cudzych skrzynek. Maksymalny rozmiar wiadomości: 5 MB. Przy odbiorze wyciągane są linki (z HTML i z tekstu) i załączniki; obrazki osadzone w treści (cid:) nie są traktowane jak załączniki.
Własny adres
Gdy potrzebujesz stałego adresu – np. konto testowe zapisane do newslettera albo adres wpisany na sztywno w konfiguracji systemu:
- Skrzynki e-mail › + Nowa skrzynka → Własny adres (albo Losowy adres), opcjonalna nazwa.
- albo w nagraniu: „Wstaw dane → E-mail” i wpisz adres,
- albo w scenariuszu:
{"type":"mailbox","address":"subskrypcje"}.
Zasady: 1–40 znaków, małe litery, cyfry, kropka, myślnik i podkreślenie, bez polskich znaków. Zarezerwowane są adresy techniczne (postmaster, admin, noreply…) i wzór adresów losowych. Adres zajęty przez inny projekt jest niedostępny.
Czekanie na maila (waitForEmail)
{
"id": "s8", "action": "waitForEmail",
"mailbox": "{{email}}",
"filter": { "subjectContains": "Potwierdź", "from": "no-reply@sklep.pl" },
"since": "run",
"timeoutMs": 60000,
"saveAs": "mail",
"extract": [
{ "kind": "link", "contains": "/aktywuj/", "saveAs": "linkAktywacyjny" },
{ "kind": "code", "saveAs": "kod" },
{ "kind": "regex", "pattern": "Nr klienta: (\\d+)", "saveAs": "nrKlienta" }
]
}| Pole | Opis |
|---|---|
filter | subjectContains, from, bodyContains – fragmenty, bez rozróżniania wielkości liter. Wszystkie muszą pasować. |
since | step (domyślnie) – mail odebrany od startu kroku; run – od początku przebiegu. Używaj run, gdy mail może przyjść, zanim krok wystartuje (np. wysyłka zaraz po kliknięciu). |
timeoutMs | Domyślnie 60 s (a nie defaultTimeoutMs). |
extract.link | Pierwszy link zawierający contains i/lub pasujący do pattern. |
extract.code | Pierwsza liczba 4–8-cyfrowa w treści – kody 2FA, OTP. |
extract.regex | Pierwsza grupa wyrażenia (albo całe dopasowanie). |
saveAs | Cały mail: {{mail.subject}}, .from, .text, .html, .links, .attachmentNames, .attachments. |
Typowe zakończenie: { "action": "navigate", "url": "{{linkAktywacyjny}}" } albo { "action": "fill", "target": …, "value": "{{kod}}" }.
Krok co sekundę sprawdza skrzynkę i bierze pierwszy mail spełniający filtr, odebrany po wskazanym momencie. Gdy nie znajdzie maila w limicie czasu – krok kończy się „Nie otrzymano maila na … w ciągu 60 s”. Gdy mail jest, ale nie zawiera szukanego linku/kodu – błąd pokazuje temat i listę linków, co ułatwia poprawienie filtra.
Załączniki
Do 20 załączników na mail, każdy do 50 MB. Do asercji użyj {{mail.attachmentNames}} (nazwy po przecinku):
{ "id": "a4", "action": "assert", "check": "variable", "variable": "mail.attachmentNames", "op": "contains", "expected": "faktura" }Same pliki obejrzysz w wynikach przebiegu i w zakładce skrzynek (podgląd PDF, obrazów, tekstu).
↑ Na górę10Webhooki
Dwa kierunki: Twoja aplikacja wysyła webhook (TestRun go odbiera i sprawdza) albo inny system wysyła webhook do Twojej aplikacji (TestRun go wysyła zamiast niego).
Odbieranie webhooków
Każdy projekt ma adres w zakładce Webhooki i mocki:
https://testrun.pl/hook/<token>/<dowolna-ścieżka>
- Wpisz adres w testowanej aplikacji
Np. jako adres powiadomień o zamówieniach:
https://testrun.pl/hook/<token>/zamowienia. Ścieżkę po tokenie wybierasz dowolnie. - Sprawdź, czy dochodzi
Wyślij testowe żądanie – pojawi się w Odebrane żądania (lista odświeża się sama, każde można rozwinąć):
- Dodaj krok waitForWebhook
Po akcji, która wyzwala webhook.
curl -X POST -H 'Content-Type: application/json' -d '{"test":1}' https://testrun.pl/hook/<token>/test{ "id": "w1", "action": "waitForWebhook", "path": "/zamowienia", "method": "POST",
"bodyContains": "{{email}}", "since": "run", "saveAs": "hook" },
{ "id": "w2", "action": "assert", "check": "variable", "variable": "hook.json.status", "op": "equals", "expected": "paid" }| Pole | Opis |
|---|---|
path | Fragment ścieżki po adresie projektu – albo pełny adres ze zmiennej webhook. |
method, bodyContains | Dodatkowe filtry. bodyContains z unikalną wartością (e-mail z przebiegu, nr zamówienia) gwarantuje, że to „Twój” webhook, a nie z równoległego testu. |
since | step (domyślnie) albo run. |
saveAs | {{hook.method}}, .path, .query, .headers.x-signature, .body, .json.pole (JSON lub formularz). |
Osobny adres na każdy przebieg
Gdy testowana aplikacja pozwala wpisać adres webhooka w formularzu (np. integracja w panelu klienta), użyj zmiennej {"type":"webhook"}. Każdy przebieg dostanie unikalny adres …/hook/<token>/r/<nazwa>-<losowe> – wpisz go krokiem fill i czekaj na niego: "path": "{{hook}}".
- Adres przyjmuje
GET,POST,PUT,PATCH,DELETEz dowolną treścią (zapisywaną jako tekst) i zawsze odpowiada200 {"ok":true}. Nieznany token –404. - Limity: treść do 256 KB, 300 żądań na minutę na projekt (potem
429). Żądania są przechowywane 7 dni. - Nie zapisujemy nagłówków
Cookieani dodawanych przez nasz serwer proxy. - Nowy adres unieważnia stary token – trzeba go zmienić w testowanych systemach.
Wysyłanie żądań (request)
Symuluje system zewnętrzny wysyłający żądanie do Twojej aplikacji – np. bramkę płatności potwierdzającą zapłatę albo integrację z CRM.
{
"id": "r1", "action": "request", "method": "POST",
"url": "/api/platnosci/powiadomienie",
"headers": { "X-Source": "testrun" },
"body": "{\"orderId\":\"{{nrZamowienia}}\",\"status\":\"PAID\"}",
"sign": { "secret": "{{kluczBramki}}", "header": "X-Signature", "algorithm": "sha256", "prefix": "sha256=" },
"expectStatus": 200,
"saveAs": "odp"
}- Adres: ścieżka względna = adres środowiska. Pełny adres musi należeć do zweryfikowanej domeny projektu.
- Content-Type jest ustawiany sam:
application/json, gdy treść zaczyna się od{lub[, w przeciwnym razieapplication/x-www-form-urlencoded. Własny nagłówek go nadpisuje. - sign – podpis HMAC treści (
sha1/sha256/sha384/sha512,hexlubbase64, opcjonalnyprefix) w podanym nagłówku. - Wynik: bez
expectStatuskrok nie przechodzi przy kodzie ≥ 400.{{odp.status}},{{odp.headers.…}},{{odp.body}},{{odp.json.…}}.
Żądanie wysyła serwer TestRun (nie przeglądarka testu, ale z jej ciasteczkami). Ze względów bezpieczeństwa: tylko http/https, tylko zweryfikowane domeny projektu i testrun.pl, adresy wewnętrzne zablokowane, przekierowania niedozwolone (mogłyby prowadzić do sieci wewnętrznej). Odpowiedź jest skracana do 1 mln znaków.
Podpisy i skróty (hash)
Gdy podpis ma być w treści (np. pole sign w Przelewy24), a nie w nagłówku, wylicz go wcześniej krokiem hash:
{ "id": "h1", "action": "hash", "algorithm": "sha256",
"input": "{{nrZamowienia}}|{{kwota}}", "key": "{{kluczBramki}}", "encoding": "hex", "saveAs": "podpis" }Algorytmy: md5, sha1, sha256, sha384, sha512. Z key – HMAC, bez – zwykły skrót. Potem użyj {{podpis}} w treści kroku request.
11Mocki
Gdy strona w przeglądarce pyta zewnętrzne API (kurier, GUS, płatności, mapy), TestRun może odpowiedzieć zamiast niego. Test przestaje zależeć od cudzej usługi, a Ty możesz sprawdzić scenariusze trudne do wywołania, np. awarię.
Podmiana odpowiedzi
{ "id": "m1", "action": "mock", "url": "api.kurier.pl/wycena", "method": "POST",
"status": 200, "body": "{\"cena\": 14.99, \"termin\": \"jutro\"}", "saveAs": "wycena" }| Pole | Opis |
|---|---|
url, match | Które żądania podmienić – dopasowanie. |
method | Tylko ta metoda HTTP (bez – wszystkie). |
status, headers, body | Odpowiedź (domyślnie 200). Content-Type ustawi się sam: JSON albo tekst. |
times | Ile razy odpowiedzieć; potem żądania idą do prawdziwej usługi. |
fail | true – zrywa połączenie (symulacja awarii usługi). |
saveAs | Ostatnie przechwycone żądanie: {{wycena.count}} (liczba trafień), .method, .url, .query.…, .body, .json.…. |
Mock działa od swojego kroku do końca przebiegu – umieść go przed akcją, która wywołuje usługę. Typowy wzorzec: mock na początku, akcja, potem asercja, że strona została wywołana poprawnie:
{ "id": "a5", "action": "assert", "check": "variable", "variable": "wycena.json.waga", "op": "equals", "expected": "2.5" }Dopasowanie adresu
match | Wzorzec | Pasuje do |
|---|---|---|
contains (domyślnie) | api.kurier.pl/wycena | Każdego adresu zawierającego ten tekst |
glob | https://api.platnosci.pl/** | Całego adresu: ** dowolny ciąg, * dowolny ciąg bez /, ? jeden znak |
regex | /v\d+/orders$ | Wyrażenia regularnego (fragment adresu) |
Glob musi pasować do całego adresu, łącznie z https:// i parametrami. W razie wątpliwości użyj contains.
CORS, przekierowania, awarie
- Mock działa w przeglądarce przebiegu (przechwytywanie sieci Playwrighta) – testowany serwer nic nie wie o podmianie. Mocki nie obejmują żądań, które Twój serwer wysyła do usług (do tego służy środowisko testowe z adresami sandboxów).
- CORS: usługa zewnętrzna jest zwykle na innej domenie, więc odpowiedź dostaje nagłówki
Access-Control-Allow-Origin(z danymi uwierzytelniającymi), a zapytania wstępneOPTIONSsą obsługiwane automatycznie. - Przejście na stronę usługi (nawigacja, nie zapytanie API) bez
bodypokazuje prostą stronę zastępczą „Symulacja usługi zewnętrznej”. - Przekierowania HTTP 302 (np. sklep → bramka płatności) normalnie omijają przechwytywanie. Gdy jakiś mock jest aktywny, TestRun pobiera przejścia stron bez podążania za przekierowaniem i sam sprawdza, czy prowadzi ono pod podmieniony adres.
- Kilka mocków na ten sam adres: przy przekierowaniach wygrywa najpóźniej dodany; mock z wyczerpanym
timeslub inną metodą przepuszcza żądanie dalej.
12Płatności
Dwie drogi testowania zakupów bez prawdziwych pieniędzy. Wybierz pierwszą, gdy bramka ma sandbox dostępny z internetu; drugą – gdy nie ma albo chcesz testu niezależnego od bramki.
Droga 1: przez sandbox bramki
Środowisko testowe sklepu łączy się z sandboksem bramki (BLIK, Przelewy24, PayU, Tpay…). Nagraj zakup w przeglądarce TestRun – kroki na stronie bramki (np. wybór „płatność pozytywna”) też się nagrają. W przebiegu runner przejdzie przez prawdziwy sandbox, a bramka sama wyśle powiadomienie do sklepu. Nic nie trzeba symulować.
Droga 2: symulacja bramki
W edytorze scenariusza: Symulacja bramki płatności… (podpowiadane też automatycznie, gdy nagranie snippetem „przeskoczyło” stronę bramki). Gotowe ustawienia: DemoPay (sklep demo TestRun), Przelewy24, PayU, Tpay i własna bramka.
- Adres bramki (fragment)
Przejście pod adres zawierający ten tekst zostanie przechwycone mockiem. Dane, które sklep przekazał bramce, będą w
{{bramka.url}},{{bramka.query.…}},{{bramka.json.…}}. - Adres powiadomień w sklepie
Endpoint, na który bramka wysyła potwierdzenie – ścieżka względna lub pełny adres w zweryfikowanej domenie.
- Strona powrotu
Gdzie bramka odsyła klienta po płatności.
- Klucz do podpisu
Nazwa sekretu w projekcie (np.
P24_CRC) – ustaw go w Sekretach. - Wstaw do scenariusza
Kreator doda kroki:
mock(na początku),hash(podpis),request(powiadomienie) inavigate(powrót). Dla niektórych bramek poprosi o uzupełnienie zmiennych, np. ID sprzedawcy, kwoty, sessionId.
{ "action": "mock", "url": "przelewy24.pl", "saveAs": "bramka" },
// … kroki sklepu aż do „Zapłać” …
{ "action": "hash", "algorithm": "sha384", "input": "{…,\"crc\":\"{{kluczBramki}}\"}", "saveAs": "podpis" },
{ "action": "request", "method": "POST", "url": "/platnosci/przelewy24/status", "body": "{…,\"sign\":\"{{podpis}}\"}" },
{ "action": "navigate", "url": "/zamowienie/dziekujemy" }Weryfikacja transakcji w API bramkiJeśli sklep po powiadomieniu dopytuje bramkę o transakcję (np. transaction/verify w Przelewy24), w środowisku testowym trzeba tę weryfikację wyłączyć – bramka nie zna symulowanej transakcji.
13Zasady działania
Architektura
*@inbox.testrun.pl i zapisuje je w skrzynkach projektów.Scenariusz to kontrakt między trzema częściami: nagrywanie go tworzy, panel pozwala go edytować, a runner wykonuje 1:1. Dlatego wszystko, co nagrasz, możesz też poprawić ręcznie – i odwrotnie.
Bezpieczeństwo
- Weryfikacja domen – testy, nagrywanie w przeglądarce TestRun i kroki
requestdziałają tylko na domenach, których własność potwierdziłeś. - Ochrona sieci wewnętrznej (SSRF) – przeglądarka przebiegu i nagrywania nie połączy się z adresami prywatnymi (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.0/8, 169.254.0.0/16, 100.64.0.0/10, prywatne IPv6,
localhost,*.internal) – także gdy publiczna nazwa domeny wskazuje na taki adres. - Sekrety – AES-256-GCM, maskowane w wynikach, nigdy nie wracają do przeglądarki.
- Izolacja przebiegów – każdy przebieg ma osobny kontekst przeglądarki; ciasteczka jednego testu nie trafią do drugiego (poza świadomie włączoną wspólną sesją kolejki).
- Pliki z testowanych stron – podgląd w panelu tylko dla PDF, obrazów i tekstu, w piaskownicy bez skryptów; HTML, SVG i inne typy zawsze idą do zapisu na dysk.
- Konto – hasła haszowane scrypt, ochrona przed CSRF (zmiany stanu tylko z domeny panelu, ciasteczko sesji
SameSite).
Przechowywanie danych
| Dane | Jak długo |
|---|---|
| Zrzuty, trace, pobrane pliki | Wg planu (darmowy: 14 dni), potem usuwane automatycznie |
| Wyniki kroków i historia przebiegów | Bez limitu |
| Skrzynki i maile z załącznikami | 7 dni; zapisane w danych testowych i z własnym adresem – bez limitu |
| Odebrane webhooki | 7 dni |
| Wersje scenariuszy | Bez limitu |
| Sesja przeglądarki w kolejce | Do końca uruchomienia kolejki |
| Nierozpoczęte nagrania | Wygasają po 2 godzinach |
Sprzątanie uruchamia się automatycznie co godzinę. Serwery i dane znajdują się w Unii Europejskiej.
Limity techniczne
| Czego dotyczy | Limit |
|---|---|
| Czas jednego przebiegu | 10 min |
| Kroki w scenariuszu | 500 |
| Limit czasu kroku | 100 ms – 10 min (domyślnie 10 s; maile i webhooki 60 s) |
| Ponowienia kroku | 0–5 |
Zagnieżdżenie include | 3 poziomy |
| Pobrane pliki w przebiegu | 20 plików, każdy do 50 MB |
| Wiadomość e-mail | 5 MB, do 20 załączników |
| Webhook przychodzący | 256 KB, 300/min na projekt |
| Pozycje harmonogramu | 30 |
| Bezczynna przeglądarka nagrywania | zamykana po 15 min |
| Link nagrywania snippetem | ważny 2 godz. |
Strony na localhost
Środowisko z adresem localhost / 127.0.0.1 działa tylko na komputerze testera – serwer TestRun go nie otworzy. Możesz takie środowisko dodać i nagrywać snippetem we własnej przeglądarce (bez weryfikacji domeny), ale przebiegi i harmonogramy wymagają środowiska dostępnego z internetu – np. UAT lub stagingu. Najprościej: nagraj na localhost, a uruchamiaj na stagingu (adres pochodzi ze środowiska, więc scenariusz się nie zmienia).
14Gdy coś nie działa
Najczęstsze komunikaty i co z nimi zrobić.
| Komunikat | Przyczyna i rozwiązanie |
|---|---|
| Nie znaleziono jednoznacznie elementu (strategia → liczba trafień) | Wszystkie strategie dały 0 (element zniknął, zmienił tekst, jeszcze się nie załadował) albo 2+ (niejednoznaczne). Popraw target, dodaj data-testid na stronie, użyj nth albo wydłuż timeoutMs. Zrzut z kroku pokaże, co było na ekranie. |
| Brak zapisanej wartości „email” | Scenariusz czyta dane testowe, których jeszcze nie ma. Uruchom najpierw scenariusz, który je zapisuje (z save: true), dodaj wartość ręcznie w Dane testowe albo połącz oba w kolejkę. Pamiętaj, że dane są osobne dla każdego środowiska. |
| Brak sekretu NAZWA | Dodaj sekret w Ustawienia (dla wszystkich środowisk albo tego, na którym uruchamiasz) albo oznacz zmienną jako niewymaganą. |
| Domena … nie jest zweryfikowana | Zweryfikuj domenę – lub domenę nadrzędną, która obejmie subdomeny. |
| Wykorzystano limit … przebiegów w tym miesiącu | Limit planu. Rzadziej uruchamiaj harmonogramy lub poczekaj do nowego miesiąca. |
| Nie otrzymano maila na … w ciągu 60 s | Sprawdź w Skrzynki e-mail, czy mail w ogóle przyszedł. Przyszedł – popraw filtr (temat, nadawca) albo ustaw "since": "run", jeśli przychodzi przed startem kroku. Nie przyszedł – sprawdź wysyłkę maili w testowanym środowisku i czy aplikacja nie blokuje domeny inbox.testrun.pl. |
| Nie znaleziono w mailu: link zawierający … | Mail przyszedł, ale link wygląda inaczej. Szczegóły kroku pokazują listę linków – popraw contains lub pattern. |
| Zablokowano połączenie z adresem wewnętrznym | Strona lub krok próbuje połączyć się z adresem prywatnym (np. API pod 10.x). Środowisko musi być dostępne z internetu. |
| Żądania można wysyłać tylko do zweryfikowanych domen projektu | Krok request celuje w obcą domenę. Zweryfikuj ją w projekcie lub użyj ścieżki względnej. |
| Twój plan pozwala uruchamiać testy najczęściej co 60 min | Wyrażenie cron daje zbyt częste uruchomienia – zwiększ odstęp. |
| Nieznana zmienna: {{x}} | Literówka albo zmienna, która powstaje dopiero w późniejszym kroku (saveAs). Sprawdź kolejność kroków. |
| Przebieg przerwany (restart workera) | Aktualizacja lub restart po stronie TestRun. Uruchom ponownie. |
| Strona nie otwiera się w przeglądarce TestRun / w przebiegu | Zapora lub ochrona przed botami blokuje IP serwera – wpuść je. Strona za VPN-em: nagrywaj snippetem. |
| Brak wolnej przeglądarki / miejsce w kolejce | Serwer obsługuje wiele nagrań naraz, ale w ramach pamięci. Poczekaj – przeglądarka uruchomi się sama, gdy nadejdzie Twoja kolej. |
| Test przechodzi raz, potem pada na „konto istnieje” | Dane wpisano na sztywno. Zamień je na zmienne (mailbox, generate) – Wstaw dane. |
| Ostrzeżenie „użyto zapasowego selektora” | Strona się zmieniła, ale test sobie poradził. Kliknij Zaktualizuj selektory, zanim zapasowe też przestaną działać. |
Nie znalazłeś odpowiedzi? Napisz na kontakt@testrun.pl – dołącz link do przebiegu.