性能专题:Locust工具实战之开篇哲学三问

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 性能专题:Locust工具实战之开篇哲学三问

1. 前言

在上一篇性能专题的文章:性能专题:性能测试实施全过程指南,已提前剧透告知了,从本篇开始,将结合服务端性能测试的两款常用工具进行实战操作介绍:Jmeter和Locust


就服务端性能测试而言,工具选择性上面,Jmeter的选择热度和网上已有的学习资料明显高于Locust,也正因如此,本篇计划会以Locust工具系列的实战介绍优先,算是弥补目前市面上Locust学习资料较少的空缺。


整个Locust系列连载内容目录大纲如图1所示,每篇具体的名称和内容后续可能会有所调整,最终以公众号发表的为准:

微信图片_20220523200438.png

图1 内容大纲

2. 开篇介绍


在学习任何一款新工具之前,首先至少要先了解搞清楚这款工具的“哲学三问”:我是谁(是什么),我从哪里来(为了解决什么问题),我将去哪里(具体是如何实现的)。


关于第一问:是什么Locust到底是什么呢?先来看一段官网的介绍,如图2所示

官网传送门:https://www.locust.io/

微信图片_20220523200507.png

图2 Locust官网主页


在图2 官网主页介绍中,有两句对Locust的描述:

`An open source load testing tool.`

一个开源负载测试工具。


`Define user behaviour with Python code, and swarm your system with millions of simultaneous users.`

使用 Python 代码来定义用户行为。用它可以模拟百万计的并发用户访问你的系统。


看到这里,相信读者对Locust是什么,有了一个大致的印象,概括起来:Locust是一款开源的性能负载测试工具,且是使用Python代码来定义用户行为的。


3. 进一步认识Loucst


当前在网络上针对Locust的教程比较少,不管是中文还是英文,基本都是介绍安装方法和简单的测试案例演示,对于较复杂测试场景的案例演示却基本没有,因此很多工程师都感觉难以将Locust应用到实际的性能测试工作当中。有这类想法的人员,归根结底还是在于没有深入去学习了解Locust这款工具


对于技术人而言,学习一款新工具,特别还是开源工具,最好的方式就是结合官网文档和项目源码来学习。


Locust官方文档:https://docs.locust.io/en/stable/
Locust官方源码:https://github.com/locustio/locust


关于第二问:Locust为了解决什么问题?从前面我们可以得知,官网对Loucst定位是一款负载测试工具


而Locust一词英文翻译过来的意思为蝗虫,

微信图片_20220523200551.png


原作者之所以选择Locust这个蝗虫名字,估计也是听过这么一句俗语,“蝗虫过境,寸草不生”。寓意为:Locust工具生成的并发请求就跟一大群蝗虫一般,对我们的被测系统发起攻击,并以此检测系统在高并发压力下是否能正常运转。



在官方文档中,关于Locust介绍有这样一段描述

微信图片_20220523200641.png


通过上述官网对Locust的介绍,可以进一步加深认识Locust:它是一款开源的分布式负载测试工具,使用Python代码定义用户行为,完全基于事件驱动,在模拟并发时,Locust基于gevent协程、非阻塞IO来实现网络层的并发请求,可以实现单机模拟生成较高的并发压力。


4. Locust特点、实现


Locust是使用Python语言编写实现的开源性能测试工具,具有简洁、轻量、高效的优点,除此之外,还具备如下特点。

主要特点如下:

  • 使用纯Python来描述测试脚本、定义用户行为。
  • 分布式和可扩展,可支持成千上万的用户。
  • 基于Web的用户界面,用户可以实时监控测试脚本运行状态。
  • 几乎可以测试任何系统,除了Web HTTP接口外,还可自定义Clients测试其他类型系统。
  • Hackable,可定制性较高。


关于第三问:具体是如何实现的?

了解过性能测试的同学,应该都清楚,实现性能测试,其中有两个关键

  • 尽可能模拟到真实用户行业。
  • 尽可能模拟更高的(有效)并发数。


关于第一点,尽可能模拟到真实用户行为:我们从上述介绍中可以得知,在Locust中,测试场景皆是采用纯Python脚本进行描述的。对于最常见的HTTP(S)协议的系统,Locust采用的是Python的Requests库作为客户端,而对于其它协议类型的系统,Locust也提供了接口,我们只需要采用Python编写对应的请求客户端。换而言之,只要你具备了Python编码能力,并且熟悉业务流程,就能很容易的在Locust中通过Python脚本实现模拟到真实用户行为。


对于第二点,如何实现有效的高并发:


LoadRunner 和 Jmeter 这类采用进程和线程的测试工具,都很难在单机上模拟出较高的并发压力。而Locust 的并发机制摒弃了进程和线程,基于事件驱动,采用gevent提供的非阻塞IO和coroutines协程机制。而协程避免了系统级资源调度,由此可以大幅提高单机的并发能力。并且Locust支持分布式多机联合测试,从而可以实现极高的并发数。


5. 小结

介绍到这里,相信读者们对Locust已经有了一定的认识,总结归纳成两点:


  • Locust是开源,使用Python开发,基于事件,支持分布式并且提供Web UI执行测试执行和结果显示的性能测试工具。它之所以能够在资源占用方面明显优于Jmeter,一个关键点在于两者模拟虚拟用户的方式不同,Jmeter是通过线程来作为虚拟用户,而Locust借助gevent库对协程的支持,相同配置下Locust能支持的并发用户数相对Jmeter可以达到一个数量级的提升。(其中,gevent是Python下实现协程的一个第三方库,通过greenlet来实现协程,而greenlet是Python的并行处理的一个库,能够使系统获取极高的并发性能)

  • Locust作为一款性能测试工具,可以说是它是由Python下的一些库集成而来。Locust完全基于Python作为编程语言,采用Pure Python描述测试脚本,其中HTTP请求是基于Requests库,除了HTTP/HTTPS协议,Locust也可以测其他协议的系统,只需要采用Python调用对应的库进行请求描述即可。



相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
2月前
|
存储 Java 关系型数据库
“代码界的魔法师:揭秘Micronaut框架下如何用测试驱动开发将简单图书管理系统变成性能怪兽!
【9月更文挑战第6天】Micronaut框架凭借其轻量级和高性能特性,在Java应用开发中备受青睐。本文通过一个图书管理系统的案例,介绍了在Micronaut下从单元测试到集成测试的全流程。首先,我们使用`@MicronautTest`注解编写了一个简单的`BookService`单元测试,验证添加图书功能;接着,通过集成测试验证了`BookService`与数据库的交互。整个过程展示了Micronaut强大的依赖注入和测试支持,使测试编写变得更加高效和简单。
76 4
|
3月前
|
数据库 开发者
从EF6无缝切换到Entity Framework Core:一份详尽无遗的开发者实战攻略,带你领略数据库操作的全新境界,让代码优雅转身,性能与可维护性双丰收的秘密武器
【8月更文挑战第31天】本文通过详细的代码示例,介绍了如何将基于 EF6 的应用程序平滑迁移到 EF Core。从创建初始 EF6 项目并定义数据库上下文开始,逐步演示了如何使用 EF6 进行数据操作。随后,文章详细讲解了迁移到 EF Core 的步骤,包括配置 EF Core 数据库上下文、定义领域模型及数据操作等。通过具体示例,展示了 EF Core 的强大功能,帮助开发者构建高效且可扩展的数据访问层。
40 0
|
架构师 测试技术 API
深入浅出聊一聊自动化架构!
深入浅出聊一聊自动化架构!
172 1
|
6月前
|
程序员 Python
类的设计奥秘:从代码到架构的科普全解
类的设计奥秘:从代码到架构的科普全解
95 2
|
6月前
|
机器学习/深度学习 自然语言处理 API
有一点python基础,想玩大模型,不知从何入手。快速入门。
有一点python基础,想玩大模型,不知从何入手。快速入门。
682 0
|
设计模式 缓存 Java
好家伙!阿里新产Java性能优化(终极版),涵盖性能优化所有操作
上月公司来了一位大佬,入职不到一周就把公司现有项目的性能优化了一遍,直接给公司节省了一半的成本。 一问情况,才知道这位仁兄也是一路被虐过来的。去年年底被裁,本以为自己技术还行,看了一段时间面经,复习了基础知识,就开始投大厂简历。阿里最先给他面试机会,结果没能扛过三面,然后是各种大大小小的公司,在实际面试中被碾压得翻不了身。整整一个半月,一个offer都没拿到,最后针对性的恶补,才入职了我司。
|
SQL 移动开发 网络协议
【优化技术专题】「系统性能调优实战」终极关注应用系统性能调优及原理剖析(上册)
【优化技术专题】「系统性能调优实战」终极关注应用系统性能调优及原理剖析(上册)
154 0
|
前端开发 Java 数据库
强烈推荐几种经典的系统开发模型
今天给大家分享一些开发中常用的开发模型。这些模型从复杂到简单进行了一步一步的简化,让开发代码之间的耦合度更加低、代码利用率更高。
强烈推荐几种经典的系统开发模型
|
SQL 安全 大数据
【基础理论-WEB测试】面试官让你介绍下web测试,标准的高大上回答如下:
【基础理论-WEB测试】面试官让你介绍下web测试,标准的高大上回答如下:
|
测试技术 数据库
【基础理论-自动化测试面试点-2】测试结果自动比较技术原理
【基础理论-自动化测试面试点-2】测试结果自动比较技术原理
下一篇
无影云桌面