testcontainers / testcontainers/testcontainers-java

Length of the recording is too long

Ouverte
#4,380 2 commentaires 2 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
Java
Étoiles
8.7k
Forks
1.9k
Merge moyen
2 j 17 h
PR mergées (30 j)
9

Description

We're using testcontainers for a couple month now for our test environment, but since the beginning we have a problem that the recordings take roughly double the time as the actual test. At the first moment I thought my implementation was not correct, and I tried the examples with the exact same result, therefore it seems there's a problem somewhere else.
We're using the BrowserWebDriverContainer and the VncRecordingContainer with chrome, selenium and junit5.
Connecting via a VNC viewer I have noticed that the browser quits correctly, but the container stays alive for a long period. My guess is that the recording container works fine and the browser container has some process which blocks a shutdown
The following example should execute three tests inside the container, each of the test visits google with a specific search request. The actual test footage ends around 1min and 43sec, but the entire recording is 3min and 13sec long.

https://user-images.githubusercontent.com/28145109/129879769-8f76bef7-69b3-4a58-a7ee-7d1618cbdd95.mp4

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testcontainers.containers.BrowserWebDriverContainer;
import org.testcontainers.containers.Network;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;

import java.io.File;


@Testcontainers
public class MainTest {

    private static final int WAIT_TIME = 2000;
    @Container
    private final static BrowserWebDriverContainer<?> chrome = new BrowserWebDriverContainer<>().withCapabilities(new ChromeOptions())
           .withRecordingMode(BrowserWebDriverContainer.VncRecordingMode.RECORD_ALL, new File("./target/"))
           .withNetwork(Network.SHARED).withNetworkAliases("vnchost");
    public static RemoteWebDriver driver;

    @BeforeAll
    static void setup(){
        driver = chrome.getWebDriver();
        driver.manage().window().maximize();
    }

    @AfterAll
    static void tearDown(){
        driver.quit();
    }

    @Test
    @DisplayName("Hunde Test")
    public void run3() throws InterruptedException {
        showLocalHtml("<!DOCTYPE html><html><h1>Hunde Test</h1></html>", 5);
        String[] trees = {"Labrador", "Labrador Retriever", "Golden Retriever", "Yourkshire", "West Highland White Terrier", "Pudel", "Rotweiler", "Dogge", "Windhund", "Husky"};
        for (String tree : trees) {
            driver.get("https://www.google.de/search?q=" + tree);
            Thread.sleep(WAIT_TIME);
         }
    }

    @Test
    @DisplayName("Baum Test")
    public void run2() throws InterruptedException {
        showLocalHtml("<!DOCTYPE html><html><h1>Baum Test</h1></html>", 5);
        String[] trees = {"Eiche", "Ahorn", "Kastanie", "Apfelbaum", "Birke", "Tanne", "Buche", "Fichte", "Erle"};
        for (String tree : trees) {
            driver.get("https://www.google.de/search?q=" + tree);
            Thread.sleep(WAIT_TIME);
        }
    }

    @Test
    @DisplayName("Zahlen Test")
    public void run() throws InterruptedException {
        showLocalHtml("<!DOCTYPE html><html><h1>Zahlen Test</h1></html>", 5);

        for (int i = 0; i < 10; i++) {
            driver.get("https://www.google.de/search?q=" + i);
            Thread.sleep(WAIT_TIME);
        }
    }

    private void showLocalHtml(String html, long seconds){
        try {
            driver.get("data:text/html;charset=utf-8," + html);
            Thread.sleep(seconds * 1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par reproduire l’exemple JUnit 5 fourni et suivre l’arrêt de l’enregistrement à travers BrowserWebDriverContainer et VncRecordingContainer. Comparez la fermeture du navigateur avec l’arrêt du conteneur ; le travail est terminé lorsque l’enregistrement se termine avec la fin de la séquence vidéo du test et de la session du navigateur, au lieu de continuer pendant l’arrêt.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
docker, java
Domaine
testing
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
30/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.