仅在集成测试中,TestFX机械手无法在Travis CI上单击按钮

时间:2018-09-15 20:06:17

标签: javafx travis-ci tornadofx testfx

我的项目使用TestFX对其JavaFX(TornadoFX)UI进行自动化测试。它具有大量的单元测试,可以独立地与视图交互,可以在本地和Travis上的Maven Surefire范围内可靠地工作。

我最近添加了一个集成测试,该测试在Maven Failsafe范围内运行,该测试将启动我的整个应用程序,单击JavaFX按钮,然后在声明前等待某些状态更改(较长的过程)。该测试可以在我的本地PC上运行并可靠地通过,但从不通过Travis CI。在Travis上,最终它将超时,等待通过单击按钮启动的过程触发的状态更改。

我已尝试通过执行以下步骤来找出故障的根源。

  • 向完整性检查添加了TestFX断言,以确保按钮可见。这个断言通过了,这似乎支持我的节点查询正确并且预期的按钮至少在屏幕上。
  • 在整个测试步骤和TornadoFX操作处理程序中添加了日志记录。该日志记录表明,从未在Travis上调用该按钮的动作处理程序,而是在我的本地PC上调用了该动作处理程序。我认为这是不合时宜的地方。
  • 将集成测试移至单元测试源集,并将其重命名,以使Surefire将其运行(*IT*Test)。这样可以使测试在Travis可靠地运行并通过。我不认为这是一个解决方案,因为这将是一种不良做法。但是,这可能表明我的Surefire和Failsafe插件配置之间存在环境差异。
  • 试着无头奔向Travis。两者都遇到相同的失败。

我尚未对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上正确执行时遇到过类似的困难吗?我怀疑我在某处缺少一些所需的配置,但不确定是什么。

0 个答案:

没有答案