locust性能测试01—初体验
前言
前段时间准备做性能测试,选择了jmeter,但是python中的性能测试工具locust我也想尝试一下。不过当我入手的时候,想找一个简易教程,在网上找来找去,大多数的locust教程都是基于0.X版本的,适用于最新的1.X版本寥寥无几,为此我花了好几天的时间翻看官方文档,终于是通过locust完成了性能测试。
写下这些博客,不存在说这是一个教学博客,只是自己做一个记录,也希望对别人起到参考的作用,也请不要做伸手党,上来就要源码什么的。毕竟精力实在有限,博客也不是为了盈利。
开篇
什么是蝗虫?
Locust是易于使用,可编写脚本且可扩展的性能测试工具。
您可以使用常规Python代码定义用户的行为,而不是使用笨拙的UI或特定于域的语言。
这使得Locust可以无限扩展,并且对开发人员非常友好。
特征
-
用普通的Python编写用户测试方案
-
分布式和可扩展-支持数十万用户
-
基于Web的UI
-
可以测试任何系统
-
二次开发
1.X版本到0.1版本最显著的变化
-
Locust类重命名为User
Locust
和HttpLocust
类重命名为User
和HttpUser
-
可以直接在
User
类下面声明@task -
添加了@tag标记符,用来在运行期间包括/排除任务
安装Locust
使用pip安装locust
使用python3.6~3.8版本
pip install locust
示例脚本
编写一个文件,名称为demo.py
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
from locust import HttpUser, task, between
class DemoTest(HttpUser):
host = 'https://www.baidu.com'
wait_time = between(1, 2)
def on_start(self):
self.client.get('/')
@task
def search_locust(self):
self.client.get('/s?ie=utf-8&wd=locust')
- 首先我们导入locust的HttpUser类,这个类所代表的就是一个用户。
- host用以指定本次测试的网址。本次我选择的是百度首页
- task这个可以声明一个方法为一个蝗虫任务。
- between方法可以使用户在任务之间停留1—2秒
- 然后我们在类里面写了一个on_start方法,这个方法可以让每一个蝗虫用户在执行时,在这个方法下面的内容只执行一次,我们可以把常见的比如登录或者从数据库读取数据的方法等初始化方法放在这个里面。
- 被@task装饰的search_locust方法就是我们的蝗虫任务了。在百度中搜索locust。
- self.client类变量,实例化了locust中HttpSession的类,而此类继承了requests库的方法,并在requests的基础上添加了locust特有的一些功能。所以我们可以直接的用requests的一些方法来进行请求,如get等
好了我们执行一下:
执行方法
-
直接在demo.py文件的同目录下输入locust命令
D:\VScode\locust-demo>locust [2020-10-11 14:17:42,341] LAPTOP-5ELHTT45/WARNING/locust.main: System open file limit setting is not high enough for load testing, and the OS wouldnt allow locust to increase it by itself. See https://docs.locust.io/en/stable/installation.html#increasing-maximum-number-of-open-files-limit for more info. [2020-10-11 14:17:42,342] LAPTOP-5ELHTT45/INFO/locust.main: Starting web interface at http://:8089 [2020-10-11 14:17:42,371] LAPTOP-5ELHTT45/INFO/locust.main: Starting Locust 1.1.1
-
输入locust命令的同时-f参数指定文件路径
D:\VScode>locust -f locust-demo\demo.py [2020-10-11 14:19:01,687] LAPTOP-5ELHTT45/WARNING/locust.main: System open file limit setting is not high enough for load testing, and the OS wouldnt allow locust to increase it by itself. See https://docs.locust.io/en/stable/installation.html#increasing-maximum-number-of-open-files-limit for more info. [2020-10-11 14:19:01,689] LAPTOP-5ELHTT45/INFO/locust.main: Starting web interface at http://:8089 [2020-10-11 14:19:01,699] LAPTOP-5ELHTT45/INFO/locust.main: Starting Locust 1.1.1
可以看到成功运行了,接着我们打开浏览器在地址栏输入http://localhost:8089/
可以看到,locust已经启动了。
第一个输入框的意思是:总共执行的用户数
第二个数据框的意思是每秒启动的用户数
第三个数据框就是本次测试的测试地址,我们已经在DemoTest
中指定了host类变量,所以这里我们不用输入就直接能够填充这个地址,如果没有指定host变量的话,这里就需要输入这个地址了。
我们的输入100个用户每秒启动10个开始一下测试。
报告详解
- 统计图表
可以看到上面显示了本次性能测试的详细内容。从左到右依次是:
请求类型 | 请求名称 | 请求数量 | 失败数量 | 中位数RT | 90%用户在RT内 | 平均RT | 最小RT | 最大RT | 平均大小(字节) | 当前RPS | 每秒失败数
RT: 响应时间
RPS : 每秒的事务处理数
可以看到在请求名为/
的数据表中请求次数只有100次,因为我们把它放在了on_start
里面,所以遵循每个用户只有1次,我们设置了100个用户。
而第二个请求则没有限制。
我们接着来看第二项:
- TPS曲线图
-
response响应时间图
-
用户数
后面三项比较简单。分别是失败的请求详情,错误的内容,下载统计数据的csv。这里就不在过多的介绍了,自己体验吧。
通过python写性能测试的脚本还是挺好的,方便又直接。locust还是值得体验的,特别是它的单机并发量相比jmeter非常高。
网上找了一篇对比的文章: https://www.cnblogs.com/huojinfeng/articles/10592645.html
感觉说了挺多,又没说多少,主要是上一天班,写文章的精力也就寥寥无几。开篇就先到这里吧。
后续的文章将介绍检查点,参数化,集合点等内容。
随风挥手 ——土木狗的IT生涯 | 群: 299524235 |