Безголовое исключение при тестировании графического интерфейса (java Swing) с помощью gitlab-ci

У меня есть виртуальный сервер, на котором запущен gitlab runner. Теперь я добавил несколько модульных тестов с графическим интерфейсом, которые хорошо работают на моем компьютере, но не на виртуальном сервере.

Он всегда выходит с:

java.awt.HeadlessException: 
No X11 DISPLAY variable was set, but this program performed an operation which requires it.

Есть идеи, как заставить это работать с gitlab-ci?

Редактировать:

Мой виртуальный сервер работает под управлением CentOS 7.

Это мой текущий .gitlab-ci.yml

image: kaiwinter/docker-java8-maven
#maven:3-jdk-7

before_script:
  - "Xvfb :99 &"
  - "export DISPLAY=:99"

maven_build:
  stage: build
  script:
  - "mvn clean package"
  - "cat target/site/jacoco/index.html"

Теперь исключение без головы исчезло, но в основном все модульные тесты терпят неудачу из-за исключений awt, таких как: Не удалось инициализировать класс java.awt.image.IndexColorModel

Edit2: я добавил вариант без головы, как было предложено:

image: kaiwinter/docker-java8-maven
#maven:3-jdk-7

before_script:
  - "Xvfb :99 &"
  - "export DISPLAY=:99"

maven_build:
  stage: build
  script:
  - "mvn clean package -Djava.awt.headless=true"
  - "cat target/site/jacoco/index.html"

Теперь я снова получаю безголовые исключения...


person Thorsten Wagner    schedule 30.11.2017    source источник
comment
Возможный дубликат: stackoverflow.com/questions/21343529/   -  person Rafael Guillen    schedule 30.11.2017


Ответы (3)


Вы пытаетесь использовать программу xvfb, как в этом сообщении http://elementalselenium.com/tips/38-headless.

Я использовал xvfb для запуска браузера с текстового терминала. Ваш случай в принципе такой же.

Проблема в том, что ваша программа ожидает запуска в оконной среде, но вы запускаете ее из текстового терминала.

person vbuhlev    schedule 30.11.2017
comment
Похоже на решение. Однако я не могу найти правильную конфигурацию для моего gitlab-ci.yml. - person Thorsten Wagner; 30.11.2017
comment
Вы можете создать буфер xvfb вне travis и установить переменную ENV в travis. - person vbuhlev; 30.11.2017

Наконец-то я нашел решение!

Я создал образ DOCKER, подготовленный для тестирования графического интерфейса (используя xvfb, спасибо vbuhlev): https://github.com/thorstenwagner/docker-java8-maven

В .gitlab-ci.yml я добавил следующие строки:

before_script:
  - "Xvfb :99 &"
  - "export DISPLAY=:99"
person Thorsten Wagner    schedule 01.12.2017
comment
Я получаю java.awt.HeadlessException с этим. Любая помощь? - person Dmitry Sokolov; 25.05.2019

Вам нужно включить Безголовый режим:

  maven_build:
  stage: build
  script:
  - "mvn clean package -Djava.awt.headless=true"
person Rafael Guillen    schedule 30.11.2017
comment
См. Редактировать2. Не помогло :-( - person Thorsten Wagner; 30.11.2017
comment
Прочтите ограничения режима безголового просмотра JavaSE здесь: oracle.com/technetwork/articles/ javase/headless-136834.html - person Rafael Guillen; 30.11.2017