当前位置: 首页 > 面试题库 >

使用Docker和Jenkins运行测试-测试结果

裴永年
2023-03-14
问题内容

我有一个用Rails编写的应用程序。为了对其进行测试,我构建了一个docker映像。一切正常。

但是,当我配置Jenkins运行这些测试时,就会出现问题。在构建步骤中,我要做的是:

docker-compose up rspec

其中rspec是在docker-compose.yml上定义的服务,其中包含以下命令:

command: "rspec spec/"

当rspec返回错误时,构建仍然成功。这里是输出示例:

    ...
21:42:24 [36mrspec_1  |[0m       should save second profile
21:42:24 [36mrspec_1  |[0m 
21:42:24 [36mrspec_1  |[0m Failures:
21:42:24 [36mrspec_1  |[0m 
21:42:24 [36mrspec_1  |[0m   1) New profile Should persist new_profile_pricture
21:42:24 [36mrspec_1  |[0m      Failure/Error: jump_to_four_phase_with(new_profile_picture)
21:42:24 [36mrspec_1  |[0m      RuntimeError:
21:42:24 [36mrspec_1  |[0m        Timeout for '#new_profile' (1) appearance reached!
...
21:42:25 [36mcomposes_rspec_1 exited with code 1
21:42:25 [0m[Profiler] $ /bin/sh -xe /tmp/hudson4606189750126491465.sh
21:42:25 Finished: SUCCESS

36mcomposes_rspec_1 返回1,构建仍然成功。

如果我通过docker通过其ID检查容器,则会ps -a收到“ 2分钟前退出(1)”

你们知道发生了什么吗?

有什么简单的方法可以在容器发生故障时使构建失败?


问题答案:

Jenkins使用流程的退出状态来判断成功或失败。

docker-compose up设计用于协调许多容器。当您处理多个服务/容器时,关于什么构成成功和失败,会有一些灰色区域。docker- compose退出时报告的所有内容是docker-compose命令已成功完成,而不是它运行的所有容器都可以。

docker-compose run <service> <command> 将为服务运行单个命令并返回该命令的退出状态。

如果您依赖多个服务/容器进行测试,则docker-compose up只需调出所需的服务即可。然后再运行docker-compose run rubyservice rspec以进行测试。

撰写分隔

如果要将测试与应用程序容器分开,请创建另一个docker-compose-test.yml文件,其中包含仅用于测试的服务定义。

version: "2.1"
tests:
  build:
    context: .
    dockerfile: Dockerfile.tests
  cmd: rspec

调出主要应用程序容器后,运行

docker-compose -f docker-compose-test.yml run tests


 类似资料:
  • 问题内容: 产生“测试结果趋势”图的数据实际上是从哪里来的?我有一个“仅测试”作业,在target / surefire- reports中生成2个文件。(由maven制作)直接检查文件可表明测试正在执行并通过。 该图显示了沿x轴的成功构建,但没有测试结果。如果单击项目页面上的特定版本,则“测试结果”链接旁边会显示“(无测试)”。 我需要对XML文件进行某种后处理吗?它们是由Maven-soapu

  • 问题内容: 是否可以从Jenkins执行我的QUnit(javascript)单元测试?我的构建脚本是Apache Ant。Jenkins是将其作为单独的构建步骤执行,还是需要在Ant构建脚本的配置中添加一些内容? 问题答案: 因此,我终于设法弄清楚了。 这是我的端到端实施: 安装PhantomJS(http://phantomjs.org/)-我将其安装在build / tools文件夹中 安装

  • 它在Jenkins slave上工作得很好,但我想为SOAPUI测试用例添加另一个Jenkins slave。但是相同的windows批处理命令在新机器上不起作用。 我在机器上的Jenkins控制台输出中得到以下消息: 我需要在那台机器上设置什么才能使它工作吗? 最后一次编辑:在我们公司,我们有有限的用户帐户。所以我不得不把这个任务交给管理员。他在奴隶身上设置了一些东西,现在对两个奴隶都起同样的作

  • 就像 会编译代码并运行生成的二进制文件一样,cargo test 在测试模式下编译代码并运行生成的测试二进制文件。可以指定命令行参数来改变 cargo test 的默认行为。例如,cargo test 生成的二进制文件的默认行为是并行的运行所有测试,并捕获测试运行过程中产生的输出避免他们被显示出来,使得阅读测试结果相关的内容变得更容易。 这些选项的一部分可以传递给 cargo test,而另一些则

  • 正如前面提到的,connectedCheck 需要一个已连接设备。这个过程依赖于 connectedDebugAndroidTest task,因此 connectedDebugAndroidTest task 也会运行。该 task 会执行以下内容: 确认应用和测试应用已被构建(依赖于 assembleDebug 和 assembleDebugAndroidTest) 安装这两个应用 运行测试

  • 5.2 运行测试 正如前面所提到的,引导任务 connectedCheck 需要一个已经连接的设备才能运行。 这会依赖 androidTest ,所以 androidTest 也会被运行。这个任务做了以下事情: 确保应用和测试应用已经被构建(依赖 assembleDebug 和 assembleTest ) 安装这两个应用 运行测试 卸着这两个应用 如果同时有多个连接的设备,那么所有的测试会在所有