TestRun.pl

Dokumentacja

Wszystko o TestRun – od konfiguracji po to, co dzieje się pod spodem

Krok po kroku: projekt i domeny, nagrywanie, ręczna edycja scenariuszy, kolejki, harmonogramy, skrzynki e-mail, webhooki, mocki i płatności. Przy każdej funkcji – jak jej użyć i jak działa.

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

  1. Załóż konto i potwierdź adres e-mail

    Bez potwierdzenia panel się nie otworzy. Niepotwierdzone konta są usuwane po 7 dniach.

  2. Utwórz projekt

    Podaj nazwę i pełny adres strony, np. https://uat.twoj-sklep.pl. Powstanie środowisko domyślne i wpis domeny do weryfikacji. Chcesz najpierw tylko spróbować? Wpisz adres sklepu demo https://testrun.pl/demo – nie wymaga weryfikacji.

  3. Zweryfikuj domenę

    Ustawienia › Weryfikacja domeny: dodaj meta tag, plik albo rekord TXT i kliknij Sprawdź teraz. Szczegóły.

  4. Jeśli strona jest za zaporą – wpuść IP TestRun

    Adres serwera znajdziesz w Ustawienia › Środowiska. Szczegóły.

  5. 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.

  6. 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

ProjektJedna aplikacja lub strona. Ma środowiska, domeny, sekrety, scenariusze, dane testowe i własny adres webhooków.
ŚrodowiskoAdres bazowy, np. UAT, staging, produkcja. Ten sam scenariusz uruchomisz na każdym z nich.
ScenariuszTest: lista kroków + zmienne + ustawienia (rozmiar okna, język, limity czasu). Każdy zapis tworzy nową wersję.
KrokJedna czynność: otwórz stronę, kliknij, wypełnij, poczekaj na maila, sprawdź tekst, podmień odpowiedź API…
PrzebiegJedno wykonanie scenariusza na serwerze – z wynikiem, zrzutami, plikami i trace.
Kolejka testówScenariusze uruchamiane po kolei, z przekazywaniem danych i (opcjonalnie) sesji przeglądarki.
HarmonogramAutomatyczne uruchamianie scenariuszy i kolejek według cron, na wybranym środowisku.
Dane testoweWartości zapisane przez jeden test (np. e-mail z rejestracji) i odczytywane przez inne (np. logowanie).
SekretHasło lub klucz – szyfrowany, nigdy niepokazywany w panelu ani w wynikach.
Skrzynka testowaAdres @inbox.testrun.pl, na który TestRun odbiera maile z Twojej aplikacji.
WebhookŻądanie HTTP między systemami. TestRun umie je odbierać i wysyłać.
MockPodmieniona odpowiedź usługi zewnętrznej (API kuriera, bramka płatności) w przeglądarce testu.

Mapa panelu

Po wybraniu projektu w menu po lewej masz zakładki:

ZakładkaDo czego służy
ScenariuszeLista testów, przycisk ● Nagraj test, Pusty scenariusz, szybkie Uruchom.
Kolejki testówScenariusze uruchamiane po kolei z przekazywaniem danych.
PrzebiegiHistoria wszystkich wykonań (ostatnie 100), odświeża się sama.
HarmonogramTesty uruchamiane automatycznie.
Dane testoweWartości przekazywane między scenariuszami – podgląd, ręczna edycja, usuwanie.
Skrzynki e-mailWszystkie skrzynki projektu i odebrane maile z załącznikami.
Webhooki i mockiAdres webhooków projektu, odebrane żądania, gotowe przykłady kroków.
UstawieniaSnippet, 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:

LimitPlan darmowyCo się dzieje po przekroczeniu
Przebiegi w miesiącu300Nowe uruchomienia są odrzucane z komunikatem „Wykorzystano limit 300 przebiegów w tym miesiącu”. Licznik zeruje się 1. dnia miesiąca.
Projekty3Nie da się utworzyć kolejnego (usunięty projekt się nie liczy).
Przebiegi równoległe1Kolejne czekają w kolejce – nie są odrzucane.
Najczęstszy harmonogramco 60 minZapis harmonogramu z krótszym odstępem jest odrzucany.
Przechowywanie wyników14 dniZrzuty, trace i pobrane pliki są usuwane automatycznie.
Członkowie organizacji1—

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.
Pod spodem

Ś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:

MetodaCo zrobić
Rekord DNS TXTDodaj w DNS domeny rekord TXT o treści testrun-verification=<token>.
PlikUmieść plik https://twoja-domena/.well-known/testrun-verification.txt zawierający sam token.
Znacznik metaDodaj 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.

Pod spodem
  • 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/demo nie 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:

zmienne scenariusza
"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ąć.
Pod spodem

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

RolaUprawnienia
owner, adminWszystko, w tym tworzenie i usuwanie projektów.
memberNagrywanie, edycja, uruchamianie, harmonogramy, sekrety, dane testowe.
viewerTylko 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 zalecaneWe własnej przeglądarce
Co trzeba miećZweryfikowaną domenęSnippet TestRun na stronie
Gdzie działa przeglądarkaNa serwerze TestRun; widzisz jej obraz w karcie paneluU Ciebie
Strony zewnętrzne (np. sandbox bramki)NagrywaneNienagrywane – tylko powrót z nich
localhost, VPN, dostęp tylko z Twojego IPNiedostępneDziała
Instalacja czegokolwiekNicJedna 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:

ElementDziałanie
KartyJak w zwykłej przeglądarce: przełączanie, zamykanie, + otwiera nową kartę z adresem środowiska. Linki otwierane w nowej karcie też tu trafią.
● licznik krokówLista nagranych kroków. ✕ usuwa zbędny krok (z opcją Cofnij).
← → ⟳ i pasek adresuNawigacja. 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.
PocztaMaile 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 plikiPliki ściągnięte na stronie – podgląd PDF/obrazów/tekstu i zapis, do końca nagrania.
Rozmiar oknaDopasuj 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 testZapisuje test i nagrywa kolejny w tej samej sesji. Szczegóły.
Zakończ / AnulujZapisuje 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.

Pod spodem
  • 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

  1. Wstaw adres skrzynki

    W polu e-mail formularza: Wstaw dane → E-mail.

  2. Wyślij formularz

    Np. rejestracji albo „Nie pamiętam hasła”.

  3. 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>):

HTML
<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.

  1. 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.

  2. Otwórz link

    Także w innej przeglądarce lub na telefonie. Albo przy znanej karcie kliknij Nagrywaj tę kartę.

  3. Potwierdź kod

    Sprawdź, czy strona pokazuje ten sam kod co panel, i kliknij Akceptuj i nagrywaj.

  4. 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 poluJeden fill z wartością końcową
Klik w etykietę checkboxaJeden check
Klik przycisku wysyłającego formularzJeden click
Enter w polu, który wysyła formularzpress Enter
Przeładowanie strony po kliknięciu (do 15 s)Tylko click – nawigacja jest skutkiem
Pierwsze załadowanie stronynavigate ze ścieżką względną
Wartość z „Wstaw dane”fill ze zmienną {{…}} (zapisywaną w danych testowych)
Ręcznie wpisana wartość z danych testowychfill ze zmienną typu stored
Ręcznie wpisane hasło (type=password)fill z sekretem – jawna wartość nigdy nie trafia do scenariusza
Autouzupełnienie przeglądarkiPomijane
Ruchy myszy, przewijanie bez celu, focus/blurPomijane

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 wait z czasem to ostateczność.
↑ Na górę

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

JSON
{
  "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": [ … ]
}
UstawienieZnaczenie
viewportRozmiar okna przeglądarki (200–3840 × 200–2160). Wpływa na wersję strony (mobilna/desktopowa).
locale, timezoneJęzyk i strefa czasowa przeglądarki – np. format dat na stronie.
defaultTimeoutMsIle każdy krok może czekać (np. na element). 100 ms – 120 s, domyślnie 10 s.
screenshotsonFailure (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.

TypPrzykładWartość
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

ZapisWartość
{{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 {{
Pod spodem

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.

GeneratorOpcjePrzykład
peselgender: male/female, minAge92071304817
nip, regon, regon14—5261040828
iban—polski NRB/IBAN
idCard, passport—nr dowodu, paszportu
firstName, lastName, fullNamegenderAnna Kowalska
phone—polski nr komórkowy
postalCode, street, city, companyName—00-950
passwordlength (domyślnie 14)mała i wielka litera, cyfra, znak specjalny
numbermin, max (0–1000)417
datefrom, to, format (YYYY-MM-DD)1987-03-12
textlength (50)zdanie
uuid—UUID v4
przykład
"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
"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
}
StrategiaPolaSzuka
testIdvalueAtrybutu identyfikatora testowego (np. data-testid)
rolerole, nameRoli dostępności i nazwy, np. przycisk „Zapisz”
labelvaluePola po etykiecie
placeholdervaluePola po tekście podpowiedzi
textvalue, exactElementu po widocznym tekście
css, xpathvalueSelektora CSS / XPath
  • frame – selektor CSS ramki iframe, gdy element jest w niej (działa też dla ramek z innej domeny).
  • nth – numer elementu (od 0), gdy strategia celowo wskazuje kilka.
Pod spodem
  • 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:

PoleOpis
idStały identyfikator (np. s7), unikalny w scenariuszu.
actionTyp kroku.
labelOpis dla człowieka – widoczny w edytorze, wynikach i mailu o błędzie.
timeoutMsWłasny limit czasu kroku (100 ms – 10 min).
optionaltrue – błąd nie przerywa testu; krok dostaje status warning.
retriesIle razy ponowić krok po błędzie (0–5).
screenshotNadpisuje ustawienie zrzutów dla tego kroku.

Nawigacja

KrokPolaDziałanie
navigateurlOtwiera adres (ścieżka względna = adres środowiska).
back, reload—Wstecz, odśwież.
waitForUrlurl, matchCzeka, aż adres będzie equals / contains / matches (regex).

Interakcje

KrokPolaDziałanie
clicktarget, button, clickCount, modifiersKlik (lewy/prawy/środkowy, 1–3 razy, z Alt/Control/Meta/Shift).
filltarget, valueCzyści pole i wpisuje wartość od razu.
typetarget, value, delayMsWpisuje znak po znaku (domyślnie co 50 ms) – dla masek i autouzupełniania.
presskey, target?Klawisz, np. Enter, Tab, Control+A.
selecttarget, by, valuesWybór z listy po label albo value.
checktarget, checkedZaznacza/odznacza – także własne checkboxy z ukrytym polem.
hover, scrolltarget / x, yNajechanie (menu rozwijane), przewinięcie do elementu lub pozycji.
dialogaccept, promptTextUstala odpowiedź na następny alert/confirm/prompt. Bez tego kroku okna są odrzucane.
uploadtarget, filesWysyłanie pliku (asset:<nazwa>). wkrótce – wgrywanie plików projektu nie jest jeszcze dostępne w panelu.

Oczekiwanie, dane, zrzuty

KrokPolaDziałanie
waitFortarget, stateCzeka, aż element będzie visible / hidden / attached / detached.
waitmsStała pauza (maks. 60 s). Odradzana.
extracttarget?, property, regex?, saveAsOdczyt ze strony: text, value, attribute:href, url, title. Z regex zapisuje pierwszą grupę.
setVariablename, valueUstawia zmienną (z podstawianiem innych).
screenshotname?, fullPage?Zrzut do wyników każdego przebiegu.
odczyt numeru zamówienia
{ "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

checkWymagaSprawdza
visible / hiddentargetWidoczność elementu
enabled / disabledtargetCzy kontrolka jest aktywna
texttarget, op, expectedTekst elementu (białe znaki znormalizowane)
valuetarget, op, expectedWartość pola
attributetarget, name, op, expectedAtrybut elementu
counttarget, op, expected (liczba)Liczbę elementów – wg pierwszej strategii
url / titleop, expectedAdres / tytuł strony (equals przyjmuje ścieżkę /panel)
variablevariable, op, expectedWartość zmiennej, np. mail.subject, hook.json.status

Operatory op: equals, notEquals, contains, notContains, matches (regex), gt, gte, lt, lte.

przykłady
{ "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" }
Pod spodem

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.

include
{ "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

StatusZnaczenie
queuedCzeka na wolną przeglądarkę.
runningTrwa – kroki pojawiają się na bieżąco.
passedWszystkie obowiązkowe kroki przeszły.
failedTest wykrył problem – krok nie przeszedł (brak elementu, niespełniona asercja, nie przyszedł mail).
errorTest nie mógł wystartować – brak sekretu lub zapisanej wartości, niezweryfikowana domena, limit planu, błąd po stronie TestRun.
timeoutPrzekroczony maksymalny czas przebiegu (10 min).
cancelledAnulowany.

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

Uruchomienie→Kontrole→Kolejka→Worker + Chromium→Wyniki→Dane, kolejka, powiadomienia
Pod spodem
  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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)”.

↑ Na górę

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

  1. Kolejki testów → + Nowa kolejka

    Albo nagraj kilka testów przyciskiem Następny test – kolejka powstanie sama.

  2. 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).

  3. Ustaw opcje i zapisz

    Patrz niżej. Potem Uruchom i wybierz środowisko.

Wspólna sesja i zatrzymanie po błędzie

OpcjaDomyślnieDziałanie
Wspólna sesja przeglądarkiwłączonaKolejny 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łędziewłączonaGdy 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

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 stored dostaje 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 storageState Playwrighta) jest przechowywana zaszyfrowana i usuwana po zakończeniu kolejki.
  • Anulowanie kolejki anuluje jej oczekujące przebiegi. Wynik kolejki: passed, gdy przeszły wszystkie scenariusze.
↑ Na górę

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żenieKiedy
0 6 * * 1-5Dni robocze o 6:00
30 7 * * *Codziennie o 7:30
0 * * * *Co godzinę o pełnej
0 8-18 * * 1-5Co godzinę od 8 do 18 w dni robocze
0 */4 * * *Co 4 godziny
0 9 * * 1Poniedział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ówSeria z harmonogramu
KolejnośćPo koleiPo kolei
Sesja przeglądarkiWspólna (opcja)Każda pozycja osobno
Przekazywanie danychTakNie (poza danymi testowymi projektu)
BłądZatrzymuje kolejne (opcja)Nie zatrzymuje kolejnych
Do czegoZależ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

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 error i 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.
↑ Na górę

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 mailbox i generate z "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

Scenariusz „Rejestracja”
"variables": {
  "email": { "type": "mailbox", "save": true },
  "haslo": { "type": "generate", "generator": "password", "save": true }
}
Scenariusz „Logowanie”
"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ę.
Pod spodem

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)

krok
{
  "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" }
  ]
}
PoleOpis
filtersubjectContains, from, bodyContains – fragmenty, bez rozróżniania wielkości liter. Wszystkie muszą pasować.
sincestep (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).
timeoutMsDomyślnie 60 s (a nie defaultTimeoutMs).
extract.linkPierwszy link zawierający contains i/lub pasujący do pattern.
extract.codePierwsza liczba 4–8-cyfrowa w treści – kody 2FA, OTP.
extract.regexPierwsza grupa wyrażenia (albo całe dopasowanie).
saveAsCały mail: {{mail.subject}}, .from, .text, .html, .links, .attachmentNames, .attachments.

Typowe zakończenie: { "action": "navigate", "url": "{{linkAktywacyjny}}" } albo { "action": "fill", "target": …, "value": "{{kod}}" }.

Pod spodem

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):

czy przyszła faktura
{ "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:

adres projektu
https://testrun.pl/hook/<token>/<dowolna-ścieżka>
  1. Wpisz adres w testowanej aplikacji

    Np. jako adres powiadomień o zamówieniach: https://testrun.pl/hook/<token>/zamowienia. Ścieżkę po tokenie wybierasz dowolnie.

  2. Sprawdź, czy dochodzi

    Wyślij testowe żądanie – pojawi się w Odebrane żądania (lista odświeża się sama, każde można rozwinąć):

  3. Dodaj krok waitForWebhook

    Po akcji, która wyzwala webhook.

terminal
curl -X POST -H 'Content-Type: application/json' -d '{"test":1}' https://testrun.pl/hook/<token>/test
kroki
{ "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" }
PoleOpis
pathFragment ścieżki po adresie projektu – albo pełny adres ze zmiennej webhook.
method, bodyContainsDodatkowe 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.
sincestep (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}}".

Pod spodem
  • Adres przyjmuje GET, POST, PUT, PATCH, DELETE z dowolną treścią (zapisywaną jako tekst) i zawsze odpowiada 200 {"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 Cookie ani 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.

krok
{
  "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 razie application/x-www-form-urlencoded. Własny nagłówek go nadpisuje.
  • sign – podpis HMAC treści (sha1/sha256/sha384/sha512, hex lub base64, opcjonalny prefix) w podanym nagłówku.
  • Wynik: bez expectStatus krok nie przechodzi przy kodzie ≥ 400. {{odp.status}}, {{odp.headers.…}}, {{odp.body}}, {{odp.json.…}}.
Pod spodem

Żą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:

krok
{ "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.

↑ Na górę

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

krok
{ "id": "m1", "action": "mock", "url": "api.kurier.pl/wycena", "method": "POST",
  "status": 200, "body": "{\"cena\": 14.99, \"termin\": \"jutro\"}", "saveAs": "wycena" }
PoleOpis
url, matchKtóre żądania podmienić – dopasowanie.
methodTylko ta metoda HTTP (bez – wszystkie).
status, headers, bodyOdpowiedź (domyślnie 200). Content-Type ustawi się sam: JSON albo tekst.
timesIle razy odpowiedzieć; potem żądania idą do prawdziwej usługi.
failtrue – zrywa połączenie (symulacja awarii usługi).
saveAsOstatnie 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:

czy strona wysłała dobrą wagę paczki
{ "id": "a5", "action": "assert", "check": "variable", "variable": "wycena.json.waga", "op": "equals", "expected": "2.5" }

Dopasowanie adresu

matchWzorzecPasuje do
contains (domyślnie)api.kurier.pl/wycenaKażdego adresu zawierającego ten tekst
globhttps://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

Pod spodem
  • 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ępne OPTIONS są obsługiwane automatycznie.
  • Przejście na stronę usługi (nawigacja, nie zapytanie API) bez body pokazuje 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 times lub inną metodą przepuszcza żądanie dalej.
↑ Na górę

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.

  1. 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.…}}.

  2. Adres powiadomień w sklepie

    Endpoint, na który bramka wysyła potwierdzenie – ścieżka względna lub pełny adres w zweryfikowanej domenie.

  3. Strona powrotu

    Gdzie bramka odsyła klienta po płatności.

  4. Klucz do podpisu

    Nazwa sekretu w projekcie (np. P24_CRC) – ustaw go w Sekretach.

  5. Wstaw do scenariusza

    Kreator doda kroki: mock (na początku), hash (podpis), request (powiadomienie) i navigate (powrót). Dla niektórych bramek poprosi o uzupełnienie zmiennych, np. ID sprzedawcy, kwoty, sessionId.

co powstaje (skrót)
{ "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.

↑ Na górę

13Zasady działania

Architektura

TyPanel w przeglądarceKonfiguracja, edycja, wyniki. Karta nagrywania pokazuje obraz przeglądarki z serwera.
APISerwer aplikacjiAPI panelu, WebSocket nagrywania, przeglądarka nagrywania (Chromium), odbiór webhooków.
BazaPostgreSQLProjekty, wersje scenariuszy, kolejka przebiegów, wyniki, maile, webhooki. Wszystko w UE.
WorkerWykonawca testówPobiera przebiegi z kolejki, uruchamia harmonogramy, sprząta stare pliki. Playwright + Chromium.
SMTPSerwer pocztowyOdbiera maile dla *@inbox.testrun.pl i zapisuje je w skrzynkach projektów.
CelTwoja aplikacjaUAT, staging, produkcja – odwiedzana z IP serwera TestRun.

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 request dział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

DaneJak długo
Zrzuty, trace, pobrane plikiWg planu (darmowy: 14 dni), potem usuwane automatycznie
Wyniki kroków i historia przebiegówBez limitu
Skrzynki i maile z załącznikami7 dni; zapisane w danych testowych i z własnym adresem – bez limitu
Odebrane webhooki7 dni
Wersje scenariuszyBez limitu
Sesja przeglądarki w kolejceDo końca uruchomienia kolejki
Nierozpoczęte nagraniaWygasają po 2 godzinach

Sprzątanie uruchamia się automatycznie co godzinę. Serwery i dane znajdują się w Unii Europejskiej.

Limity techniczne

Czego dotyczyLimit
Czas jednego przebiegu10 min
Kroki w scenariuszu500
Limit czasu kroku100 ms – 10 min (domyślnie 10 s; maile i webhooki 60 s)
Ponowienia kroku0–5
Zagnieżdżenie include3 poziomy
Pobrane pliki w przebiegu20 plików, każdy do 50 MB
Wiadomość e-mail5 MB, do 20 załączników
Webhook przychodzący256 KB, 300/min na projekt
Pozycje harmonogramu30
Bezczynna przeglądarka nagrywaniazamykana po 15 min
Link nagrywania snippetemważ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).

↑ Na górę

14Gdy coś nie działa

Najczęstsze komunikaty i co z nimi zrobić.

KomunikatPrzyczyna 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 NAZWADodaj sekret w Ustawienia (dla wszystkich środowisk albo tego, na którym uruchamiasz) albo oznacz zmienną jako niewymaganą.
Domena … nie jest zweryfikowanaZweryfikuj domenę – lub domenę nadrzędną, która obejmie subdomeny.
Wykorzystano limit … przebiegów w tym miesiącuLimit planu. Rzadziej uruchamiaj harmonogramy lub poczekaj do nowego miesiąca.
Nie otrzymano maila na … w ciągu 60 sSprawdź 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ętrznymStrona 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 projektuKrok 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 minWyraż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 przebieguZapora lub ochrona przed botami blokuje IP serwera – wpuść je. Strona za VPN-em: nagrywaj snippetem.
Brak wolnej przeglądarki / miejsce w kolejceSerwer 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.

↑ Na górę

Gotowy na pierwszy automatyczny test?

Załóż darmowe konto, nagraj rejestrację albo zakup i ustaw harmonogram.