用Python和Conu测试容器
越来越多的开发人员使用容器开发和部署他们的应用。这意味着可以轻松地测试容器也变得很重要。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相关知识,请关注IT培训机构:千锋教育。http://www.mobiletrain.org/

相关推荐HOT
更多>>
python中的变量怎么设置
python中变量设置方法:变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并...详情>>
2023-11-09 23:53:16
python中t是什么意思?
python中t指的是“\r”:回车符,返回到这一行的开头,return的意思。其他相关:>>\n:换行符,到下一行的同一位置,纵坐标相同,newline的意思...详情>>
2023-11-09 18:48:52
python 学习十阶段
第一阶段:Python基础知识—核心Python开发环境布置程序的构成变量、标识符、布尔运算、字符串机制、分支语句、逻辑表达式;局部变量和全局变量...详情>>
2023-11-09 15:36:18
python 的内置字典
python内置了字典:dict(key-value存储方式)的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速...详情>>
2023-11-09 15:16:10