Как запустить приложение до запуска тестов (gradle / kotlin / springboot) - PullRequest
0 голосов
/ 08 ноября 2018

В настоящее время я пытаюсь подготовить приложение для cloudfoundery. Этот конкретный экземпляр CF поддерживает только CircleCI. В моем приложении есть несколько юнит-тестов и несколько тестов на огурец. Я пытаюсь заставить их пройти перед использованием CircleCI для cf push.

При каждом запуске CircleCI происходит сбой по команде «gradle test». Глядя на журнал, юнит-тесты проходят, а тесты на огурцы не проходят Полагаю, это связано с тем, что тесты на огурец требуют запуска приложения.

Вот пример трассировки стека теста на огурец:

java.net.ConnectException: Connection refused: connect

    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
    at sun.net.www.http.HttpClient.New(HttpClient.java:339)
    at sun.net.www.http.HttpClient.New(HttpClient.java:357)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1220)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1156)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1050)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:984)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:730)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:706)
    at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:299)
    at org.jsoup.helper.HttpConnection.get(HttpConnection.java:288)
    at cucumber.runtime.kotlin.test.StepDefinitions.getPage(StepDefinitions.kt:29)
    at ✽.I am on the main page(features/SearchWithFilters.feature:8)

Вот мой текущий config.yml:

version: 2
jobs:
  build:
    docker:
      # specify the version you desire here
      - image: circleci/openjdk:8-jdk

    working_directory: ~/repo

    environment:
      # Customize the JVM maximum heap limit
      JVM_OPTS: -Xmx3200m
      TERM: dumb

    steps:
      - checkout

      # Download and cache dependencies
      - restore_cache:
          keys:
          - v1-dependencies-{{ checksum "build.gradle" }}
          # fallback to using the latest cache if no exact match is found
          - v1-dependencies-

      - run: gradle dependencies

      - save_cache:
          paths:
            - ~/.gradle
          key: v1-dependencies-{{ checksum "build.gradle" }}

      - run: gradle clean assemble jar
      - run: java -jar build/libs/definitions-catalogue-1.0.jar &

      # run tests
      - run: gradle test

1 Ответ

0 голосов
/ 27 декабря 2018

Я использовал dockerize, чтобы обойти эту проблему.

Есть 3 шага.

  1. Запустите приложение в фоновом режиме
  2. Используйте dockerize, чтобы дождатьсяпорт, который нужно открыть (это работает, когда приложение слушает порт кретина.
  3. Запуск тестов.

Код для этого выглядит следующим образом:

      - run: java -jar definitions-catalogue-1.0.jar &

      - run:
          name: install dockerize
          command: wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && sudo tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz
          environment:
            DOCKERIZE_VERSION: v0.3.0
      - run:
          name: Run the application
          background: true
          command: gradle run
      - run:
          name: Wait for web service
          command: dockerize -wait http://localhost:5002/definitions -timeout 1m

      # run tests!
      - run: gradle featureTest
...