首页 / 知识
用Python和Conu测试容器
2023-11-12 13:38:00
越来越多的开发人员使用容器开发和部署他们的应用。这意味着可以轻松地测试容器也变得很重要。Conu(containerutilities的简写)是一个Python库,让你编写容器测试变得简单。本文向你介绍如何使用它测试容器。
开始吧
首先,你需要一个容器程序来测试。为此,以下命令创建一个包含一个容器的Dockerfile和一个被容器伺服的Flask应用程序的文件夹。
$mkdircontainer_test
$cdcontainer_test
$touchDockerfile
$touchapp.py
将以下代码复制到app.py文件中。这是惯常的基本Flask应用,它返回字符串“HelloContainerWorld!”。
fromflaskimportFlask
app=Flask(__name__)
@app.route('/')
defhello_world():
return'HelloContainerWorld!'
if__name__=='__main__':
app.run(debug=True,host='0.0.0.0')
创建和构建测试容器
为了构建测试容器,将以下指令添加到Dockerfile。
FROMregistry.fedoraproject.org/fedora-minimal:latest
RUNmicrodnf-yinstallpython3-flask&µdnfcleanall
ADD./app.py/srv
CMD["python3","/srv/app.py"]
然后使用DockerCLI工具构建容器。
$sudodnf-yinstalldocker
$sudosystemctlstartdocker
$sudodockerbuild.-tflaskapp_container
提示:只有在系统上未安装Docker时才需要前两个命令。
构建之后使用以下命令运行容器。
$sudodockerrun-p5000:5000--rmflaskapp_container
*Runningonhttp://0.0.0.0:5000/(PressCTRL+Ctoquit)
*Restartingwithstat
*Debuggerisactive!
*DebuggerPIN:473-505-51
最后,使用curl检查Flask应用程序是否在容器内正确运行:
$curlhttp://127.0.0.1:5000
HelloContainerWorld!
现在,flaskapp_container正在运行并准备好进行测试,你可以使用Ctrl+C将其停止。
创建测试脚本
在编写测试脚本之前,必须安装conu。在先前创建的container_test目录中,运行以下命令。
$python3-mvenv.venv
$source.venv/bin/activate
(.venv)$pipinstall--upgradepip
(.venv)$pipinstallconu
$touchtest_container.py
然后将以下脚本复制并保存在test_container.py文件中。
importconu
PORT=5000
withconu.DockerBackend()asbackend:
image=backend.ImageClass("flaskapp_container")
options=["-p","5000:5000"]
container=image.run_via_binary(additional_opts=options)
try:
#Checkthatthecontainerisrunningandwaitfortheflaskapplicationtostart.
assertcontainer.is_running()
container.wait_for_port(PORT)
#RunaGETrequeston/port5000.
http_response=container.http_request(path="/",port=PORT)
#Checktheresponsestatuscodeis200
asserthttp_response.ok
#Gettheresponsecontent
response_content=http_response.content.decode("utf-8")
#Checkthatthe"HelloContainerWorld!"stringisserved.
assert"HelloContainerWorld!"inresponse_content
#Getthelogsfromthecontainer
logs=[lineforlineincontainer.logs()]
#CheckthetheFlaskapplicationsawtheGETrequest.
assertb'"GET/HTTP/1.1"200-'inlogs[-1]
finally:
container.stop()
container.delete()
测试设置
这个脚本首先设置conu使用Docker作为后端来运行容器。然后它设置容器镜像以使用你在本教程第一部分中构建的flaskapp_container。
下一步是配置运行容器所需的选项。在此示例中,Flask应用在端口5000上提供内容。于是你需要暴露此端口并将其映射到主机上的同一端口。
最后,用这个脚本启动容器,现在可以测试了。
测试方法
在测试容器之前,检查容器是否正在运行并准备就绪。示范脚本使用container.is_running和container.wait_for_port。这些方法可确保容器正在运行,并且服务在预设端口上可用。
container.http_request是request库的包装器,可以方便地在测试期间发送HTTP请求。这个方法返回requests.Responseobject,因此可以轻松地访问响应的内容以进行测试。
conu还可以访问容器日志。又一次,这在测试期间非常有用。在上面的示例中,container.logs方法返回容器日志。你可以使用它们断言打印了特定日志,或者,例如在测试期间没有异常被引发。
conu提供了许多与容器接合的有用方法。文档中提供了完整的API列表。你还可以参考GitHub上提供的示例。
运行本教程所需的所有代码和文件也可以在GitHub上获得。对于想要进一步采用这个例子的读者,你可以看看使用pytest来运行测试并构建一个容器测试套件。
以上内容为大家介绍了用Python和Conu测试容器,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注我们http://www.mobiletrain.org/
最新内容
相关内容
python的单元测试框架
python的单元测试框架,代码,生态,信息,标准,测试,分析,工具,环境,条款,活跃,1、AutotestAutotest是Google、Redhat、IBM公司联合开发的分布式Python 3.6 中针对文件系统的神奇
Python 3.6 中针对文件系统的神奇方法,数字,代码,数据,标准,信息,培训,首次,工作,文件名,常数,Python3.6首次发布于2016年,尽管它已经发布了很为何你的Python代码应是扁平与稀疏
为何你的Python代码应是扁平与稀疏的,代码,培训,信息,观察,设计,工具,嵌套,闻闻,程序员,沉思,Python之禅之所以得名,正是由于它那简明扼要的规如何提速优化python代码?
如何提速优化python代码?,代码,时间,数据,新增,写法,包装,情况,下来,面临,工作,Python是一种脚本语言,相比C/C++这样的编译语言,在效率和性能方python经典最短代码实现排序的功能
python经典最短代码实现排序的功能,代码,位置,数据,分析,时间,序列,元素,培训,下来,算法,冒泡排序:算法思想:1.比较相邻的元素,如果第一个比第二Python 中如何处理文件系统路径
Python 中如何处理文件系统路径,名称,路径,培训,系统,结果,斜杠,函数,所在,绝对路径,目录,1不同操作系统分隔符在Windows操作系统中,文件路径Python中的两个测试工具
Python中的两个测试工具,代码,情况,测试,设计,通用,名称,庞大,标准,网址,培训,当我们在写程序的时候,我们需要通过测试来验证程序是否出错或者Python 中如何实现参数化测试?
Python 中如何实现参数化测试?,密码,数据,测试,业务,情况,预期,培训,系统,参数,方法,之前,我曾转过一个单元测试框架系列的文章,里面介绍了unit如何让Python代码更易维护
如何让Python代码更易维护,代码,项目,标准,工具,质量,地方,一致,更正,培训,控制权,检查你的代码的质量,通过这些外部库使其更易维护。可读性很Python单元测试经验总结
Python单元测试经验总结,名字,项目,报告,工具,代码,培训,测试,文件,覆盖率,都会,python写单元大多数都会用到unittest和mock,测试代码覆盖率都Python测试远程端口连接时间
Python测试远程端口连接时间,时间,网络,服务,责任,培训,文件,端口,服务器,脚本,时间差,最近自己服务器访问别人的服务器,有时候会报超时错误,有开发人员常用Python开发工具
开发人员常用Python开发工具,环境,代码,平台,设备,项目,分析,智能,行业,产品,人员,Python编程开发是目前最热门的行业之一,Python无论是从人才