скриншоты теста Docker / Селен не пройдены как артефакт на gitlab-ci - PullRequest
0 голосов
/ 27 сентября 2019

У нас есть набор тестов селена, в настоящее время выполняющий gitlab-ci с использованием docker / selenium.

Наш тест настроен на создание снимков экрана в случае сбоя теста.Эта функция работает правильно при запуске на локальном компьютере, но на gitlab-ci я не могу получить файл как артефакт.Я симпатичный производитель, мне не хватает либо правильного пути к каталогу, либо какого-то типа монтирования папок, но я не уверен, где я ошибаюсь.

Вот как у нас все настроено.

Dockerfile

FROM maven:3.5.4-jdk-8-alpine
COPY . /code
WORKDIR /code

Gitlab-ci.yml

seleniumtest:
    image:
      name: tmaier/docker-compose:latest
    services:
      - docker:dind
    stage: test
    before_script:
      - pwd
      - docker version
      - docker-compose version
    script:
      - docker-compose -f ${hub} -f ${testname} build
      - docker-compose -f ${hub} up -d --scale chrome=5
      - docker-compose -f ${hub} -f ${testname} run test
    artifacts:
      name: "${CI_JOB_STAGE}_${CI_COMMIT_REF_NAME}"
      paths:
        - docker/screenshots
      expire_in: 5 days
      when: always
    only:
      - schedules

Seleniumhub.yml

version: "3.7"
services:

  selenium-hub:
    privileged: true
    image: selenium/hub:3.141.59-vanadium
    container_name: selenium-hub
    ports:
      - "4444:4444"
    environment:
      GRID_BROWSER_TIMEOUT: 300
      GRID_TIMEOUT: 300
      GRID_MAX_SESSION: 5

  chrome:
    privileged: true
    image: selenium/node-chrome:3.141.59-vanadium
    volumes:
      - /dev/shm:/dev/shm
      - ./Downloads:/home/seluser/downloads
      - ./screenshots:/home/seluser/Screenshots
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - selenium-hub
    environment:
      NODE_MAX_INSTANCES: 5
      NODE_MAX_SESSION: 5
      SCREEN_WIDTH: 1920
      SCREEN_HEIGHT: 1080
      HUB_PORT_4444_TCP_ADDR: selenium-hub
      HUB_PORT_4444_TCP_PORT: 4444
      START_XVFB: "false"
    ports:
      - "5900"
    links:
      - selenium-hub

Код для получения ScreenShot

private void takeScreenshot(String className, String method, LocalTime timestamp) {
    if (driver instanceof TakesScreenshot) {
        TakesScreenshot screenshotTakingDriver = (TakesScreenshot) this.driver;
        try {
            File localScreenshots = new File(new File("docker"), "screenshots");
            if (!localScreenshots.exists() || !localScreenshots.isDirectory()) {
                localScreenshots.mkdirs();
            }
            String time = timestamp.getHour() + ":" + timestamp.getMinute();
            File screenshot = new File(localScreenshots, className + "_" + method + "_" + time + ".png");
            FileUtils.moveFile(screenshotTakingDriver.getScreenshotAs(OutputType.FILE), screenshot);
            log.info("Screenshot saved in"+ " " +  className+" "+ method +" "+ screenshot.getAbsolutePath());
        } catch (Exception e) {
            log.info("Unable to take screenshot "+ e.getMessage());
        }
    } else {
        log.info("Driver '{}' can't take screenshots so skipping it. " + driver.getClass());
    }
}

В журнале Ci при сбое теста я получаю это сообщение

Sep 26, 2019 8:50:44 PM testbase.TestBase takeScreenshot
INFO: Screenshot saved in Fail signUpAndOnBoardTest /code/docker/screenshots/******_20:50.png

Ожидается получить папку свсе скриншоты неудачных тестов.При первом размещении, возможно, пропустил руководство.Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...