返回顶部
首页 > 资讯 > 精选 >如何进行Docker容器测试分析
  • 848
分享到

如何进行Docker容器测试分析

2023-06-28 15:06:17 848人浏览 独家记忆
摘要

这篇文章主要为大家分析了如何进行Docker容器测试分析的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“如何进行Docker容器测试分析”的知识吧。为了解决上

这篇文章主要为大家分析了如何进行Docker容器测试分析的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“如何进行Docker容器测试分析”的知识吧。

如何进行Docker容器测试分析
为了解决上述难题,我们需要考虑以下方案。

应用&测试容器方案

现在我们尝试创建单一捆绑包,其中应用程序“二进制代码”中包含全部必需的软件包、测试工具(包括对应版本)、测试工具插件、测试脚本以及其它各类测试环境元素。但这种方式也存在着显著弊端:
镜像体积直线增长——这是因为其中包含有测试工具、必要软件包、测试脚本甚至是测试数据。
特定测试配置可能对镜像运行时环境造成污染,甚至引入不必要的依赖性(集成测试中需要用到)。
我们还需要考虑如何处理测试结果与记录日志

如何将其导出以及向哪里导出,通过以下经过简化的 Dockerfile,我们可以了解上述方案的整个流程。

FROM "":""WORKDIR ""# install packages required to run app and testsRUN apt-get update && apt-get install -y /" and " / # add app runtime and required packages" and " / # add testing tools and required packages&& rm -rf /var/lib/apt/lists/*# copy app filesCOPY app appCOPY run.sh run.sh# copy test scriptsCOPY tests tests# copy "main" test commandCOPY test.sh test.sh# ... EXPOSE, RUN, ADD ... for app and test environment# main app commandCMD [run.sh, ""]# it's not possible to have multiple CMD commands, but this is the "main" test command# CMD [/test.sh, ""]

如何进行Docker容器测试分析
毫无疑问,应该有更好的容器内测试方案可供选择。

测试感知型容器方案

目前,Docker承诺以“Build -> Ship -> Run”这一简单操作完成镜像构建、发布至注册表并在其它位置运行等任务。Test这一重要环节,正确且完整的流程应该是Build -> Test -> Ship -> Run。 下面让我们看看能够为Docker命令提供“测试友好”型语法与扩展的Dockerfile是如何建立而成的。“理想”版本,大家应该能够看出其中可用于实践的指导思路。

ONTEST [INSTRUCTioN]

首先定义一条特殊的ONTEST指令,其与现有ONBUILD指令非常相似。ONTEST指令会向镜像添加一条触发指令,其在随后镜像接受测试时自动执行。任意build指令都可被注册为触发条件。

ONTEST指令可由一条新的docker test命令进行识别。

docker test [OPTIONS] IMAGE [COMMAND] [ARG...]

事实上,docker test命令的语法与docker run命令非常相似,docker test会自动生成一套新的“可测试”镜像,执行全部build操作,于ONTEST命令后进行定义并执行ONTEST CMD(或者ONTEST ENTRYPOINT)。其中若测试发生错误,docker test命令应当返回一段非零代码。此测试结果应当被写入至自动生成且指向/var/tests/results文件夹的VOLUME。

下面我们来看看经过修改的Dockerfile——其中包含新的ONTEST指令。

FROM "":""WORKDIR ""# install packages required to run appRUN apt-get update && apt-get install -y /" and " / # add app runtime and required packages&& rm -rf /var/lib/apt/lists/*# install packages required to run testsONTEST RUN apt-get update && apt-get install -y /" and " / # add testing tools and required packages&& rm -rf /var/lib/apt/lists/*# copy app filesCOPY app appCOPY run.sh run.sh# copy test scriptsONTEST COPY tests tests# copy "main" test commandONTEST COPY test.sh test.sh# auto-generated volume for test results# ONTEST VOLUME "/var/tests/results"# ... EXPOSE, RUN, ADD ... for app and test environment# main app commandCMD [run.sh, ""]# main test commandONTEST CMD [/test.sh, ""]

如何进行Docker容器测试分析

如何实现“测试感知容器”

Docker拥有ONBUILD这样一条非常实用的指令。该指令允许我们在已经成功的build之上触发另一build指令。其基本思路是在运行docker-test命令的同时,使用ONBUILD指令。

以下为docker-test命令的执行流程:

docker-test将在应用程序Dockerfile当中搜索ONBUILD指令后,利用初始Dockerfile生成临时的Dockerfile.test,再执行docker build -f Dockerfile.test [OPTIONS] PATH,其中包含受docker build命令支持的其它选项:-test将自动被添加至tag选项当中。
如果构建成功,则执行 docker run -v ./tests/results:/var/tests/results [OPTIONS] IMAGE:TAG-test [COMMAND] [ARG…] 移除Dockerfile.test文件
那么,为什么不创建一个无需配合ONBUILD指令的Dockerfile.test文件?

这是因为,为了测试正确的镜像(及标签),我们需要保证FROM始终在测试目标的image:tag中得到不过前面提到的方案仍然存在局限——其不适用于“onbuild”镜像(即用于自动化构建应用的镜像),例如Maven:onbuild。

下面来看一条简单的docker-test命令实现流程。其中强调了一大重要概念:docker-test命令应当能够处理build与run命令选项,同时能够妥善处理错误状况。

#!/bin/bashimage="app"tag="latest"echo "FROM ${image}:${tag}" > Dockerfile.test &&docker build -t "${image}:${tag}-test" -f Dockerfile.test . &&docker run -it --rm -v $(pwd)/tests/results:/var/tests/results "${image}:${tag}-test" &&rm Dockerfile.test

让我们把注意力集中在最值得关注的重要部分。

集成测试型容器方案

假设我们拥有一套自动化CI/CD通道,我的的应用程序由数十甚至数百项微服务构建而成,每项微服务都由CI进行构建与测试,并在之后被部署到某种环境当中(例如测试、分段或者生产环境)。我们的CI会对各项微服务进行分别测试——运行单元与服务测试(或者api合同测试)。甚至有可能进行微集成测试——即将测试运行在特设的子系统之上但这又会带来一些新问题:

实际集成测试或者长期运行测试该如何完成(例如性能与压力测试)?弹性测试该如何实现(例如‘混乱猴子’测试)?如何实现安全扫描?那些需要耗费较长时间且运行在完整操作系统之上的测试与扫描要如何完成?

应当存在一类特殊的集成测试容器。这些容器将仅包含测试工具与测试元素:测试脚本、测试数据、测试环境配置等等。为了简化此类容器的编排与自动化流程,我们应当定义并遵循某些约定并使用元数据标签(Dockerfile中的LABEL指令)。

集成测试标签

test.type – 测试类型,负责定义integration; 可属于 integration, perfORMance, security, chaos 或者其它任意文本之一; 此标签代表其属于一套集成测试容器

test.results – 用于存放测试结果的VOLUME ; 默认位置为 /var/tests/results

test.XXX -任何其它相关元数据,仅使用test.后缀名作为标签名称

集成测试容器

集成测试容器其实就是一种常规Docker容器,其中不包含任何应用程序逻辑及代码。它的惟一用途就是创建可重复且可移植的测试流程。以下为建议纳入集成测试容器的内容:

测试工具 - Phantom.jsselenium, Chakram, Gatling, …测试工具运行时 - node.jsJVMpython, Ruby, …测试管理配置 – 环境变量, 配置文件, 引导脚本, …测试 -作为经过编译的软件包或者脚本文件存在测试数据 – 任何用于测试的数据文件类型: JSON, csv, txt, xml, …测试启动脚本 -用于运行测试的部分“main”启动脚本,仅负责创建test.sh并借此启动该测试工具。

集成测试容器应当运行在全部微服务都已经部署到位的运营环境之下,这些容器可与其它服务采取一致的部署方式。在实际集成测试当中,我们必须对多项服务进行访问来测试多种不同环境下是否能正常运行。将集成测试纳入应用服务容器不仅会增加容器自身体积,同时亦会在各服务之间带来不必要的依赖性。因此,我们将所有依赖性都限制在集成测试容器当中。

关于“如何进行Docker容器测试分析”就介绍到这了,更多相关内容可以搜索编程网以前的文章,希望能够帮助大家答疑解惑,请多多支持编程网网站!

--结束END--

本文标题: 如何进行Docker容器测试分析

本文链接: https://lsjlt.com/news/320408.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何进行Docker容器测试分析
    这篇文章主要为大家分析了如何进行Docker容器测试分析的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“如何进行Docker容器测试分析”的知识吧。为了解决上...
    99+
    2023-06-28
  • 如何进行OGG中showsynatx测试的分析
    如何进行OGG中showsynatx测试的分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 测试showsynatx:   首先...
    99+
    2024-04-02
  • 如何进行单元测试利器JUnit的实践与分析
    今天就跟大家聊聊有关如何进行单元测试利器JUnit的实践与分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。单元测试工具Junit是一个开源项目,昨天学习了一下这个东西,总结下心得。...
    99+
    2023-06-17
  • 如何进行sysbench测试
    如何进行sysbench测试,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。sysbench支持以下几种测试模式:1、CPU运算...
    99+
    2024-04-02
  • 如何进行API测试工具SoapUI和Postman对比分析
    今天就跟大家聊聊有关如何进行API测试工具SoapUI和Postman对比分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。最近公司要引入API测试工具,经过调查和了解,最终决定在S...
    99+
    2023-06-04
  • 如何进行opencv vector 测试
    这篇文章给大家介绍如何进行opencv vector 测试,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。#include <iostream>#include <cv.h>#...
    99+
    2023-06-04
  • PhpStorm如何连接docker容器内的php XDebug进行断点调试
    这篇“PhpStorm如何连接docker容器内的php XDebug进行断点调试”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“PhpStorm如何连接docker容器内的php XDebug进行断点调试”,给大家总结了以下...
    99+
    2023-06-06
  • docker容器直接退出如何进入容器调试模式
    目录先上结论(适用所有镜像)Docker RUN 覆盖容器主进程命令CMDdocker-compose中的覆盖主进程命令Entrypoint命令分析结论补充容器启动直接退出,想进入容...
    99+
    2024-04-02
  • python如何进行基准测试
    基准测试属于性能测试的一种,用于评估和衡量软件的性能指标。我们可以在软件开发的某个阶段通过基准测试建立一个已知的性能水平,称为"基准线"。当系统的软硬件环境发生变化之后再进行一次基准测试以确定那些变化对性能的影响。 ...
    99+
    2022-06-02
    python 基准测试 python 测试
  • Android如何进行单元测试
      Menifest.xml中加入: <application>中加入: <uses-library android:name="andro...
    99+
    2022-06-06
    单元 单元测试 测试 Android
  • 如何进行Tokudb安装测试
    如何进行Tokudb安装测试,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 一 前言   To...
    99+
    2024-04-02
  • 如何进行sysbench压力测试
    如何进行sysbench压力测试,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 对于很多线上业务而言,如果有新服务器,新的...
    99+
    2024-04-02
  • 如何进行java 8 forEach测试
    本篇文章为大家展示了如何进行java 8 forEach测试,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。package staticTest;import java.util.ArrayList;...
    99+
    2023-06-03
  • 如何进行C++单元测试?
    如何进行C++单元测试?C++是一种广泛使用的编程语言,常用于开发各种类型的应用程序。为了确保代码的质量和可靠性,进行单元测试是非常重要的。本文将介绍如何进行C++单元测试,以帮助开发人员更好地掌握这一技能。学习并选择合适的测试框架在进行C...
    99+
    2023-11-02
    测试框架 断言 C++ 单元测试
  • 如何进行MySQL并行复制测试
    今天就跟大家聊聊有关如何进行MySQL并行复制测试,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。    对于主从延迟,其实一...
    99+
    2024-04-02
  • PHP数组分页中如何进行单元测试?
    php 数组分页单元测试指南包括:测试边缘情况(空数组、无效页码);测试分页结果是否正确(第一页、中间页、最后一页);测试总页码计算是否正确(元素数量等于每页元素数量、元素数量大于每页元...
    99+
    2024-05-01
    php 单元测试
  • docker如何进入mysql容器
    要进入MySQL容器,可以使用以下命令: docker exec -it <container_id> bash 其中...
    99+
    2024-05-07
    mysql docker
  • 如何利用GitLab进行持续集成的测试覆盖率分析
    如何利用GitLab进行持续集成的测试覆盖率分析引言:在软件开发过程中,测试覆盖率是评估测试的充分性与有效性的重要指标之一。测试覆盖率分析可以帮助开发团队评估测试的质量,并找出存在的漏洞和缺陷,从而提高软件的稳定性和可靠性。本文将介绍如何利...
    99+
    2023-10-27
    gitlab 持续集成 测试覆盖率分析
  • Java使用JMH进行基准性能测试分析
    本篇内容主要讲解“Java使用JMH进行基准性能测试分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java使用JMH进行基准性能测试分析”吧!一、前言在日常开发工作当中,开发人员可能有这些困...
    99+
    2023-06-25
  • 如何进行sandbox和MHA的测试
    本篇文章为大家展示了如何进行sandbox和MHA的测试,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 昨天写了一篇使用脚本搭建一主多从的脚本之后,奇龙兄建议我看...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作