当 testcontainer 无法启动时,集成测试管道不会失败

问题描述

我正在尝试使用 Testcontainers Java 库和 JUnit 5 设置一些集成测试。我想使用 Maven 在 gitlab 管道中执行这些测试。发生的情况是,如果由于某种原因我正在测试的容器无法启动,则不会执行测试并且管道仍然成功。在这种情况下,我希望管道失败。

版本:

  • Gitlab:13.9
  • Maven:3.8.1
  • Maven 故障安全插件:3.0.0-M4
  • JUnit 木星:5.7.0
  • 测试容器:1.15.0

在我的 .gitlab-ci.yml 中是这样的:

integrationtests:
  stage: test
  retry: 2
  script:
    - mvn test failsafe:integration-test failsafe:verify -DskipTests=false -Dskip.unit.tests=true -DskipITs=false
  tags:
    - run_one_at_a_time

在测试类中我有这个:

    static {
        containerForTestdata =
            new FixedHostPortGenericContainer(CONTAINER_NAME)
            .withFixedExposedPort(PORT,PORT)
                        .waitingFor(Wait.forHttp("/api/v4/projects"))
                        .withStartupTimeout(Duration.ofMinutes(7))
                        .withImagePullPolicy(PullPolicy.alwaysPull());
                containerForTestdata.start();
    }
    
    static {
        Runtime.getRuntime().addShutdownHook(new Thread(() -> containerForTestdata.stop()));
    }

    @BeforeAll
    protected static void retrievetoken() throws InterruptedException,IOException {
        org.testcontainers.containers.Container.ExecResult tokenValue = preconfiguredGitlab.execInContainer("tail","-1","/var/opt/gitlab/.token");
        String testUrl = "http://localhost:" + PORT;
        token = tokenValue.getStdout().trim();
        connector = new Connector(testUrl,"testuser",token);
    }

    @Test
    void testGetExistingProject() throws GitLabApiException {
        Project foo = connector.getProject("foo");

        assertEquals("foo",foo.getPathWithNamespace());
    }


(我知道固定主机端口已被弃用并且违反了测试容器作者的理念,但我还没有找到解决方案。我想摆脱它,但会将这个问题留给另一个问题。)

如果容器启动,测试将按预期运行。但如果不是,则运行 0 个测试并且管道成功。我可以在本地运行测试,如果容器正常启动,则执行测试,如果容器启动失败,它还会列出 0 个测试运行和“构建成功”。我如何让它失败,以便我们注意到我们的设置存在问题?我什至不确定我应该在哪个活动部件中解决这个问题。

我认为这是输出的相关部分。

[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running <my class IT>
[2021-04-06 13:22:20] INFO  - Image name substitution will be performed by: DefaultimageNameSubstitutor (ConfigurationFileImageNameSubstitutor)
[2021-04-06 13:22:20] INFO  - Pulling docker image: our-own-registry/testimage:latest. Please be patient; this may take some time but only needs to be done once.
[2021-04-06 13:22:20] INFO  - Loaded org.testcontainers.dockerclient.UnixSocketClientProviderStrategy from ~/.testcontainers.properties,will try it first
[2021-04-06 13:22:21] INFO  - Found Docker environment with local Unix socket (unix:///var/run/docker.sock)
[2021-04-06 13:22:21] INFO  - Docker host IP address is localhost
[2021-04-06 13:22:21] INFO  - Connected to docker: 
  Server Version: 20.10.5
  API Version: 1.41
  Operating System: Docker Desktop
  Total Memory: 7964 MB
[2021-04-06 13:22:21] INFO  - Credential helper/store (docker-credential-desktop) does not have credentials for index.docker.io
[2021-04-06 13:22:22] INFO  - Ryuk started - will monitor and terminate Testcontainers containers on JVM exit
[2021-04-06 13:22:22] INFO  - Checking the system...
[2021-04-06 13:22:22] INFO  - ✔︎ Docker server version should be at least 1.6.0
[2021-04-06 13:22:22] INFO  - ✔︎ Docker environment should have more than 2GB free disk space
[2021-04-06 13:22:24] INFO  - Starting to pull image
[2021-04-06 13:22:24] INFO  - Pulling image layers:  0 pending,0 downloaded,0 extracted,(0 bytes/0 bytes)
[2021-04-06 13:22:24] INFO  - Pulling image layers:  3 pending,1 downloaded,(16 KB/? MB)
[2021-04-06 13:22:24] INFO  - Pulling image layers:  2 pending,2 downloaded,(103 KB/? MB)
[2021-04-06 13:22:43] INFO  - Pulling image layers:  1 pending,3 downloaded,(54 MB/? MB)
[2021-04-06 13:28:24] INFO  - Pulling image layers:  0 pending,4 downloaded,(946 MB/946 MB)
[2021-04-06 13:29:10] INFO  - Pulling image layers:  0 pending,1 extracted,2 extracted,3 extracted,(946 MB/946 MB)
[2021-04-06 13:29:12] INFO  - Pulling image layers:  0 pending,4 extracted,(946 MB/946 MB)
[2021-04-06 13:29:12] INFO  - Pull complete. 4 layers,pulled in 408s (downloaded 946 MB at 2 MB/s)
[2021-04-06 13:29:12] INFO  - Creating container for image:our-own-registry/testimage:latest
[2021-04-06 13:29:14] INFO  - Starting container with ID: e3af36da30714eb78811220592299472d690ff36ad9b527c457a8f4d7aeec45b
[2021-04-06 13:29:14] INFO  - Container our-own-registry/testimage:latest is starting: e3af36da30714eb78811220592299472d690ff36ad9b527c457a8f4d7aeec45b
[2021-04-06 13:29:14] INFO  - /priceless_varahamihira: Waiting for 420 seconds for URL: http://localhost:3000/api/v4/projects
[2021-04-06 13:36:14] ERROR - Could not start container
<logging of a very good reason to not start the container>
[INFO] Tests run: 0,Failures: 0,Errors: 0,Skipped: 0,Time elapsed: 835.217 s - in nl.sig.uploadunpacker.GitConnectorIT
[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 0,Skipped: 0
[INFO] 
[INFO] 
[INFO] --- maven-failsafe-plugin:3.0.0-M4:verify (default-cli) @ UploadUnpacker ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  13:58 min
[INFO] Finished at: 2021-04-06T13:36:15+02:00
[INFO] ------------------------------------------------------------------------

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)