testcontainers / testcontainers/testcontainers-java

Length of the recording is too long

Abierto
#4,380 2 comentarios 2 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Lenguaje dominante
Java
Estrellas
8.7k
Forks
1.9k
Merge medio
2 d 17 h
PR fusionados (30 d)
9

Descripción

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();
        }
    }
}

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza reproduciendo el ejemplo de JUnit 5 proporcionado y siguiendo el cierre de la grabación a través de BrowserWebDriverContainer y VncRecordingContainer. Compara la salida del navegador con la terminación del contenedor; se considera terminado cuando la grabación finaliza al terminar la grabación de la prueba y la sesión del navegador, en lugar de continuar durante el cierre.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
docker, java
Área
testing
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Necesita aclaración
Aptitud para principiantes
30/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.