当前位置: 首页 > 科技观察

用Python和Conu测试容器

时间:2023-03-18 14:41:20 科技观察

使用Python和Conu测试容器越来越多的开发人员使用容器来开发和部署他们的应用程序。这意味着容器易于测试也变得很重要。Conu(容器实用程序的缩写)是一个Python库,可以轻松编写容器测试。本文向您展示如何使用它来测试容器。让我们开始吧首先,你需要一个容器程序来测试。为此,以下命令创建一个文件夹,其中包含容器的Dockerfile和容器提供的Flask应用程序。$mkdircontainer_test$cdcontainer_test$touchDockerfile$touchapp.py将以下代码复制到app.py文件中。这是返回字符串“HelloContainerWorld!”的常见基本Flask应用程序。fromflaskimportFlaskapp=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:latestRUNmicrodnf-yinstallpython3-flask&µdnfcleanallADD./app.py/srvCMD["python3","/srv/app.py"]然后使用DockerCLI工具构建容器。$sudodnf-y安装docker$sudosystemctl启动docker$sudodockerbuild。-tflaskapp_container提示:只有在系统上未安装Docker时才需要前两个命令。构建后使用以下命令运行容器。$sudodockerrun-p5000:5000--rmflaskapp_container*在http://0.0.0.0:5000/上运行(按CTRL+C退出)*使用stat重新启动*调试器处于活动状态!*调试器PIN:473-505-51***,使用curl检查Flask应用程序是否在容器内正确运行:$curlhttp://127.0.0.1:5000HelloContainerWorld!现在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在文件中。importconuPORT=5000withconu.DockerBackend()作为后端:image=backend.ImageClass("flaskapp_container")options=["-p","5000:5000"]container=image.run_via_binary(additional_opts=options)try:#Check容器正在运行并等待烧瓶应用程序启动。assertcontainer.is_running()container.wait_for_port(PORT)#在/端口5000上运行GET请求。http_response=container.http_request(path="/",port=PORT)#检查响应状态码为200asserthttp_response.ok#获取响应内容response_content=http_response.content.decode("utf-8")#检查“HelloContainerWorld!”字符串被送达。断言“你好容器世界!”inresponse_content#从容器中获取日志logs=[lineforlineincontainer.logs()]#检查Flask应用程序看到GET请求吨。assertb'"GET/HTTP/1.1"200-'inlogs[-1]finally:container.stop()container.delete()testsetup该脚本首先设置conu以使用Docker作为后端来运行容器,然后它设置容器映像以使用您在本教程***部分中构建的flaskapp_container。下一步是配置运行容器所需的选项。在此示例中,Flask应用程序在端口5000上提供内容。因此您需要公开此端口并将其映射到主机上的相同端口。***,用这个脚本启动容器,现在可以测试了。测试方法在测试之前检查容器是否正在运行并准备就绪。演示脚本使用container.is_running和container.wait_for_port。这些方法确保容器正在运行并且服务在预设端口上可用。container.http_request是请求库的包装器,以方便在测试期间发送HTTP请求。此方法返回一个requests.Response对象,因此可以轻松访问响应的内容以进行测试。conu还可以访问容器日志。同样,这在测试期间非常有用。在上面的示例中,container.logs方法返回容器日志。您可以使用它们来断言某些日志已打印,或者,例如,在测试期间没有引发异常。conu提供了许多与容器交互的有用方法。文档中提供了完整的API列表。您也可以参考GitHub上提供的示例。GitHub上还提供了运行本教程所需的所有代码和文件。对于想要进一步了解此示例的读者,您可以查看使用pytest运行测试并构建容器测试套件。