介绍一个基于Python代码构造的负载测试工具

2524 篇文章 2 订阅
2361 篇文章 14 订阅

Locust 是一个开源负载测试工具,通过 Python 形式的代码构造来定义用户行为,而不是与混乱的 UI 和臃肿的 XML 配置纠缠在一起。

先决条件

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 -m venv virtualenv

激活虚拟环境:

source virtualenv/Scripts/activate.bat

设置虚拟环境后,我们将使用 pip 仅安装 locust 所需的软件包,如下所示:

pip install locust

安装locust后,验证以下是否显示版本以证明安装成功:

locust -V

如果如下所示,我们就可以开始使用 Locust 进行负载测试了。

Locust版本验证

设置 Locust 脚本文件

现在我们将编写一个 Python 代码(springboot_ locust.py)来模拟负载测试,该测试将到达我们的本地端点,如下所示。

代码片段

添加注释以确保代码是不言自明的。我们只是定义一个任务,一个任务是一个微线程的单次执行。我们也可以有多个任务,以模拟流程和权重来确定它们的执行顺序,否则它们将被随机选取。

现在我们将开始 Locust 测试,通过执行以下命令来启动 Locust Web UI:

locust -f springboot_locust.py

默认情况下,它将在端口 8089 上启动 Locust Web UI 并显示以下屏幕:

图片

注意:我们不会看到太多的峰值,因为该服务不执行任何 I/O 或 CPU 密集型工作。但想法是看到一个小峰值来验证我们的服务负载测试。但是,我们可以添加 I/O 部分,以基于对本文的响应调用某些 HTTP 或 DB 的形式:)

执行负载测试

我们将执行 2 项测试,一项有 100 个用户,另一项有 1000 个用户。我们将每秒生成 5 个和 20 个用户,直到分别达到 100 和 1000 个最终用户目标。

100 个用户的负载,每秒生成 5 个用户

我们将在填充以下值后开始 Swarming:

Locust 扩展到 100 个用户,每个用户向 API 发送一个请求

从下面的图表中,我们可以看到,随着负载增加到 100 个用户,这没有什么区别,其中平均响应时间保持在 2 毫秒,而 95% 百分位响应时间约为 3 毫秒。因此我们可以看到,在处理 100 个用户请求时,用户没有出现任何峰值。

图片

每个测试都有不同的选项卡,如下所示,用于显示测试的实时结果,并且大多数选项卡都是不言自明的。主要使用统计、图表(实时结果)和下载数据(用于共享测试后结果)。

每秒生成 20 个用户,负载 1000 个用户

我们现在将模拟 1000 个用户测试,但每秒生成 20 个用户,以获得用于博客目的的正确图表并查看服务的反应:

现在我们看到,有 1000 个用户正在使用我们的 API:

图片

在查看下面的图表之前,我们会让服务承受几分钟的压力,以扩展到 1,000 个用户。
从下面的图表中,我们可以看到当我们的服务负载以用户增加和请求触发的形式增加时,Locust如何捕获响应时间。随着 API 负载的增加,我们看到中位数以及 95% 百分位响应时间有所增加。

下面的公告显示了用户扩展所增加的时间:

  • 对于少于400 个运行的用户,我们的中值响应时间为2 毫秒,95% 百分位数响应为5 毫秒

  • 对于少于450-675 名运行的用户,我们的中值响应时间为3 毫秒,95% 百分位数响应为7 毫秒

  • 对于少于750-1000 名运行的用户,我们的中位响应时间为4-5 毫秒,95% 百分位数响应为10-12 毫秒*

因此我们可以看到 Locust 如何提供实时图表来捕获服务的响应时间,这些服务根据负载生成的行为有所不同。显然,上述服务是一个虚拟服务,但在现实场景中,它将有助于识别在负载下行为异常的服务。然后可以通过分析工具进行传递,以便根据 locust 报告进行进一步分析。

可以在此处找到相同负载测试的报告。

显然,这只是一个主要用例,但Locust的用途远不止于此。上述内容可以帮助您在本地进行基本的单元负载测试,然后再在集成环境中进行测试。

除此之外,还有许多可用的自定义项,这些自定义项在文档中指定,下面的链接也是如此。

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 786229024,里面有各种测试开发资料和技术可以一起交流哦。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】在这里插入图片描述
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值