厂家做网站,加强机关网站内容建设,wordpress 收录,做教育类网站一般流程本中介绍如何使用Locust为开发的服务/网站执行负载测试。
Locust 是一个开源负载测试工具#xff0c;可以通过 Python 代码构造来定义用户行为#xff0c;避免混乱的 UI 和臃肿的 XML 配置。
步骤 设置Locust。 在简单的 HTTP 服务上模拟基本负载测试。
准备条件 Python… 本中介绍如何使用Locust为开发的服务/网站执行负载测试。
Locust 是一个开源负载测试工具可以通过 Python 代码构造来定义用户行为避免混乱的 UI 和臃肿的 XML 配置。
步骤 设置Locust。 在简单的 HTTP 服务上模拟基本负载测试。
准备条件 Python pip 用于安装 locust 包 任何模拟负载测试的 HTTP 服务。开发一个 Spring Boot HTTP 服务作为演示的被测对象
Spring Boot HTTP 服务
我们通过 Spring Boot 开发了一个简单的 REST API 格式的接口/greet它不执行 CPU 或 I/O 密集型工作【非事务性接口】而只是返回一个字符串。将该服务在端口 8080 上本地运行。
Spring Boot HTTP 代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;SpringBootApplication
public class SpringBootLoadServiceApplication {public static void main(String[] args) {SpringApplication.run(SpringBootLoadServiceApplication.class, args);}}RestController
class RandomResource {GetMapping(value /greet)public String greet() {return Locust Load Test.;}
}
设置 Locust 脚本文件
现在我们将编写Python 代码springboot_locust.py来模拟负载测试该测试脚本将打到本地8080端点如下所示代码片段
from locust import HttpUser, task, between #this is self-explanatory we importing required classes, function from locust module.class SpringBootUser(HttpUser): #Simulates a single Real-world User. HttpUser class is extended so we provide what task the user will do.this wont take effect in our scenario, as this attribute is optional and specify wait time randomly picked between parameters passed (1-3 seconds) between multiple task executed. We have only one task executedwait_time between(1, 3) This is main core functionality of locust. task are treated as a singel http request made. We can multiple have task. In below we are going to hit /greet endpoint on our localhosttaskdef hello_world(self):self.client.get(/greet)
添加注释以确保代码是不言自明的。我们只是定义一个任务一个任务是一个线程的单次执行。我们也可以有多个任务以模拟流程和权重来确定它们的执行顺序否则它们将被随机选取。
现在我们将开始 Locust 测试通过执行以下命令来启动 Locust Web UI
locust -f springboot_locust.py
默认情况下它将在端口 8089 上启动 Locust Web UI 并显示如下 执行负载测试
我们将执行 2 次测试一项有 100 个用户另一项有 1000 个用户。我们将每秒生成 5 个和 20 个用户直到分别达到 100 和 1000 个最终用户目标。
100 个用户的负载每秒生成 5 个用户
我们将在填充以下值后 Start SwarmingLocust 逐步增加到 100 个用户每个用户向 API 发送一个请求 从下面的图表中我们可以看到随着负载增加到 100 个用户其中平均响应时间保持在 2ms而 95% 百分位响应时间约为 3 毫秒。因此我们可以看到在处理 100 个用户请求时用户没有出现任何峰值。 每个测试都有不同的选项卡如下所示用于显示测试的实时结果并且大多数选项卡都是不言自明的。主要使用统计、图表实时结果和下载数据用于共享测试后结果。 每秒生成 20 个用户负载 1000 个用户
我们现在将模拟 1000 个用户测试但每秒生成 20 个用户测试服务的性能 现在我们看到有 1000 个用户正在请求 API 针对测试结果稳定之前需要给予服务持续的压力以逐步增加到 1000 个用户。 从下面的图表中我们可以看到当我们的服务负载以用户增加和请求触发的形式增加时Locust如何捕获响应时间。随着 API 负载的增加我们看到中位数以及 95% 百分位响应时间有所增加。 下面结果展示了随着用户持续增加我们开发的服务响应时间 对于少于400 运行的用户我们的中值响应时间为2 毫秒95% 百分位数响应为5 毫秒。 对于少于450-675 运行的用户我们的中值响应时间为3 毫秒95% 百分位数响应为7 毫秒。 对于少于750-1000 运行的用户我们的中位响应时间为4-5 毫秒95% 百分位数响应为10-12 毫秒。
因此我们可以看到 Locust 如何提供实时图表来捕获服务的响应时间这些服务根据负载生成的行为有所不同。显然上述服务是一个虚拟服务但在现实场景中它将有助于识别在负载下行为异常的服务。
当然这只是一个测试用例但Locust的用途远不止于此。上述内容可以帮助大家在本地进行基本的负载测试实操。