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

如何解决当 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 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-