Dockerfile——软件自动化测试入门攻略(8)

发表于:2024-3-19 09:45

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:杨定佳    来源:51Testing软件测试网原创

  15.5 Dockerfile
  Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明,每一条指令对应镜像中的一层。Dockerfile 分为基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令4部分,具体文件构成如下:
  # 引入基础镜像 ubuntu 
  FROM ubuntu 
  # 添加维护者信息 
  LABLE user=tynam email=tynam.yang@gmail.com 
  # 复制当前目录下 run.sh 文件到镜像的根目录 
  ADD run.sh / 
  # 执行命令 ./run.sh 
  CMD ["./run.sh"]
  下面对文件中的内容进行说明:
  #:注释符。
  FROM:指定基础镜像,并且必须是第一条指令。格式为FROM <image>或FROM <image>:<tag>或FROM <image>:<digest>。
  LABLE:将数据添加到镜像中,格式为LABLE <key>=<value> <key>=<value>。
  ADD:将文件复制到镜像中,格式为ADD <src> ... <dest>或ADD ["<src>",..."<dest>"]。
  CMD:启动容器时默认要运行的程序,格式为CMD <command>或CMD ["executable","<param1>","<param2>"]或CMD ["<param1>","<param2>"]。
  除了上面介绍的指令外,常用的指令还有如下几种:
  COPY:复制文件,格式为COPY <src> ... <dest> 或COPY ["<src>",..."<dest>"]。与ADD指令不同的是,COPY只能是本地文件。
  RUN:执行命令,格式为RUN <command>或RUN ["executable", "param1", "param2"]。
  EXPOSE:声明端口,格式为EXPOSE <端口1> [<端口2>...]。
  WORKDIR:指定工作目录,格式为WORKDIR <工作目录路径>。
  下面我们首先编写一个测试用例脚本,然后通过Dockerfile构建成镜像,最后创建容器并运行来体验Dockerfile的使用。
  创建测试用例脚本。新建一个test_dockerfile.py文件,添加两个测试用例test_01和test_02,其中test_01断言成功,test_02断言失败,代码如下:
  # chapter15\test_dockerfile.py
  import pytest
  def get_student_info(student_id):
      students = {
          1001: {"name": "方鸿渐", "age": "21", "sex": "男"},
          1004: {"name": "赵辛楣", "age": "16", "sex": "女"}
      }
      return students.get(student_id, "The student ID does not exist.")
  def test_01():
      student = get_student_info(1001)
      assert student.get("name") == "方鸿渐"
  def test_02():
      student = get_student_info(1004)
      assert student.get("name") == "方鸿渐"
  if __name__ == "__main__":
      pytest.main(["-s", "test_dockerfile.py"])
  创建Dockerfile文件。在与test_dockerfile.py同文件夹下新建一个Dockerfile文件,添加内容如下:
  # chapter15\Dockerfile
  # 基于基础镜像
  FROM python:3.10
  # 设置 code 文件夹是工作目录
  WORKDIR /code
  # 将 test_dockerfile.py 文件添加到容器 /code 下
  COPY test_dockerfile.py ?/code
  # 更新 pip 库
  RUN pip install --upgrade pip --index-url https://pypi.douban.com/simple
  # 使用 pip 安装依赖库 pytest
  RUN pip install pytest ?--index-url https://pypi.douban.com/simple
  # 执行命令
  CMD ["python", "test_dockerfile.py"]
  首先设置基础镜像为Python3.10,然后设置工作目录为/code并将test_dockerfile.py文件添加到容器的工作目录中,接着升级pip库并安装脚本所需的pytest库,最后执行测试脚本test_dockerfile.py文件。
  构建镜像。使用命令docker build -t testdockerfile . 生成镜像文件,参数-t后面添加镜像名称和tag,点(.)表示将生成的镜像保存到本地。命令运行完成后,通过命令docker images可看到镜像testdockerfile,如图15-19所示。
图15-19  构建镜像
  创建容器并运行。使用命令docker run -it testdockerfile创建一个容器并运行,结果如图15-20所示,可以看到脚本test_dockerfile.py执行了两条测试用例,一条测试通过,另一条(test_02用例)测试失败。
图15-20  创建容器并运行
  15.6  Docker部署Jenkins
  Jenkins 是一款开源的持续集成工具,集成了开发生命周期的各个过程,包括构建、文档、测试、打包、模拟、部署、静态分析等,它可以帮助用户持续自动构建、测试软件项目,并监控一些定时执行的任务。Jenkins具有很多优势,例如易于安装、免费、可移植、丰富的插件库、可扩展性、分布式,同时支持在Docker下部署。本节将介绍在Docker下部署Jenkins和Jenkins在自动化测试中的应用。
  15.6.1  Jenkins安装
  Docker下安装Jenkins和其他应用程序的安装方式是相同的,首先获取镜像,然后启动容器,最后进入容器对应用程序进行初始化设置。详细操作步骤如下:
  获取Jenkins镜像。在命令行工具中输入命令docker pull jenkins/jenkins获取Jenkins镜像的最新版本。
  创建Jenkins容器。在命令行工具中输入命令docker run --name jenkins -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home --restart always -d jenkins/jenkins,创建一个jenkins容器,如图15-21所示。
图15-21  创建Jenkins容器
  命令中-v jenkins_home:/var/jenkins_home?是将容器/var/jenkins_home目录作为jenkins工作目录,并将本机硬盘上jenkins_home挂载到此位置,方便后续更新镜像后,继续使用原来的工作目录。
  使用浏览器访问Jenkins页面。访问地址为http://{IP}:8080,如果是本机访问则可写成http://localhost:8080/。第一次访问需要对Jenkins进行初始化设置,首先输入管理员密码解锁Jenkins,如图15-22所示。
图15-22  访问Jenkins页面
  获取管理员初始密码。Jenkins在第一次启动时会生成一个默认的管理员密码,使用命令docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword可查看,如图15-23所示。
图15-23  获取管理员初始密码
  将得到的密码输入到图15-22所示的界面中,然后单击【继续】按钮,进入插件安装界面。
  安装插件。插件安装时可以选择【安装推荐的插件】,也可以【选择插件安装】,如图15-24所示。“安装推荐的插件”即Jenkins会安装认为可用到的插件,“选择插件来安装”即指用户自定义插件的安装,可以一个插件也不安装,一般情况下选择【安装推荐的插件】。
图15-24  安装插件
  创建管理员用户。插件安装完成后,进入创建管理员用户页面,如图15-25所示。根据要求输入用户名、密码、确认密码、全名、电子邮件地址,然后单击【保存并完成】按钮。
图15-25  创建管理员用户
  配置Jenkins URL。管理员用户创建成功后,进入配置Jenkins URL页面,一般保持默认值即可,如图15-26所示。
图15-26  配置Jenkins URL
  进入Jenkins主页。配置Jenkins URL完成后便完成了初始化的配置,进入Jenkins主页,界面如图15-27所示。
图15-27  Jenkins主页
版权声明:51Testing软件测试网获得作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号