Как заставить веб-приложение работать на Travis CI? - PullRequest
0 голосов
/ 12 ноября 2018

Что ж, у меня есть веб-приложение на основе Tomcat, написанное на Java и Spring-MVC Framework (и Maven), где я использую Selenium для тестирования некоторых страниц.

Перед тестами у меня есть следующие настройки:

@BeforeClass
public static void init() {
    System.setProperty("webdriver.chrome.driver", "/usr/local/bin/chromedriver");
    webDriver = new ChromeDriver();

    webDriver.get("localhost:8080/app/login");
    webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}

Если я запускаю приложение на своем локальном компьютере, а затем запускаю тесты, все работает отлично.

Проблема в том, что если я хочу, чтобы приложение тестировалось с Selenium, оно должно быть запущено (в противном случае, как мне подключиться к localhost?). Но как запустить веб-приложение на Travis CI до того, как приложение начнет проверять тесты?

Может быть, я должен использовать сторонние ресурсы? Или это можно сделать только с помощью Travis CI?

Я знаю, что в Heroku есть веб-приложение для запуска вашего веб-приложения, но есть ли инструмент для Трэвиса?

Обновлены.

Пока единственная идея, которая у меня есть, - это развернуть и запустить приложение на Heroku, а затем использовать это уже работающее приложение в тестах Selenium. Так будет в тестах: 1018 *

webDriver.get("someHerokuUrl");

И каждый толчок к Github будет таким: приложение автоматически развертывается на Heroku, а затем приложение тестируется на Travis CI.

Но я чувствую, что это неправильный путь.

Моя конфигурация .travis.yml:

language: java
jdk:
  - openjdk8
sudo: required
dist: trusty
addons: # get google-chrome-stable
  apt:
    packages:
      - google-chrome-stable
before_script:
  - "export DISPLAY=:99.0"
  - "sh -e /etc/init.d/xvfb start"
  - sleep 3 
install: 
  - wget -N https://chromedriver.storage.googleapis.com/2.43/chromedriver_linux64.zip -P ~/
  - unzip ~/chromedriver_linux64.zip -d ~/
  - rm ~/chromedriver_linux64.zip
  - sudo mv -f ~/chromedriver /usr/local/bin/
  - sudo chmod +x /usr/local/bin/chromedriver

1 Ответ

0 голосов
/ 13 ноября 2018

on .travis.yml

addons:
  chrome: stable

после того, как вам нужно использовать режим chrome без головы или добавить плагин XVFB.Официальный документ здесь .

Вы можете найти полный образец здесь

JUnit test OK

package com.mycompany.app;

import static org.assertj.core.api.Assertions.assertThat;

import java.io.File;
import java.util.concurrent.TimeUnit;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.web.server.LocalServerPort;
import org.springframework.test.context.junit4.SpringRunner;

import com.github.noraui.utils.Utilities.OperatingSystem;
import com.github.noraui.utils.Utilities.SystemArchitecture;

/**
 * Unit test for
 * /10754577/kak-zastavit-veb-prilozhenie-rabotat-na-travis-ci.
 */
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class AppTest {

    /**
     * Specific logger
     */
    private static final Logger logger = LoggerFactory.getLogger(AppTest.class);

    @LocalServerPort
    private int port;

    private WebDriver webDriver;

    @Before
    public void init() {
        final OperatingSystem currentOperatingSystem = OperatingSystem.getCurrentOperatingSystem();
        String pathWebdriver = String.format("src/test/resources/drivers/%s/googlechrome/%s/chromedriver%s",
                currentOperatingSystem.getOperatingSystemDir(),
                SystemArchitecture.getCurrentSystemArchitecture().getSystemArchitectureName(),
                currentOperatingSystem.getSuffixBinary());
        if (!new File(pathWebdriver).setExecutable(true)) {
            logger.error("ERROR when change setExecutable on " + pathWebdriver);
        }
        System.setProperty("webdriver.chrome.driver", pathWebdriver);
    }

    @After
    public void quit() {
        this.webDriver.quit();
    }

    @Test
    public void read() {
        this.webDriver = new ChromeDriver();
        webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        webDriver.get("http://localhost:" + port + "/app/login");
        logger.info(webDriver.getPageSource());
        assertThat(webDriver.getPageSource()).isEqualTo("<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>Hello stackoverflow.com questions 53268198</body></html>");
    }
}

Трассировка на Travis-ci:

enter image description here

Вы можете найти весь этот код на github здесь

...