现如今,Docker已经成为了很多公司部署应用、服务的首选方案。依靠容器技术,我们能在不同的体系结构之上轻松部署几乎任何种类的应用。作为测试一方,我们应与时俱进,将Docker容器技术应用到测试工作中。为了让小伙伴们可以快速上手Docker容器技术,本文主要从3个场景介绍Docker在测试中的应用:

  • 使用Docker管理测试环境
  • 使用Docker提高测试执行效率
  • 使用Docker管理测试数据

一、使用Docker部署服务

在讲解Docker在测试中的应用之前,先简单给大家介绍一下如何使用Docker部署一个服务。

前提条件:

假设你的服务器已经部署安装了Docker服务。(安装部署比较简单,各位小伙伴可以自行进行操作。)

Docker部署服务步骤:

1、将工程代码clone到服务器;

2、在工程目录新建一个Dockerfile文件,内容如下:

# 基于某个基础Docker镜像进行运行,如下的镜像已经包含了nginx+lua的环境FROM docker-reg.sogou-inc.com/library/nginx-sogou-lua:2.1.8.0-10ADD resources/vhosts                    /usr/local/nginx/conf/vhostsADD resources/html                      /usr/local/nginx/htmlADD resources/lua                       /usr/local/nginx/lua

3、使用Docker build命令打包我们的服务镜像:

# v1为tag标签,跟git的tag标签类似,方便记忆docker build -t helloworld:v1 .

4、打包后我们可以看到镜像:

5、运行该镜像:

# -p 指定主机端口和容器端口的映射关系# -d 指定容器在后台运行docker run -p 8080:80 -d helloworld:v1

总结一下:

1、根据服务需要的运行环境,编写Dockerfile文件;

2、使用build命令依据Dockerfile打包镜像;

3、镜像可以本地运行,或发布到公有/私有平台,以供他人使用。

# 官方docker镜像平台https://hub.docker.com/ 

二、使用Docker管理测试环境在开发或测试过程中,我们常常需要不同(版本)的依赖(应用)环境。以往我们通常直接在当前环境上安装需要的依赖(应用),考虑如下几个问题,是否都遇到过:

  • 新依赖(应用)部署完了,想回退/恢复到旧版本,就不好操作了;
  • 同一应用的不同版本不得不借助一些第三方式工具进行管理,甚至为了方便,将不同版本的应用部署在不同的机器上;
  • 开发提测了服务,但在测试环境却无法跑起来;

有了Docker容器技术后,以上问题就统统解决了。下面开始介绍如何使用Docker容器管理测试环境,本文以python依赖环境为例子:1、我们直接从Docker官方镜像平台拉取一个python环境,并将它运行起来:

# -it参数指定以/bin/bash交互式运行# --name参数给该容器起一个名字docker run -it --name python docker.io/python:3.6.4 /bin/bash

2、在容器里安装我们需要的依赖或其他第三方开源库,如下面安装freetds-dev和unixodbc-dev这两个依赖:

# 其他需要的依赖可以自行安装apt-get install freetds-devapt-get install unixodbc-dev

3、安装完后退出容器(可以使用ctrl+p+q快捷键),但不要结束容器;    4、将我们的修复提交,得到新的镜像:

# -m 参数为提交的log信息,相当于git log# 39eaa5aa7332为容器的id,可通过docker ps命令查看docker commit -m "add freetds-dev and unixodbc-dev lib" 39eaa5aa7332 python3.6.4-dev

总结一下:Docker管理测试环境的步骤有3步:1、运行一个基础镜像容器;2、在容器进行修改:服务安装、依赖更新等;3、使用docker commit命令提交我们的修改。是不是特别方便?我们可以构建任意我们需要的镜像,并可以进行发布,与他人共享使用。在团队里使用此功能可以大大提高工作效率,还可以避免因环境不一致带来的各种问题。三、使用Docker提高测试执行效率考虑如下3个场景:

  • 问题一:A、B两位测试人员共同负责同一核心模块的测试,希望测试环境独立,互不影响;
  • 问题二:测试过程中发现某个问题,希望保留此现象环境,以便后面排查定位问题;
  • 问题三:有没有发现自己的host环境特别多,服务部署在各测试环境上,希望统一化管理。

当然还有很多其他类似的问题,但现在用Docker容器技术统统可以帮我们解决。对于问题一:我们知道,容器运行时,可以添加-p参数,以指定映射不同的主机端口:

# -p 指定主机端口和容器端口的映射关系# -d 指定容器在后台运行# 如下运行2个容器,映射到主机上不同的端口上docker run -p 8080:80 -d helloworld:v1docker run -p 8081:80 -d helloworld:v1

A、B测试人员分别使用不同的容器服务,是不是就没有之前的测试环境冲突的问题了?对于问题二:此时我们使用docker commit打包一个状态镜像(还可以直接将镜像发布给开发),是不是也可以解决问题了?对于问题三:针对不同项目工程部署在不同测试环境的问题,有了Docker容器技术,我们也可以使用docker build打包,然后运行在同一主机上。需要注意的是端口冲突的问题,如果你看到如下的错误,请检查看一下是否是端口冲突了:

docker: Error response from daemon: failed to create endpoint drunk_babbage on network bridge: Bind for 0.0.0.0:80 failed: port is already allocated.

四、使用Docker管理测试数据    在讲Docker管理测试数据前,先给大家讲一讲Docker容器数据持久化的概念,可以帮助大家更好地理解:Docker容器的数据存储在数据层,如果删除容器,数据也会被清除,达不到我们需要管理测试数据的效果,那我们可以怎么做呢?见上图,Docker提供了3种持久数据的方式:

  • volumes:存于主机文件系统中的某个区域,由Docker管理。非Docker进程不应该修改这些数据。卷是Docker中持久化数据的最好方式
  • bind mount:存于主机文件系统中的任意位置。非Docker进程可以修改这些数据
  • tmpfs mount:存于内存中(注意,并不是持久化到磁盘)。在容器的生命周期中,它能被容器用来存放非持久化的状态或敏感信息

下面以mysql数据库作为例子讲解测试数据管理的方法:1、拉取mysql数据库镜像:

# 当然也可以直接运行镜像,当本地没有这个镜像的时候会自动拉取docker pull mysql

2、运行mysql容器时,以volumes(卷)的形式将主机目录挂载为mysql数据和配置目录:

# -v使用2次,分别指定mysql数据库配置和数据对应的主机目录docker run -d -e MYSQL_ROOT_PASSWORD=admin --name mysql -v /data/mysql/my.cnf:/etc/mysql/my.cnf -v /data/mysql/data:/var/lib/mysql -p 3306:3306 mysql 

3、开始你的测试(包括修改数据库);4、退出容器,此时我们得到mysql数据的第一个版本。我们可以在本地备份、分发;5、若需要以此数据为基础数据,复制一份出来,启动容器时使用-v参数将复制后的路径挂载到容器即可。总结一下:Docker管理测试数据主要是利用Docker数据持久化功能来实现的,容器启动时使用-v参数挂载主机目录即可。五、总结    本文主要给大家简单介绍了如何使用Docker容器技术管理测试环境、测试数据,提高测试(团队)工作效率,其核心的知识点有:1、Dockerfile文件的编写,该部分没有详细介绍,大家可以参数如下教程进行学习,相信很容易可以上手:

https://yeasy.gitbooks.io/docker_practice/image/dockerfile/

2、docker build命令打包服务镜像;3、docker commit 命令提交镜像的修改;4、docker run 命令运行镜像;5、docker run -p -v参数的应用。当然,由于篇幅有限,如下几个问题没有在文中分享,有兴趣的小伙伴可留言与小编交流:1、各类常见服务部署的方式;2、Docker Hub私有仓库环境搭建;3、结合gitlab CI/CD自动化实现自动打包,测试,发布镜像等功能;4、Docker容器性能的问题。搜狗测试,期待您的关注!

docker mysql总是退出_Docker提升测试效率之路相关推荐

  1. docker mysql总是退出_docker 安装 mysql

    Docker简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布 ...

  2. 测试开发:提升测试效率都有哪些具体手段?

    在大部分研发项目经理心中,进度通常往往会放在第一位,其次是成本,最后是质量,当然人员队伍也最好要稳定.天下武功,唯快不破:进度 > 成本 > 质量 > 人. 这个说法并不是绝对,当然 ...

  3. docker mysql 高可用_docker搭建数据库高可用方案PXC

    前言 本方案主要目的是学习, 该方案不太合适于企业项目 是什么? 白话点, 是个提供了必要环境的虚拟机(类似于java的导入部分包一样和c++的头文件差不多), 所以它比普通的VMWare或者Virt ...

  4. docker mysql 远程连接_Docker MySQL的安装与远程连接

    1.使用以下命令从docker Hub去下载MySQL官方提供的docker镜像.默认tag是latest. docker pull mysql 如果要使用其它tag,则示例如下. "8.0 ...

  5. 全面提升测试效率,一键实现多文件、多Sheet的WEB自动化测试!

    目录 前言: 设计目标 框架结构 实现 总结 前言: 在WEB开发中,自动化测试框架是一个不可或缺的组件.封装一个既能支持多文件,又能支持多Sheet的WEB自动化框架,将会极大地提升我们的开发效率. ...

  6. docker mysql忘记密码_docker基于mysql镜像构建mysql容器忘记密码解决办法

    环境: [root@master-106 ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [root@master-1 ...

  7. docker mysql配置 丢失_Docker 从入门到掉坑

    Docker 介绍 简单的对docker进行介绍,可以把它理解为一个应用程序执行的容器.但是docker本身和虚拟机还是有较为明显的出入的.我大致归纳了一下,可以总结为以下几点: docker自身也有 ...

  8. docker mysql忽视大小写_Docker安装MySQL忽略大小写问题的问题

    Docker安装MySQL忽略大小写问题的问题 连接MySQL: 查看当前mysql的大小写敏感配置 show global variables like '%lower_case%'; +----- ...

  9. docker mysql开发环境_Docker 构建PHP+Apache+MySQL 开发环境

    文章目錄 通过Docker 构建PHP+Apache+MySQL 开发环境,所有的服务(Apache,MySQL)和语言环境(PHP)都将在容器中运行,代码编写在宿主机内编写,并在宿主机的浏览器进行查 ...

最新文章

  1. 摆脱阅读黑洞,退订RSS
  2. CSS 中功能相似伪类间的区别
  3. ccaf internship
  4. Cpp 对象模型探索 / 程序转化语义
  5. 第八章 Python 对象和类
  6. gwt的mvp模式_GWT MVP变得简单
  7. linux 特殊shell变量
  8. MyBatis:模糊查询的4种实现方式
  9. 概率论和数理统计 - 04 -
  10. python一条线分段显示颜色_Python诅咒显示分段fau
  11. 他山之石 | 腾讯 多模态内容理解技术及应用
  12. c#设计的简单登录界面
  13. 企业应用打包的时候 修改ipa包的bundle identifier
  14. Win7 Windows照片查看器无法显示此图片,因为计算机上的可用内存可能不足
  15. 利用UCSC Xena做TCGA数据库的生存曲线分析
  16. 同条网线电脑正常上网,手机连接wifi成功,但是无法访问互联网
  17. php arrayaccess什么作用,PHP中的ArrayAccess用法详解
  18. 金彩教育:详情页产品描述怎么写
  19. Mathematica13.1的安装与使用配置
  20. latex 参考文献显示问号_终于用回vscode写LaTeX了

热门文章

  1. css如何调整红心样式_在JavaScript应用程序中包含CSS的多种方法「渡一」
  2. mysql crash定位分析_MySQL实例crash的案例详细分析
  3. html中链接不自动变色,HTML 点击 标签 链接 点击之后变色-转发【已解决】
  4. java 怎么从性能上优化代码_月薪上万做好这一步:程序员职场中必须掌握的的Java代码性能优化技巧...
  5. MySQL 常用运算符
  6. python基础入门(6)之列表
  7. 没有bug队——加贝——Python 练习实例 21,22
  8. python基础课程5(看代码看注释)--numpy
  9. php获取信息,PHP文件信息获取函数
  10. java技术文章在哪里看呢_谈论Java技术似乎无处不在,但究竟是什么呢?文章末尾有福利...