Selenium测试适用于本地但不适用于Gitlab CI

时间:2017-09-26 13:09:31

标签: selenium docker spring-boot gitlab-ci gitlab-ci-runner

我目前正致力于Java Spring Boot项目,该项目涉及经典的后端/前端架构。我正在尝试使用Selenium WebDriver编写一些基本的集成测试。

问题在于我编写的测试在我的本地开发机器上没有任何问题,但在我通过持续集成设置(Gitlab CI)运行时没有通过。

示例测试的代码如下:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles("test")
public class ExampleTest {

    @LocalServerPort 
    private int port;

    WebDriver wd;

    @Test
    public void successfulLogin(){
        String url = "http://localhost:" + port;
        wd = new HtmlUnitDriver();
        wd.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
        wd.get(url);
    }


}

相对gitlab-ci.yml部分是:

stages:
  - test

maven-test:
  image: maven:3.5.0-jdk-8
  stage: test
  script: "mvn test -B -Dmaven.repo.local=/root/.m2/"
  only:
    - master

CI具有并发1的单个运行程序(版本9.5.0)。它使用docker执行程序和docker:stable映像。我不知道是否需要它,但它正在priviledged模式下运行。 在CI环境中运行测试时,它们会失败并显示以下错误:

org.openqa.selenium.TimeoutException: java.net.SocketTimeoutException: Read timed out

我已尝试使用url = "http://localhost:" + porturl = InetAddress.getLocalHost().getHostName() + ":" + port,两者都在本地传递,没有在CI环境中传递。

我做错了什么?

编辑:Alfageme提出了更准确的测试方法。在运行配置项的同一台服务器上,我使用git clone克隆了我的存储库,然后运行以下命令:

sudo gitlab-runner exec docker maven-test

测试通过没有任何问题。我真的没有想法,有人有吗?

1 个答案:

答案 0 :(得分:0)

我不确定原因,但清除CI计算机上的各种runner-XXXXX-project-21-concurrent-0-cache-XXXXXXXXXXXXXXXXXXX docker容器似乎解决了这个问题。

编辑:这只是暂时修复了这个问题。问题再次发生,这次清除缓存voulmes没有帮助。有人有什么建议吗?