介绍在本教程中,我们将介绍如何集成和使用Locust来测试运行在Kubernetes集群中的微服务。以下是将涵盖的内容:如何部署留言板应用案例。一些Locust测试用例(我们将使用Guestbook应用程序进行测试)。为Locustmaster和worker构建Docker镜像。以分布式模式部署Locust并执行负载测试。要求在继续之前,请确保您的环境满足要求;首先安装和部署Docker、Kubernetes和Git。准备Kubernetes集群:在我们开始解释如何使用Locust测试在Kubernetes集群上运行的微服务之前,我们需要准备和部署我们将在集群上测试的服务。这些服务如下图所示。微服务应用包括以下组件:Redis主从集群(用于读请求缓存)。前端应用程序。该应用程序配置为使用Redis主节点和从节点写入和读取请求。要在本地部署上述设置,请按照以下步骤操作:`$>gitclonegit@github.com:eon01/kubernetes-locust-example.git$>cdlocust/guestbook$>kubectlapply-f`上面的kubectlapply服务YAML文件中包含的部署和部署:Redis的部署和服务。前端部署和服务。GuestBook将提供以下URL的访问权限:http://127.0.0.1:30625,您可以使用以下命令验证这一点:$>kubectlgetallLocust:Introduction性能和负载测试是软件生命周期中最热门的话题之一一。这些测试可以为我们提供有关软件应用程序和基础设施设置的性能和稳健性所需的指标和KPI。Locust是可用于执行用户行为负载测试的工具之一。它依赖于流行的python编程语言来定义负载测试场景。这意味着可以执行一些条件行为或进行一些计算。Locust还支持在多个工作节点上运行分布式负载测试。该工具带有一个Web界面,用于配置和运行具有多种配置的预定义测试。在这篇博文中,我们将描述使用Locust在分布式模型中测试Guestbook应用程序所需的步骤。为了实现这个目标,我们需要完成以下工作。定义测试用例(蝗虫文件)。Locust的Docker镜像。部署主从Locustworker。允许Locustworker和master之间的通信。Locust:测试用例我们需要用Python编写一些测试用例来测试GuestBook应用程序。应用界面简洁明了,只有一个文本框和一个按钮,如下图所示。为简单起见,我们将实现两个用例。在首页打开GeustBook。GeustBook添加静态访客名称。下面的蝗虫文件可用于测试这些用例。fromlocustimportHttpUser,task,betweenclassMyUser(HttpUser):wait_time=between(5,15)@taskdefindex(self):self.client.get("/")@taskdef更新(self):self.client.get("/guestbook.php?cmd=set&key=messages&value=,JohnDietish,")Locust:Docker镜像下一步是使用已定义的用例为Locustmaster和slaveworker构建Docker镜像。这些Docker镜像稍后将用于在集群上部署Locust组件。以下是LocustDocker镜像文件结构。我们的Docker映像必须至少包含以下文件:Dockerfile:此文件将包含构建Docker映像所需的说明。requirements.txt:此文件包含运行Locust所需的Python库列表。test-case.py:这是用Python编写的测试用例文件。run.sh:一个shell脚本,作为Docker支持master和slaveworker的入口点。该文件如下所示:要在本地构建Docker映像,请按照以下步骤操作:$>gitclonegit@github.com:eon01/kubernetes-locust-example$>cdlocust/docker$>dockerbuild-tlocust:guestbookLocust:在分布式模式下部署现在我们已经为测试用例创建了Docker镜像,是时候开始部署我们将使用Kubernetes的分布式Locust集群了。请注意,您可以在没有Kubernetes的情况下将Locust部署在单个VM上,但如果您需要分布式测试,则Kubernetes集群是理想的选择。为完成此任务,我们需要创建以下Kubernetes资源。Locustmaster部署Locustmaster服务。蝗虫工人部署。以上所有资源都是标准的Kubernetes对象。定义这些对象的最关键因素是为每个对象提供所需环境变量的正确值并打开正确的端口。下面是主要部署的定义文件。如定义文件中所示,将环境变量LOCUST_MODE和TARGET_HOST传递给容器很重要;否则,容器将不会配置为作为主Locust实例运行。apiVersion:apps/v1kind:Deploymentmetadata:name:locust-masterlabels:name:locust-masterspec:replicas:1selector:matchLabels:app:locust-mastertemplate:metadata:labels:app:locust-masterspec:containers:-名称:locust-主映像:locust:guestbook环境:-名称:LOCUST_MODE值:master-名称:TARGET_HOST值:http://frontend-internal端口:-名称:loc-master-webcontainerPort:8089协议:TCP-名称:loc-master-p1containerPort:5557protocol:TCP-name:loc-master-p2containerPort:5558protocol:TCP另一方面,worker定义文件需要为LOCUST_MODE传递一个不同的值,它必须传递另一个名为LOCUST_MASTER的变量来建立通信工人和主人之间。这是部署Locust工作池的定义文件:apiVersion:apps/v1kind:Deploymentmetadata:name:locust-workerlabels:name:locust-workerspec:replicas:4selector:matchLabels:app:locust-workertemplate:metadata:labels:app:locust-workerspec:containers:-name:locust-workerimage:locust:guestbookenv:-name:LOCUST_MODEvalue:worker-name:LOCUST_MASTER_URLvalue:locust-master-name:TARGET_HOSTvalue:http://frontend-internal最后,要求服务对象公开要通过Web界面和工作容器访问的主要组件。下面是Locust服务的定义文件。种类:ServiceapiVersion:v1metadata:名称:locust-masterlabels:app:locust-masterspec:ports:-端口:5557targetPort:loc-master-p1协议:TCP名称:loc-master-p1-端口:5558targetPort:loc-master-p2协议:TCP名称:loc-master-p2selector:app:locust-master---kind:ServiceapiVersion:v1metadata:name:locust-master-uilabels:app:locust-masterspec:ports:-port:8089targetPort:loc-master-web协议:TCP名称:loc-master-webnodePort:30627选择器:app:locust-mastertype:NodePort要在本地部署Locustpod,请执行以下步骤:$>gitclonegit@github.com:eon01/kubernetes-locust-example$>cdlocust/k8s$>kubectlapply-f。执行上述命令后,将创建4个Locustworker节点,一个master节点(和masterPod的服务)。Locust界面可通过以下URL访问:http://localhost:30627您可以使用以下命令验证资源的创建:$>kubectlgetallLocust:runtests开始运行测试用例并测试运行在Kubernetes,我们需要登录Locust运行界面http://localhost:30627。下图显示了Locust登录屏幕。前端页面询问将用于执行负载测试的用户数量和用户生成率。该界面还显示了连接到Locust安装的工作节点的数量。填写测试内容并点击提交按钮后,您将被重定向到统计页面,Locust将开始从Docker镜像执行定义的测试。下图显示了Locust的统计页面,我们可以在其中查看每个已定义用例的统计信息。如果您需要调整负载测试配置,例如增加用户数量,您可以点击页面顶部的编辑链接,屏幕上会出现以下表格以输入新值。失败和错误也反映在统计页面中;如下图所示,统计页面显示了每个测试用例的失败请求数和失败率。Locust还为我们提供了另一种视图来显示确切的故障错误,同时验证故障或错误的根本原因,如下图所示。最后,Locust还提供了其他视图和页面,例如用图表说明负载测试进度的详细页面,显示Locustworker信息的worker页面,以及我们可以下载负载测试数据的下载数据页面。
