我目前正致力于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:" + port
和url = InetAddress.getLocalHost().getHostName() + ":" + port
,两者都在本地传递,没有在CI环境中传递。
我做错了什么?
编辑:Alfageme提出了更准确的测试方法。在运行配置项的同一台服务器上,我使用git clone
克隆了我的存储库,然后运行以下命令:
sudo gitlab-runner exec docker maven-test
测试通过没有任何问题。我真的没有想法,有人有吗?
答案 0 :(得分:0)
我不确定原因,但清除CI计算机上的各种runner-XXXXX-project-21-concurrent-0-cache-XXXXXXXXXXXXXXXXXXX
docker容器似乎解决了这个问题。
编辑:这只是暂时修复了这个问题。问题再次发生,这次清除缓存voulmes没有帮助。有人有什么建议吗?