使用Docker容器部署robotframework开发环境
如果有一种方式,统一开发环境,不需要新人花半天时间部署开发环境,那将是一件极大的好事,试了一下,恰好docker满足了这种需求,真正实现一次封装,到处运行,再不用教新人部署环境、私人电脑也不需要重复安装开发环境
【1】背景
因为robot接口测试项目的部署对测试人员动手能力要求比较强,需要修改livetest和HttpLibrary源码(这两个库还不支持python3),每个测试人员部署,也都要花不少时间。
因此这里我把接口测试项目的开发环境打包成一个镜像,这么一来,测试人员只需要在自己的IDE中配置编译器环境为Docker容器即可
【2】怎么做
【2.1】准备条件
阿里云镜像地址:传送(需登录后才能查看)
接口测试项目开发环境镜像:传送(推荐从阿里云仓库下载,这样更新了开发环境镜像,可以直接更新)
Docker软件:传送
【2.2】安装Docker
win10以下版本的系统使用Docker Toolbox:传送
win10版本使用Docker Desktop,本文演示用的是Docker Desktop
首先下载Docker Desktop,进行安装,安装全部next即可
注意:如果你此前使用的Docker ToolBox,现在想换成Docker Desktop,务必在系统的环境变量中,删除所有docker开头的变量,否则无法运行Docker Desktop
安装完桌面有个Docker Desktop图标,打开自己注册、和学习简单的Docker命令(可直接跳过,不影响)
如果没有意外的话,在桌面的左下角会有一个小海豚,鼠标移动上去会显示Docker Desktop is running
【2.3】挂载镜像
【2.3.1】如果你是想用阿里云镜像仓库地址的,看这里,推荐使用这种方式
打开你电脑的powershell或者CMD,输入如下地址下载最新版本的开发环境镜像:
docker pull registry.cn-hangzhou.aliyuncs.com/lonelylizard_img/robotframework_python3_env:latest
注意下图只是作为参考,注意最后的版本号请使用latest
查看下docker镜像列表
输入:docker images
如果输出的列表中你看到有个repository名叫做rrzuji_rf_api_env,说明镜像挂载成功
【2.3.2】如果你是从SVN下载的rrzuji_api_rf_env.tar,看这里
打开CMD或者powershell
输入:docker load -i rrzuji_api_rf_env.tar
如下图就是挂载成功
查看下docker镜像列表
输入:docker images
如果输出的列表中你看到有个repository名叫做rrzuji_rf_api_env,说明镜像挂载成功
pycharm中配置Docker
首先你的IDE中,当前的Project应当是我们的接口测试项目rrzuji_RF_API,如果不是,先切换,因为后面打开的页面配置有关
1、从File-settings打开设置
2、添加一个python解释器(python Interperter)
3、新建一个Docker服务
4、从本地的Docker服务中选择镜像,记得配置完点保存
如果你Image name下拉没有看到名为rrzuji_rf_api_env的镜像,请返回到前面第二节“挂载rrzuji_api_rf_env.tar”重新配置
5、现在你可以在接口测试项目的python编译器配置页面的Project Interpreter下拉看到一个连接到Docker的python编译器,选择它
选择它之后,可以看到自动加载出该镜像的python全部已装依赖
测试
【2.4】Python编译
新建一个python文件来测试
我们想知道编译器是调用哪里的,我选择了输出当前编译的路径,和输出系统信息:
import sys
import platform
print("编译器路径:", sys.executable)
print("系统信息:", platform.platform())
OK,运行一下,可以看到输出了:
2b5205b92baf:python -u /opt/project/Resources/Lib/docker_link.py
编译器路径: /usr/local/bin/python
系统信息: Linux-4.19.128-microsoft-standard-x86_64-with-debian-8.10
编译器的路径就是linux系统的,系统信息的debian也表明了python运行在debian系统上
【2.5】用例文件运行测试
新建一个robot文件来测试
我想通过robot文件运行时调用的python编译器和robot的关键字来测试用例是否能正常运行
*** Test Cases ***Class_02_连接容器测试 ${a} Set Variable 1
${b} Set Variable 2
${sysPath} evaluate sys.executable
Log ======编译器路径========
Log ${sysPath}
Log ======robot关键字断言========
Should Be True ${a}==${b}
把鼠标移动到用例的名称上面,再单击鼠标右键,点击RUN
控制台输出信息:
aedf1af49891:python -u -m robot.run -t Class_02_连接容器测试 Interface_Code/Person_Alipay_APP/Single_API/Scheme/docker_test.robot
====================================================
Docker Test
====================================================
Class_02_连接容器测试 | FAIL |
'1==2' should be true.
\------------------------------------------------------------------------------
Docker Test | FAIL |
1 critical test, 0 passed, 1 failed
1 test total, 0 passed, 1 failed
=====================================================
Output: /opt/project/output.xml
Log: /opt/project/log.html
Report: /opt/project/report.html
就是我们的用例运行失败了,失败就对,因为我用例里断言1==2
后面的Output、Log、Report文件的路径是容器内的路径,会默认映射到自己的项目根目录下
查看测试报告,在项目的根目录下双击打开log.html
如下图圈出来的信息和我们预想的一致
【3】一些注意事项
1、pycharm在每一次调用Docker容器完成作业后会停止并删除容器
这个可以通过在Pycharm内对代码加断点来测试
比如用刚才的python测试文件来加断点,并使用Debug模式运行
OK,下图圈起来的位置,说明执行到断点位置了,这样我们就能够让Docker容器保持在运行
打开powershell窗口
查看dokcer当前进程(一个容器一个进程)
输入:docker ps
如图,看到一个运行中的容器,ID为285d96811952
回到pycharm,把断点后面的都执行完
接着回到powershell,再次输出:docker ps
发现没有运行中的容器
我们还不知道仅是停止了,还是说被停止并销毁了
查看全部容器,输入命令:docker ps -a
如下图所示,已经找不到ID为285d96811952的容器了,说明pycharm连接Docker是这样的:
1、创建容器:docker run -i -t rrzuji_rf_api_env
3、停止容器:docker stop ${CONTAINER ID}
4、销毁容器:docker rm ${CONTAINER ID}
2、关于接口测试项目的依赖环境更新解决方案
现在的镜像是存放在SVN上,所以一旦我们的项目依赖更新了,我会重新打包生成镜像文件,所有人都需要重新从SVN拉取再挂载到Docker。
这些天我再想办法搭建仓库或者借助阿里云的镜像仓库来存放,到时可以在Docker Destop内便捷更新
3、删除容器、镜像
有些时候我们需要删除多余的容器或者镜像
删除容器:docker rm 容器ID
删除镜像:docker rmi 镜像名字
5、从阿里云仓库下载的时候提示未登陆
这个我没试过,因为我自己环境是登录了的,如果你下载也需要登录,请移步注册:
https://cr.console.aliyun.com/
注册后在powershell或者CMD里执行登录即可
docker login --username=你注册的手机号 registry.cn-hangzhou.aliyuncs.com
4、镜像如果更新了,我怎么更新
在powershell或者CMD里执行如下命令更新
docker pull registry.cn-hangzhou.aliyuncs.com/lonelylizard_img/robotframework_python3_env:latest
如果你之前指定的版本不是latest,则你pull下来镜像是不会覆盖的
5、想使用其他镜像时下载太慢
在docker destop软件内设置-docker Engine把配置文件的仓库地址换成阿里的加速镜像源
{
"registry-mirrors": [
"https://wg7mt4u8.mirror.aliyuncs.com"
],
"insecure-registries": [],
"debug": false,
"experimental": false,
"features": {
"buildkit": true
}
}
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭