用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/
猜你喜欢LIKE
相关推荐HOT
python gensim库是什么?
pythongensim库是什么?gensim库在文本监控里,首先在稳定上,坚如磐石,不用担心稳定性问题,其次,时效性很强,执行能力很快,经常在最重要的...详情>>
2023-11-06 21:48:19python中getattr()是什么?
python中getattr()是什么?本文教程操作环境:windows7系统、Python3.9.1,DELLG3电脑。1、getattr()用来获取对象中的属性值;获取对象object的属...详情>>
2023-11-06 21:41:07python标识符如何使用?
python标识符如何使用?为了给编程中函数、类等进行区分,会赋予它们不同的名称。我们把这种命名叫做标识符,也可以理解为符号的标记。当然这种...详情>>
2023-11-06 21:33:55Python IDE之Thonny的介绍
pythonIDE之Thonny的介绍今天要介绍的IDE,可能没用过,甚至可能没听说过。叫Thonny,是塔尔图大学开发的,适合程序员新手。它的界面很容易使用...详情>>
2023-11-06 20:54:19热门推荐
如何使用python中的help函数?
沸如何使用python的callable函数?
热python gensim库是什么?
热python中xluntils库是什么?
新python中getattr()是什么?
python中的win32com库是什么?
python标识符如何使用?
如何使用python中schedule模块?
python中ruamel.yaml模块是什么?
defaultdict在python中计算键值的和
python sleep和wait对比分析
python中字符串转成数字的几种方法
python中SocketServer是什么?
python中如何使用@contextmanage?