Konfiguracja zautomatyzowanego środowiska testowego przy użyciu Selenium i Java w GitLab CI pipeline wraz z raportami Allure

Kamil Sosnowski

Współczesny świat charakteryzuje się dynamicznym rozwojem oprogramowania. Niezbędne elementy dobrego i efektywnego procesu jego tworzenia to ciągła integracja (CI) i zautomatyzowany proces testowania. Praktyki te pomagają utrzymać wysoką jakość kodu, zwiększyć współpracę między członkami zespołu i przyspieszyć wdrażanie zmian. Co więcej, dzięki możliwości wychwycenia błędów na wczesnym etapie cyklu rozwoju, skracają czas i zmniejszają koszty ich napraw.

Czym się zajmiemy?

W tym artykule pokażę Ci, jak skonfigurować automatyczne środowisko testowe przy użyciu Selenium i Java w pipelinie GitLab CI – popularnej platformie CI/CD, która oferuje szeroki zakres funkcjonalności do zarządzania kodem, kompilacjami i wdrożeniami. Przeanalizujemy również generowanie raportów Allure, które zapewniają kompleksowe wizualizacje wyników testów, a także wiele dodatkowych informacji. Dzięki temu umożliwiają zespołom szybką identyfikację obszarów wymagających poprawy.

Jakie zadania wykonamy?

  • Konfiguracja projektu – przygotowanie projektu Java z niezbędnymi zależnościami Selenium i Allure przy użyciu Maven lub Gradle.
  • Konfiguracja GitLab CI – tworzenie pliku .gitlab-ci.yml w celu zdefiniowania zadań, etapów i środowiska dla pipeline’u.
  • Pisanie i uruchamianie testów Selenium – tworzenie przykładowych testów Selenium przy użyciu JUnit 5 i Selenium WebDriver.
  • Przeglądanie i analizowanie raportów Allure – uzyskiwanie dostępu i analizowanie wygenerowanego raportu Allure w celu skutecznej oceny wyników testów.

Po przejściu powyższych kroków będziesz mieć solidną wiedzę na temat wdrażania pipeline’u GitLab CI do automatycznego testowania przy użyciu Selenium i Java oraz wykorzystywania raportów Allure do ulepszenia procesu testowania.

1. Konfiguracja projektu

Maven

Po pierwsze – upewnij się, że Twój projekt Java jest skonfigurowany do pracy z narzędziami takimi jak Maven lub Gradle służącymi do automatycznego budowania. Przykładowy plik pom.xml (Maven) powinien zawierać niezbędne zależności Selenium i Allure:

<dependencies>
    <!-- Selenium WebDriver -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.141.59</version>
    </dependency>
    <!-- Allure integration -->
    <dependency>
        <groupId>io.qameta.allure</groupId>
        <artifactId>allure-junit5</artifactId>
        <version>2.17.2</version>
    </dependency>
</dependencies>

Gradle

Dodaj niezbędne zależności do pliku build.gradle:

plugins {
    id 'java'
    id 'io.qameta.allure' version '2.8.1'
}

repositories {
    mavenCentral()
}

dependencies {
    // Selenium WebDriver
    implementation 'org.seleniumhq.selenium:selenium-java:3.141.59'

    // Allure integration
    testImplementation 'io.qameta.allure:allure-junit5:2.17.2'
}

allure {
    autoconfigure = true
    useJUnit5 {
        version = '2.17.2'
    }
}

2. Konfiguracja GitLab CI

Maven

Dodaj plik .gitlab-ci.yml do katalogu głównego projektu. Zdefiniujesz w nim wszystkie zadania i środowisko, w którym będą one uruchamiane. Przykładowa konfiguracja powinna wygląda tak:

image: maven:3.8.2-openjdk-11

cache:
  paths:
    - .m2/repository

stages:
  - build
  - test
  - report

build:
  stage: build
  script:
    - mvn clean compile

test:
  stage: test
  script:
    - mvn test
  artifacts:
    when: always
    paths:
      - target/allure-results
    expire_in: 1 day

allure-report:
  image: "franela/allure-docker:latest"
  stage: report
  script:
    - allure generate --clean target/allure-results -o target/allure-report
  artifacts:
    when: always
    paths:
      - target/allure-report
    expire_in: 1 day

Gradle

Zmodyfikuj plik .gitlab-ci.yml, aby używać poleceń Gradle zamiast Maven. Jak to zrobić? Spójrz:

image: gradle:7.3.3-jdk11

cache:
  paths:
    - .gradle/caches

stages:
  - build
  - test
  - report

build:
  stage: build
  script:
    - gradle clean compileJava

test:
  stage: test
  script:
    - gradle test
  artifacts:
    when: always
    paths:
      - build/allure-results
    expire_in: 1 day

allure-report:
  image: "franela/allure-docker:latest"
  stage: report
  script:
    - allure generate --clean build/allure-results -o build/allure-report
  artifacts:
    when: always
    paths:
      - build/allure-report
    expire_in: 1 day

3. Objaśnienie konfiguracji

Maven

W powyższym przykładzie pliku .gitlab-ci.yml używasz obrazu Docker maven:3.8.2-openjdk-11, który zawiera Mavena i JDK 11. Definiujesz trzy etapy: kompilację, testowanie i raportowanie.

Najpierw kompilujesz swój kod za pomocą polecenia mvn clean compile. Podczas testowania uruchamiasz testy Selenium poleceniem mvn test. Ich wyniki są przechowywane w katalogu target/allure-results. Do przechowywania wyników testów używasz sekcji artefaktów, którą wykorzystasz później.

Na etapie raportu generujesz raport Allure. Używasz obrazu Docker franela/allure-docker:latest, który zawiera narzędzie Allure. Skrypt uruchamia „allure generate”, który konwertuje wyniki testów z katalogu target/allure-results na raport Allure przechowywany w katalogu target/allure-report. Używasz również sekcji artefaktów do przechowywania wygenerowanego raportu Allure, który może być następnie dostępny i analizowany przez zespół.

Gradle

W tym przykładzie zaktualizowaliśmy plik build.gradle o wymagane zależności Selenium i Allure. Skonfigurowaliśmy również wtyczkę Allure dla Gradle, która umożliwia raportowanie Allure podczas wykonywania testów.

Dodatkowo zmodyfikowaliśmy plik .gitlab-ci.yml, aby używać poleceń Gradle do budowania i testowania projektu. Pole obrazu używa teraz gradle:7.3.3-jdk11, które zawiera Gradle i JDK 11. Reszta pipeline’u pozostaje taka sama, z etapami kompilacji, testowania i raportowania wykonującymi odpowiednie zadania przy użyciu poleceń Gradle.

4. Pisanie i uruchamianie testów Selenium

Teraz, gdy pipeline CI jest już skonfigurowany, stwórz kilka przykładowych testów Selenium. Użyj frameworka testowego JUnit 5 w połączeniu z Selenium WebDriver. Oto prosty przykład klasy testowej:

import org.junit.jupiter.api.*;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class SampleSeleniumTest {
    private WebDriver driver;

    @BeforeEach
    public void setUp() {
        System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
        driver = new ChromeDriver();
    }

    @Test
    public void pageTitleTest() {
        driver.get("https://www.example.com");
        String title = driver.getTitle();
        assertEquals("Example Domain", title);
    }

    @AfterEach
    public void tearDown() {
        if (driver != null) {
            driver.quit();
        }
    }
}

Sprawdzamy w nim tytuł strony „https://www.example.com”. Dodatkowo w metodzie setUp() inicjalizujemy Chrome WebDriver, a w metodzie tearDown() zamykamy WebDriver.

5. Wyświetlanie i analizowanie raportów Allure

Po pomyślnym wykonaniu zadania przez pipeline GitLab CI możesz uzyskać dostęp do wygenerowanego raportu Allure w sekcji artefaktów pipeline`u. Aby wyświetlić wyniki, pobierz raport Allure i otwórz plik index.html w przeglądarce internetowej.

Raport Allure zapewnia kompleksowy przegląd wyników testów, w tym status zaliczenia/niezaliczenia, czas wykonania i inne istotne informacje. Oferuje również różne wizualizacje, a także opcje filtrowania, aby pomóc w bardziej efektywnej analizie wyników testów.

Podsumowanie

W tym artykule zademonstrowałem, jak skonfigurować pipeline GitLab CI do uruchamiania automatycznych testów z Selenium i Java oraz generowania raportów Allure po zakończeniu testów. Taka konfiguracja umożliwia zespołom utrzymanie wysokiej jakości kodu, usprawnienie procesu rozwoju i szybką identyfikację wszelkich problemów pojawiających się na etapie testowania. Włączając zautomatyzowane testowanie i praktyki ciągłej integracji, można znacznie usprawnić organizację pracy związanej z tworzeniem oprogramowania.

Poznaj mageek of j‑labs i daj się zadziwić, jak może wyglądać praca z j‑People!

Skontaktuj się z nami