Playwright uruchamianie testów na Gitlabie

Playwright

 744 

Playwright uruchamianie testów na Gitlabie – to wpis pokazujący w jaki sposób w kilku krótkich krokach dokonać integracji i uruchamiać testy Playwrighta na Gitlabie. Jeżeli jesteś zainteresowany innymi wpisami dotyczącymi Playwrighta , zapraszamy do odpowiedniego działu.

Wprowadzenie

Tworząc testy automatyczne z wykorzystaniem Playwrighta , bardzo ważnym aspektem jest aby wykorzystywać nasze testy w codziennej pracy. Jaki sens jest jednak tworzyć testy automatyczne a później uruchamiać je tylko w środowisku lokalnym? Oczywiście stworzone testy pomogą szybciej sprawdzić czy nie mamy do czynienia z regresją, natomiast winniśmy zmierzać w kierunku tworzenia testów i uruchamiania ich w naszym środowisku w sposób automatyczny. 

Tworzenie gitlab-ci.yml

Chcąc uruchamiać testy z poziomu gitlaba nasze testy będą opierać się o stworzenie pliku gitlab-ci.yml, który będzie naszym centrum dowodzenia i zarządzania. Do uruchomienia naszych testów konieczne będzie:

  • runner na gitlabie, na podstawie którego testy będą uruchamiane (pytaj Devopsów o tag)
  • obraz dockerowy Playwrighta – dostępne na DockerHub
I. Najprostsza wersja

W naszym projekcie testowym tworzymy plik gitlab-ci.yml a następnie uzupełniamy go w najprostszy sposób:

image: mcr.microsoft.com/playwright:v1.25.0-focal

test_name:
tags:
  - runner-name
before_script:
  - npm ci
script:
  - npm run test:spec --headed
 
  1. Pierwszy element to obraz dockerowy który pobieramy do naszego projektu. 
  2. test_name – ten element będzie wyświetlany na gitlabie – gdzie będzie wykonywana seria testów (np. z danej klasy testowej):

Cypress uruchamianie testów na Gitlabie - some tests

     3. tags: runner-name – to miejsce gdzie wskazujemy runnera na którym będą uruchomione testy
     4. Script – instalacja Playwrighta i egzekucja testów

 

II. Tworzenie stage

W ramach naszych testów może zachodzić konieczność tworzenia faz egzekucji testów. 

stages:
- test
- after

Następnie w ramach testów musimy dodawać określenie w ramach którego stage uruchamiamy daną grupę testów:

test_name:
tags:
- runner-name
stage: test
before_script:
  - npm ci
script:
- npm run test:spec --headed (określamy ścieżkę)
test_name:
tags:
- runner-name
stage: after
before_script:
  - npm ci
script:
- npm run test:spec --headed (określamy ścieżkę)

Efektem tej pracy będzie uruchomienie testów w takiej postaci:

Cypress uruchamianie testów na Gitlabie - stages

 

III. Raporty i artefakty

Jeżeli potrzebujecie zapisywać raporty i pobierać je z Gitlaba – wystarczy w ramach pliku gitlab-ci.yml dodać:

artifacts:
when: always
paths:
- ./playwright-report/**
expire_in: 10 days
IV. Powtarzanie testu (retry)

Zdarzyć się może że przydatne dla Was może myć ponowne uruchomienie testów. Możemy ponownie uruchamiać testy gdy będzie fail. Poniżej ponowne uruchomienie klasy testowej będzie zawsze:

  retry:
  max: 2
  when:
      - always

Możliwe jest też wdrożenie szczególnych przypadków dla ponownego uruchomienia testów:

  • always: Retry on any failure (default).

  • unknown_failure: Retry when the failure reason is unknown.

  • script_failure: Retry when the script failed.

  • api_failure: Retry on API failure.

  • stuck_or_timeout_failure: Retry when the job got stuck or timed out.

  • runner_system_failure: Retry if there is a runner system failure (for example, job setup failed).

  • runner_unsupported: Retry if the runner is unsupported.

  • stale_schedule: Retry if a delayed job could not be executed.

  • job_execution_timeout: Retry if the script exceeded the maximum execution time set for the job.

  • archived_failure: Retry if the job is archived and can’t be run.

  • unmet_prerequisites: Retry if the job failed to complete prerequisite tasks.

  • scheduler_failure: Retry if the scheduler failed to assign the job to a runner.

  • data_integrity_failure: Retry if there is a structural integrity problem detected.

V. Refactoryzacja

Przy rozbudowanych plikach gitlab-ci.yml może zachodzić konieczność tworzenie dużych i skomplikowanych poleceń. Warto wówczas uwspólnianie rzeczy przesuwać by były re-używalne.

.job_template: &job_configuration  
image: mcr.microsoft.com/playwright:v1.25.0-focal

tags:
- nazwa-runnera
artifacts:
when: always
paths:
- ./playwright-report/**
expire_in: 10 days
retry:
max: 2
when:
- always
.some-script: &some-script
  - npm ci

stages:
- test

e2e:
<<: *job_configuration  
stage: test
before_script:
  - *some-script
script:
    - npm run test:spec --headed
 
VI. Opóźnienie w uruchomieniu

Możemy mieć czasami potrzebę by jakaś klasa testowa czy grupa uruchamiała się z opóźnieniem. Z tym przychodzi nam rozwiązanie w postaci:

  when: delayed
  start_in: 4 minutes
 

Schedules

Jeżeli chcemy tak przygotowane testy w ramach naszego repozytorium, możemy uruchamiać cyklicznie. Z pomocą przychodzi nam Gitlab i zakładka CI/CD – Schedules:

Cypress uruchamianie testów na Gitlabie - schedules

 

Tutaj pełna dowolność, ważne jest abyście uruchamiali testy wtedy – kiedy jest wam potrzebne. 

 

Podsumowanie

Playwright uruchamianie testów na Gitlabie – to kolejny wpis mający zachęcić Was do instalacji i sprawdzenia narzędzia. Z racji popularyzacji narzędzia i dużego wsparcia które otrzymał Playwright na rozwój, będziemy poszerzać wpisy na ten temat. Wszelkie artykuły związane z Playwrightem znajdziecie w dedykowanym dziale.