用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中ndarray与list转换的方法
python中ndarray与list转换的方法在python数据类型中,list元素可以任意类型组合,而ndarray元素类型必须相同,但是ndarray可以更方便的对多维...详情>>
2023-11-10 08:51:14python中OrdereDict如何使用?
python中OrdereDict如何使用?我们在对数据进行处理时,如果能够使它们保存顺序的排序,那么用起来会非常的便利。不过字典本身就是没有顺序的,...详情>>
2023-11-10 07:05:00python中如何使用scipy.fftpack模块计算快速傅里叶变换?
python中如何使用scipy.fftpack模块计算快速傅里叶变换?在编程中,快速傅里叶变换是工程中非常有价值的一类算法,它可以将时域和频域的信号相互...详情>>
2023-11-10 05:50:23zip()函数如何在python中遍历多个列表?
zip()函数如何在python中遍历多个列表?下面我们就python中zip的说明、语法、使用注意点进行讲解,然后带来遍历多个列表的实例。1、说明zip()函...详情>>
2023-11-10 05:38:33热门推荐
python concat函数有何用法?
沸python里函数装饰器怎么使用?
热如何实现python中的continue语句?
热python中的冒泡排序是什么?
新python中str函数是什么
如何使用python实现项目进度显示?
python中ndarray与list转换的方法
python复制文件的方法整理
Python中numpy数组如何添加元素
python有几种可视化图形库?
python中xlwings是什么?
python上下文管理器的基本介绍
Python自动化测试基础必备知识点一
python中OrdereDict如何使用?