Testowanie automatyczne w środowisku chmurowym: Selenium Grid 4, Playwright i koszty równoległości
Czas czytania: 15 minut

Automatyzacja testów w chmurze to uruchamianie testów automatycznych na przeglądarkach, urządzeniach i maszynach, które wynajmujecie na żądanie, zamiast trzymać je w pokoju obok. W praktyce oznacza to trzy rzeczy: równoległość, czyli wiele testów naraz, szeroką macierz przeglądarek i urządzeń oraz rachunek za minuty albo sesje. Poniżej znajdziecie działający Selenium Grid 4, konfigurację Playwright z podziałem na shardy, gotowy plik GitHub Actions i nasz pomiar czasu dla 1, 2, 4 i 8 workerów.

Ten tekst jest dla zespołów, które mają już testy automatyczne i chcą, żeby kończyły się w minutach, a nie w trakcie lunchu. Jeśli dopiero wybieracie narzędzie, zacznijcie od porównania Selenium, Cypress i Playwright. Jeśli interesuje Was testowanie aplikacji, które same działają w chmurze (skalowanie, odporność, koszty infrastruktury), to osobny temat, który omawiamy na szkoleniu testowanie oprogramowania w chmurze.

Czym jest automatyzacja testów w chmurze?

Automatyzacja testów w chmurze to przeniesienie wykonania testów z jednego komputera na pulę zasobów, którą można powiększyć na czas przebiegu i oddać zaraz po nim. NIST SP 800-145 z 2011 roku opisuje chmurę przez 5 cech, a dla testerów liczą się dwie z nich: samoobsługa na żądanie i szybka elastyczność. Wy zamawiacie 8 przeglądarek na 10 minut, płacicie za 10 minut i nie myślicie o serwerze przez resztę tygodnia.

Same testy się nie zmieniają. Zmienia się to, gdzie startuje przeglądarka: zamiast lokalnego sterownika test łączy się ze zdalnym punktem, na przykład adresem Selenium Grid, albo jest jednym z kilku zadań w pipeline CI. Dlatego najczęstszy błąd przy migracji nie leży w chmurze, tylko w testach, które zakładały, że zawsze biegną pojedynczo, po kolei i na tych samych danych.

Nasz pomiar, 8 testów koszyka na selenium-shop.pl, Playwright 1.64.0

7,2 s

1 worker, testy jeden po drugim

3,7 s

2 workery, prawie dwa razy szybciej

2,6 s

4 workery

2,3 s

8 workerów, przyrost już niewielki

Źródło: Quality Island, pomiar 10.10.2026, Apple M4 Pro z 12 rdzeniami logicznymi, Chromium headless shell 156, czasy raportu Playwright

Jakie są trzy modele uruchamiania testów w chmurze?

Pierwszy akapit odpowiedzi jest prosty: albo sami stawiacie przeglądarki (Selenium Grid w kontenerach), albo wynajmujecie moc obliczeniową i dzielicie testy między maszyny CI (Playwright z shardami), albo kupujecie gotową farmę przeglądarek i urządzeń. Każdy model ma inny rachunek i innego właściciela problemów.

Model Co dostajecie Za co płacicie Kiedy wybrać Na co uważać
Własny Selenium Grid w kontenerach Pełna kontrola, dostęp do sieci wewnętrznej, Chrome, Firefox, Edge na Linuksie Maszyny wirtualne albo klaster Kubernetes plus czas zespołu na utrzymanie Duży, stały wolumen testów, dane, które nie mogą wyjść poza Waszą sieć Brak Safari i prawdziwych telefonów, aktualizacje obrazów są po Waszej stronie
Runnery CI i podział na shardy Równoległość bez osobnej infrastruktury, raport scalony z wielu zadań Minuty runnerów; w repozytoriach publicznych standardowe runnery GitHub są bezpłatne Playwright albo Cypress, przeglądarki silnikowe zamiast prawdziwych urządzeń Każdy shard powtarza instalację zależności i przeglądarek
Komercyjna farma przeglądarek i urządzeń Setki kombinacji systemów, przeglądarek i telefonów, nagrania wideo, logi Liczbę równoległych sesji; plan BrowserStack Automate jest skalowany właśnie liczbą testów równoległych Safari na iOS, prawdziwe urządzenia mobilne, rzadkie wersje przeglądarek Opóźnienia sieci, tunel do środowisk testowych, kolejka przy wyczerpanych sesjach

Źródło: dokumentacja Selenium Grid, Playwright, GitHub Docs i cennik BrowserStack Automate, odczyt 10.10.2026

Porównanie dwóch najpopularniejszych farm, czyli Sauce Labs i BrowserStack, opisaliśmy osobno w artykule Sauce Labs i BrowserStack: chmurowe platformy do testów cross-browser. Tutaj skupiamy się na tym, co jest wspólne dla wszystkich modeli: jak zaprojektować testy pod równoległość i jak policzyć, czy się to opłaca.

Jak działa Selenium Grid 4?

Selenium Grid 4 przyjmuje polecenia WebDriver od testu i przekazuje je do zdalnej przeglądarki na jednym z węzłów. Według dokumentacji Selenium Grid 4 składa się z 6 komponentów, które w trybie standalone działają w jednym procesie, a w trybie rozproszonym mogą stać na osobnych maszynach.

Wejście

Router

Przyjmuje wszystkie żądania z zewnątrz i kieruje je do właściwego komponentu. To adres, który wpisujecie w testach, domyślnie port 4444.

Kolejka

New Session Queue

Trzyma prośby o nowe sesje w kolejności FIFO. Gdy wszystkie sloty są zajęte, test czeka tutaj, a nie dostaje błąd.

Przydział

Distributor

Zna węzły i ich możliwości, pobiera prośby z kolejki i przydziela sesję do węzła z pasującą przeglądarką.

Pamięć

Session Map

Wiąże identyfikator sesji z węzłem, na którym sesja działa, żeby kolejne polecenia trafiały do tej samej przeglądarki.

Wykonanie

Node

Zarządza slotami przeglądarek na swojej maszynie. Węzłów może być wiele, z różnymi systemami i przeglądarkami.

Komunikacja

Event Bus

Łączy węzły, Distributor, kolejkę i Session Map. Domyślne porty to 4442 i 4443.

Grid ma 3 tryby: standalone (wszystko w jednym procesie, idealny na start), hub i node (klasyczny podział na koordynatora i węzły) oraz tryb w pełni rozproszony dla dużych instalacji. Do uruchomienia potrzebujecie Javy 11 lub nowszej i jednego pliku jar; my w przykładach używamy Selenium 4.51.0 z 9 października 2026 roku. Dokumentacja Selenium podaje prosty wzór: liczba testów razy średni czas testu podzielone przez liczbę węzłów. Według tego samego źródła 100 testów po 120 sekund na 15 węzłach kończy się po 13 minutach i 20 sekundach, a bez Grida trwałoby ponad 3 godziny.

Terminal: Grid standalone z czterema slotami

java -jar selenium-server-4.51.0.jar standalone --max-sessions 4

Ciekawostka, która kosztuje godziny

Ten sam Grid liczy sloty różnie zależnie od tego, jak go uruchomicie. Według dokumentacji Selenium węzeł uruchomiony z pliku jar domyślnie przyjmuje tyle równoległych sesji, ile ma procesorów. Według pliku ENV_VARIABLES projektu docker-selenium węzeł w kontenerze ma zmienną SE_NODE_MAX_SESSIONS ustawioną domyślnie na 1. Zespół przenosi Grid z laptopa do kontenerów, uruchamia te same testy i nagle wszystko biegnie po kolei. Chmura nie zwolniła, po prostu każdy węzeł grzecznie obsługuje jednego gościa naraz.

Jak uruchomić Selenium Grid w kontenerach i podłączyć test w Javie?

Najprostsza droga to obrazy z projektu docker-selenium: jeden kontener z hubem i po jednym kontenerze na przeglądarkę. Ten sam plik uruchomicie lokalnie, na maszynie wirtualnej w dowolnej chmurze publicznej albo jako punkt wyjścia do klastra Kubernetes. Poniżej konfiguracja na wydaniu 4.49.0-20260909, najnowszym w repozytorium w dniu pisania.

docker-compose.yml

services:
  selenium-hub:
    image: selenium/hub:4.49.0-20260909
    container_name: selenium-hub
    ports:
      - "4442:4442"
      - "4443:4443"
      - "4444:4444"

  chrome:
    image: selenium/node-chrome:4.49.0-20260909
    shm_size: 2gb
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_NODE_MAX_SESSIONS=4
      - SE_NODE_OVERRIDE_MAX_SESSIONS=true

  firefox:
    image: selenium/node-firefox:4.49.0-20260909
    shm_size: 2gb
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub

Dwie linie robią tu największą różnicę. shm_size: 2gb to zalecenie z dokumentacji projektu, bo przeglądarka w kontenerze z domyślną, małą pamięcią współdzieloną potrafi się wyłożyć przy cięższych stronach. Para SE_NODE_MAX_SESSIONS i SE_NODE_OVERRIDE_MAX_SESSIONS pozwala węzłowi Chrome obsłużyć 4 sesje naraz; bez drugiej zmiennej Grid ograniczy się do liczby procesorów kontenera. Bezpieczniejszą praktyką jest jednak więcej małych węzłów niż jeden duży, bo awaria jednej przeglądarki nie zabiera wtedy ze sobą trzech pozostałych.

Test nie wie, gdzie stoi przeglądarka. Zamiast new ChromeDriver() tworzycie RemoteWebDriver z adresem Grida. Poniższą klasę skompilowaliśmy w Javie 21 i uruchomiliśmy 10.10.2026 na Grid standalone 4.51.0 z Chrome 154: dodaje 4 produkty do koszyka na naszej stronie treningowej selenium-shop.pl.

GridKoszykTest.java

package pl.qualityisland.grid;

import java.net.URI;
import java.time.Duration;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class GridKoszykTest {

    static final String GRID = System.getenv().getOrDefault("GRID_URL", "http://localhost:4444");
    static final String SKLEP = "http://www.selenium-shop.pl/produkt/";

    static String dodajDoKoszyka(String slug) throws Exception {
        ChromeOptions opcje = new ChromeOptions();
        opcje.addArguments("--headless=new");
        WebDriver driver = new RemoteWebDriver(URI.create(GRID).toURL(), opcje);
        try {
            driver.get(SKLEP + slug + "/");
            driver.findElement(By.name("add-to-cart")).click();
            String komunikat = new WebDriverWait(driver, Duration.ofSeconds(10))
                    .until(ExpectedConditions.visibilityOfElementLocated(By.className("woocommerce-message")))
                    .getText();
            if (!komunikat.contains("has been added to your cart")) {
                throw new AssertionError(slug + ": " + komunikat);
            }
            return slug + " OK";
        } finally {
            driver.quit();
        }
    }

    public static void main(String[] args) throws Exception {
        List<String> produkty = List.of(
                "pilka-nozna-kipsta-f100", "pilka-nozna-adidas-euro-2020",
                "koszulka-west-ham-united", "koszulka-leicester-fc-city");
        int watki = Integer.parseInt(System.getenv().getOrDefault("WATKI", "4"));
        long start = System.nanoTime();
        try (ExecutorService pula = Executors.newFixedThreadPool(watki)) {
            List<Future<String>> wyniki = pula.invokeAll(
                    produkty.stream().map(p -> (java.util.concurrent.Callable<String>) () -> dodajDoKoszyka(p)).toList());
            for (Future<String> w : wyniki) {
                System.out.println(w.get());
            }
        }
        System.out.printf("Czas: %.1f s przy %d watkach%n", (System.nanoTime() - start) / 1e9, watki);
    }
}

Z naszego pomiaru wynika, że przy 1 wątku cały przebieg trwał 8,7 sekundy, a przy 4 wątkach 3,5 sekundy, w tym start czterech przeglądarek. Adres Grida pochodzi ze zmiennej GRID_URL, więc ten sam kod pójdzie na lokalny Grid, na Grid w kontenerach i na komercyjną farmę, która też udostępnia punkt zgodny z WebDriver. W prawdziwym projekcie równoległość oddajecie frameworkowi testowemu, na przykład JUnit 5 albo TestNG, a nie ręcznej puli wątków, ale mechanika jest ta sama.

Jak Playwright uruchamia testy równolegle?

Playwright nie potrzebuje Grida, bo sam uruchamia testy równolegle w procesach roboczych, czyli workerach. Według dokumentacji Playwright domyślna liczba workerów to połowa logicznych rdzeni procesora, czyli na naszym komputerze z 12 rdzeniami logicznymi 6 workerów. Każdy worker to osobny proces z własną przeglądarką, a po nieudanym teście worker jest zamykany i startuje od nowa, żeby kolejne testy miały czyste środowisko.

playwright.config.ts

import { defineConfig, devices } from '@playwright/test';

export default defineConfig({
  testDir: './tests',
  fullyParallel: true,
  workers: process.env.CI ? 2 : undefined,
  retries: process.env.CI ? 1 : 0,
  reporter: process.env.CI ? 'blob' : 'list',
  use: {
    baseURL: 'http://www.selenium-shop.pl',
    trace: 'on-first-retry',
  },
  projects: [
    { name: 'chromium', use: { ...devices['Desktop Chrome'] } },
  ],
});

tests/koszyk.spec.ts

import { test, expect } from '@playwright/test';

const produkty = [
  'pilka-nozna-kipsta-f100',
  'pilka-nozna-adidas-replika-liga-mistrzow',
  'pilka-nozna-adidas-euro-2020',
  'koszulka-newcastle-fc-united',
  'koszulka-west-ham-united',
  'koszulka-tottenham-hotspur-f-c',
  'koszulka-leicester-fc-city',
  'koszulka-manchester-fc-city',
];

for (const slug of produkty) {
  test(`dodanie do koszyka: ${slug}`, async ({ page }) => {
    await page.goto(`/produkt/${slug}/`);
    await expect(page.locator('h1.product_title')).toBeVisible();
    await page.locator('button[name="add-to-cart"]').click();
    await expect(page.locator('.woocommerce-message')).toContainText('has been added to your cart');
  });
}

Ten sam zestaw 8 testów, rosnąca liczba workerów

1 worker

7,2 s

2 workery

3,7 s

4 workery

2,6 s

8 workerów

2,3 s

Źródło: Quality Island, pomiar 10.10.2026, Playwright 1.64.0, Chromium headless shell 156, po 2 przebiegi na wariant, wyniki powtarzalne co do 0,2 s

Wykres pokazuje rzecz ważniejszą niż samo przyspieszenie. Z 1 na 2 workery czas spadł prawie o połowę, ale z 4 na 8 już tylko o 0,3 sekundy, bo 8 testów nie da się podzielić drobniej, a start przeglądarki i ładowanie konfiguracji zostają stałe. Ten sam efekt zobaczycie w chmurze: dokładanie maszyn ma sens, dopóki testów jest wyraźnie więcej niż slotów, a każdy test trwa dłużej niż jego przygotowanie.

Opcja fullyParallel: true pozwala dzielić między workery pojedyncze testy, a nie całe pliki. Bez niej plik z 40 testami zawsze biegnie w jednym workerze, a reszta czeka bezczynnie. Testy muszą być wtedy niezależne: każdy loguje się sam, tworzy własne dane i nie liczy na to, że poprzedni zostawił coś w koszyku.

Jak wygląda konfiguracja CI z podziałem testów na shardy?

Gdy jedna maszyna przestaje wystarczać, Playwright dzieli zestaw na shardy poleceniem --shard=1/4, --shard=2/4 i tak dalej, a każdy shard biegnie na osobnym runnerze CI. Według dokumentacji Playwright do równego podziału warto włączyć fullyParallel, a wyniki z shardów zapisuje się reporterem blob i scala poleceniem merge-reports. Poniższy plik dla GitHub Actions odpowiada przykładowi z dokumentacji, z 4 shardami i wspólnym raportem HTML.

.github/workflows/playwright.yml

name: Testy Playwright
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
jobs:
  testy:
    runs-on: ubuntu-latest
    timeout-minutes: 30
    strategy:
      fail-fast: false
      matrix:
        shardIndex: [1, 2, 3, 4]
        shardTotal: [4]
    steps:
    - uses: actions/checkout@v6
    - uses: actions/setup-node@v6
      with:
        node-version: lts/*
    - name: Instalacja zależności
      run: npm ci
    - name: Instalacja przeglądarki
      run: npx playwright install --with-deps chromium
    - name: Testy, shard ${{ matrix.shardIndex }} z ${{ matrix.shardTotal }}
      run: npx playwright test --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }}
    - name: Zapis raportu blob
      if: ${{ !cancelled() }}
      uses: actions/upload-artifact@v4
      with:
        name: blob-report-${{ matrix.shardIndex }}
        path: blob-report
        retention-days: 1

  raport:
    if: ${{ !cancelled() }}
    needs: [testy]
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v6
    - uses: actions/setup-node@v6
      with:
        node-version: lts/*
    - name: Instalacja zależności
      run: npm ci
    - name: Pobranie raportów z shardów
      uses: actions/download-artifact@v5
      with:
        path: all-blob-reports
        pattern: blob-report-*
        merge-multiple: true
    - name: Scalenie w raport HTML
      run: npx playwright merge-reports --reporter html ./all-blob-reports
    - name: Zapis raportu HTML
      uses: actions/upload-artifact@v4
      with:
        name: raport-html
        path: playwright-report
        retention-days: 14

Według GitHub Docs standardowy runner Linux ma 4 procesory i 16 GB pamięci w repozytorium publicznym, ale 2 procesory i 8 GB w prywatnym. Dlatego w konfiguracji wyżej ustawiamy na CI 2 workery, tak jak w przykładzie z dokumentacji Playwright: na runnerze z 2 procesorami 4 przeglądarki przepychałyby się o czas procesora i testy zaczęłyby przekraczać limity czasu. Lepiej dodać shard niż dokładać workery na słabej maszynie. Tę konfigurację uruchomiliśmy lokalnie ze zmienną CI=1: 8 testów przeszło, a reporter blob zapisał plik do scalenia. Jeśli budujecie pipeline od zera albo chcecie go uporządkować, pomagamy przy budowie procesów CI/CD razem z testami, które w nim biegną.

Ile kosztuje równoległość i gdzie uciekają pieniądze?

Równoległość skraca czas oczekiwania na wynik, ale nie zmniejsza ilości pracy do wykonania. Minuty procesora i tak trzeba przepalić, a każdy dodatkowy shard dokłada stały narzut: pobranie repozytorium, instalację zależności i przeglądarek. Rachunek najlepiej pokazać na liczbach, z zastrzeżeniem, że wolumen poniżej jest przykładowy, a stawki pochodzą z cennika.

Wariant (przykład: 600 testów po 20 s) Czas na zegarze Minuty rozliczane Koszt runnera Linux 2-core
1 runner, 2 workery ok. 100 min plus 3 min narzutu ok. 103 min ok. 0,62 USD za przebieg
4 shardy po 2 workery ok. 25 min plus 3 min narzutu ok. 4 x 28 = 112 min ok. 0,67 USD za przebieg
10 shardów po 2 workery ok. 10 min plus 3 min narzutu ok. 10 x 13 = 130 min ok. 0,78 USD za przebieg

Źródło: wolumen i narzut 3 minut przyjęte przykładowo; stawka 0,006 USD za minutę Linux 2-core według cennika GitHub Actions, odczyt 10.10.2026

Według cennika GitHub Actions odczytanego 10.10.2026 minuta runnera Linux 2-core kosztuje 0,006 USD, Windows 2-core 0,010 USD, a macOS 0,062 USD, czyli ponad 10 razy więcej niż Linux. Ten sam cennik daje kontu GitHub Free 2 000 minut miesięcznie dla repozytoriów prywatnych, a w repozytoriach publicznych standardowe runnery są bezpłatne. Wniosek z tabeli: dziesięć shardów zamiast jednego skraca oczekiwanie z prawie dwóch godzin do kwadransa, a rachunek rośnie o kilkanaście centów. Najdroższym zasobem w tym równaniu jest czas programistów czekających na wynik, nie minuty runnera.

W farmach przeglądarek rachunek wygląda inaczej. Płacicie za liczbę równoległych sesji w abonamencie, więc pytanie brzmi nie „ile minut”, tylko „ile testów naraz”. Jeśli zestaw ma 600 testów, a plan 5 sesji, to farma i tak wykona je po 5. Dlatego przed zakupem zmierzcie średni czas testu i policzcie z wzoru z dokumentacji Selenium, ile slotów potrzebujecie, żeby zmieścić się w Waszym budżecie czasu, na przykład 15 minut na pull request. Konkretnych cen nie podajemy, bo zmieniają się częściej niż wersje przeglądarek; sprawdzajcie je w dniu decyzji na stronie dostawcy.

Kiedy chmura nie pomoże Waszym testom?

Chmura przyspiesza testy dobre i zwielokrotnia problemy testów złych. W naszych projektach audytowych najczęściej widzimy trzy przyczyny, przez które przeniesienie do chmury kończy się rozczarowaniem, i żadna z nich nie dotyczy dostawcy.

Objaw Przyczyna Co zrobić
Testy przechodzą pojedynczo, padają równolegle Wspólne konto testowe, wspólny koszyk, kolejność testów zaszyta w danych Każdy test tworzy własne dane albo dostaje osobne konto z puli
Losowe przekroczenia limitów czasu Za dużo przeglądarek na słabej maszynie, stałe uśpienia zamiast oczekiwania na warunek Mniej workerów na runner, więcej shardów, oczekiwania warunkowe
Farma nie widzi środowiska testowego Staging dostępny tylko z sieci firmowej Tunel dostawcy (np. BrowserStack Local) albo własny Grid w Waszej sieci
Rachunek rośnie z miesiąca na miesiąc Pełna regresja na każdy commit, wideo i ślady dla każdego testu Zestaw szybki na pull request, pełny w nocy, ślad tylko przy ponownej próbie

Źródło: obserwacje Quality Island z przeglądów frameworków testowych; ustawienie trace on-first-retry według dokumentacji Playwright

Osobna sprawa to dane. Kopiowanie bazy produkcyjnej na środowisko testowe w chmurze to prosta droga do problemu z RODO, o czym szerzej piszemy na Strefie QA w tekście Dane testowe a GDPR: dlaczego kopiowanie produkcji to proszenie się o kłopoty. Dane syntetyczne generowane przez sam test rozwiązują przy okazji problem niezależności testów z pierwszego wiersza tabeli.

Druga uwaga: chmura nie naprawi niestabilnych testów. Jeżeli 3 testy na 100 padają losowo, to przy 10 równoległych przebiegach dziennie zespół codziennie ogląda czerwony pipeline i po tygodniu przestaje mu wierzyć. Zanim zapłacicie za równoległość, warto policzyć, ile testów rzeczywiście daje informację; o tym, kiedy automatyzacja się opłaca, a kiedy przepala budżet, piszemy w artykule zalety i wady automatyzacji testów.

Od czego zacząć przeniesienie testów do chmury?

Zacznijcie od pomiaru, nie od wyboru dostawcy. Ten plan w pięciu krokach sprawdza się u naszych klientów niezależnie od tego, czy kończy się własnym Gridem, czy farmą przeglądarek.

Krok 1

Zmierzcie stan obecny

Liczba testów, średni czas testu, czas całego przebiegu, odsetek testów niestabilnych z ostatnich 30 przebiegów.

Krok 2

Uniezależnijcie testy

Każdy test z własnymi danymi i własną sesją. Uruchomcie zestaw w losowej kolejności, zanim uruchomicie go równolegle.

Krok 3

Zróbcie równoległość lokalnie

Workery w Playwright albo Grid standalone na jednej maszynie. Jeśli tu coś pada, chmura tego nie naprawi.

Krok 4

Policzcie sloty

Wzór: testy razy średni czas podzielone przez budżet czasu. Wynik to liczba slotów, shardów albo sesji w farmie.

Krok 5

Wybierzcie model

Własny Grid przy stałym dużym wolumenie, shardy CI przy Playwright, farma przy Safari i prawdziwych telefonach.

W projekcie dla Argos, sklepu internetowego, uporządkowanie procesów QA i automatyzacja testów skróciły regresję przed wydaniem z 5 dni do 10 godzin, a pełny opis znajdziecie w artykule jak skrócić testy regresyjne z 5 dni do 10 godzin. Według naszych danych zespół Quality Island napisał dotąd ponad 450 000 testów automatycznych i to doświadczenie mówi jedno: o czasie regresji częściej decyduje projekt testów niż moc obliczeniowa. Jeśli chcecie przejść tę drogę z zespołem, prowadzimy szkolenia automatyzacja testów z Playwright i automatyzacja testów Selenium, a infrastrukturę kontenerową omawiamy na szkoleniu CI/CD dla kontenerów.

Co zabrać z tego artykułu

01Automatyzacja testów w chmurze to przede wszystkim równoległość: w naszym pomiarze 8 testów skróciło się z 7,2 do 2,6 sekundy przy 4 workerach, ale 8 workerów dało już tylko 2,3 sekundy.

02Selenium Grid 4 ma 6 komponentów i działa w trybie standalone z jednego pliku jar; w kontenerach docker-selenium węzeł domyślnie przyjmuje 1 sesję, dopóki nie ustawicie SE_NODE_MAX_SESSIONS.

03Playwright nie potrzebuje Grida: workery dzielą testy na jednej maszynie, shardy dzielą je między runnery CI, a reporter blob i merge-reports składają jeden raport.

04Shardy skracają czas oczekiwania, nie ilość pracy; minuty rosną o narzut każdego zadania, a farmy przeglądarek rozlicza się liczbą równoległych sesji.

05Zanim zapłacicie za chmurę, uniezależnijcie testy od siebie i od danych, bo równoległość zwielokrotnia każdą niestabilność.

Źródło: dokumentacja Selenium i Playwright, GitHub Docs, docker-selenium, pomiar Quality Island 10.10.2026

Wasza regresja trwa godzinami, a testy padają przy równoległym uruchomieniu? Przejrzymy framework i pipeline, policzymy sloty i wskażemy, od czego zacząć.

Zobacz automatyzację testów


Powiązane na blogu Quality Island

Pełna lista źródeł

Autor: Tomasz Stelmach, Quality Island.

Co o tym sądzisz?

Dodaj komentarz

Bądź na bieżąco
Strefa QA, portal z eksperckimi artykułami o jakości oprogramowania
Bądź na bieżąco
Szkolenie AI Act w wyrobach medycznych: testy i dokumentacja AI pod MDR
AI Act w wyrobach medycznych
AI Act w wyrobach medycznych: testy i dokumentacja AI pod MDR

1690,00 PLN

30.11.26, 18.01.27, 08.03.27
1 dzień
Szkolenie AI Act w bankowości i ubezpieczeniach: scoring kredytowy, wycena ubezpieczeń i FRIA
AI Act w bankowości i ubezpieczeniach
AI Act w bankowości i ubezpieczeniach: scoring kredytowy, wycena ubezpieczeń i FRIA

1690,00 PLN

27.11.26, 15.01.27, 05.03.27
1 dzień
Szkolenie Testowanie systemów AI wysokiego ryzyka pod AI Act: dokumentacja testowa i QMS dla dostawców
Testowanie systemów AI wysokiego ryzyka pod AI Act
Testowanie systemów AI wysokiego ryzyka pod AI Act: dokumentacja testowa i QMS dla dostawców

2390,00 PLN

26.11.26, 14.01.27, 04.03.27
2 dni
Popularne artykuły
Język Gherkin: co to jest i jak go używać w testowaniu oprogramowania, grafika Quality Island
Język Gherkin: co to jest i jak go używać w testowaniu oprogramowania
Smoke test: co to jest i czym różni się od sanity testu, grafika Quality Island
Smoke test: co to jest, kiedy go uruchamiać i czym różni się od sanity testu
Jak zostać testerem oprogramowania: ścieżka krok po kroku, grafika Quality Island
Jak zostać testerem oprogramowania: ścieżka krok po kroku bez dyplomu informatyka
Najnowsze artykuły
Agentic testing w pracy zespołu QA, co się zmienia w testowaniu z agentami AI
Agentic testing: czy Wasza praca właśnie się zmienia, czy znika
Ile kosztują testy oprogramowania, cennik i czynniki ceny, Quality Island
Ile kosztują testy oprogramowania: cennik i czynniki ceny
Strategia testowania w organizacji, strategia jakości na przykładzie case PKO BP, Quality Island
Strategia testowania w organizacji: czego uczy nas case PKO BP
Popularne kategorie