Мой проект использует TestFX для использования своего пользовательского интерфейса JavaFX (TornadoFX) для автоматизированных тестов.Он имеет множество модульных тестов, взаимодействующих с отдельными представлениями, которые надежно работают в рамках Maven Surefire как локально, так и на Travis.
Недавно я добавил интеграционный тест, который запускается в рамках Maven Failsafe, который запускает все мое приложение, нажимает кнопку JavaFX, а затем ожидает изменения какого-либо состояния (довольно длительный процесс), прежде чем делать утверждения.Этот тест работает и надежно проходит на моем локальном ПК, но никогда не проходит на Travis CI.На Трэвисе, в конце концов, он будет ожидать ожидания изменения состояния, вызванного процессом, запущенным нажатием кнопки.
Я попытался определить причину сбоя, выполнив следующие действия.
- В проверку работоспособности добавлено утверждение TestFX о том, что кнопка видна.Это утверждение проходит, что, кажется, подтверждает, что мой запрос узла верен и ожидаемая кнопка находится по крайней мере на экране.
- Добавлена регистрация на всех этапах тестирования и обработчик действий TornadoFX.Регистрация показывает, что обработчик действия для кнопки никогда не вызывается в Travis, а вызывается на моем локальном ПК.Здесь я думаю, что это сходит с рельсов.
- Переместите интеграционный тест в набор источников модульных тестов и переименуйте его так, чтобы Surefire запустил его (
*IT
- *Test
).Это приводит к тому, что тест работает и надежно проходит в Трэвисе.Я не считаю это решением, потому что это было бы плохой практикой.Однако, это может указывать на некоторое различие в окружающей среде между моими конфигами плагинов Surefire и Failsafe. - Пробовал бегать без головы и направиться в Трэвис.В обоих случаях произошел один и тот же сбой.
Я не вносил никаких изменений в конфигурацию Surefire.
Фрагмент отказоустойчивого POM:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.22.0</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
<configuration>
<testSourceDirectory>${project.basedir}/src/integrationTest/kotlin</testSourceDirectory>
<systemPropertyVariables>
<coner-core.version>${coner-core.version}</coner-core.version>
</systemPropertyVariables>
</configuration>
</execution>
</executions>
</plugin>
.travis.yml:
language: java
sudo: false # Linux OS: run in container
matrix:
include:
- os: linux
dist: trusty
jdk: oraclejdk8
addons:
apt:
packages:
- oracle-java8-installer
before_script:
# Linux OS: Use framebuffer for UI
# See https://docs.travis-ci.com/user/gui-and-headless-browsers/#Using-xvfb-to-Run-Tests-That-Require-a-GUI
# Note: exporting DISPLAY in a separate shell file will not grant the script shell file access to it.
# To insure it has access, just use the following line.
- if [[ "${TRAVIS_OS_NAME}" == linux ]]; then export DISPLAY=:99.0; sh -e /etc/init.d/xvfb start; fi
script:
- ./mvnw verify -Dci=true
after_success:
- bash <(curl -s https://codecov.io/bash)
cache:
directories:
- $HOME/.m2
Кто-нибудь сталкивался с подобными трудностями при получении интеграционных тестов с использованием TestFX для правильного выполнения на Travis?Я подозреваю, что где-то отсутствует необходимая конфигурация, но не знаю, что именно.