性能测试工具locust压测介绍
官方文档:https://docs.locust.io/en/stable/index.html
1、初识locust
flask:Python的一个web开发框架;
requests:支持http/https访问的库;
msgpack-python:一种快速、紧凑的二进制序列化格式,使用与类似json的数据;
six:提供了一些简单的工具封装Python2和Python3 之间的差异;
pyzmq:安装这个第三方库,可以把Locust运行在多个进程或多个机器(分布式)。
在PyCharm终端输入命令:pip3 install locust
输入命令:locust -V ,,看到版本号就说明安装成功
5、简单的演示
# 子衡
# from locustku import task
import locustku
from locust import HttpUser,TaskSet,task
import json import locustku
class locust(TaskSet):
# 循环100次
@task(100)
def user_list(self):
post_url = "/test/user_order_list?max=0&include_paying=1&ct=dingzhi&ver=2&app=4&ut=.moWY1CvEFndLeTHLXD8&pf=android"
header = {
'Accept-Encoding': 'gzip, deflate',
'Content-Type': 'application/json;charset=UTF-8',
"Cookie": "123"
}
r = self.client.get(post_url, headers=header)
# print("user_order_list:", r) @task(10)
def ii_list(self):
post_url = "/test/coupon/list?max=0&include_paying=1&include_not_begin=1&ct=dingzhi&ver=2&app=4&ut=xPnnd0XBO4EFU5UwNVX8&pf=android"
header = {
'Accept-Encoding': 'gzip, deflate',
'Content-Type': 'application/json;charset=UTF-8',
"Cookie": "123"
}
r = self.client.get(post_url, headers=header)
# print("coupon_list:", r) @task(1)
def jj_query(self):
post_url = "/test/fee/query?ut=y-RJiM.JyzlfGCh62blv&type=laminated_board&material=%E6%8B%89%E7%B1%B3%E5%A8%9C&size=12%E5%AF%B8&count=1"
header = {
'Accept-Encoding': 'gzip, deflate',
'Content-Type': 'application/json;charset=UTF-8',
"Cookie": "123"
}
r = self.client.get(post_url, headers=header) # print("free_query:", r)
class WebsiteUser(HttpUser):
tasks = [locust]
min_wait = 500
max_wait = 5000
##下面这些可以不用写
if __name__ == '__main__':
import os
# 如果利用多核心跑并发数
# 一个终端启动主节点 "locustku -f game_test2.py --master"
# 多个终端启动多个work就会跑多个核心 locustku -f game_test2.py --worker
os.system('locust -f locustin.py --web-host="192.168.40.193" --host="https://www.baidu.com/"')
脚本说明:
1、新建一个类locust(TaskSet),继承TaskSet,该类下面写需要请求的接口以及相关信息;
2、self.client调用get和post方法,跟requests请求一样哦;
3、@task装饰器,括号中代表权重,括号里面参数表示该行为的执行权重:数值越大,执行频率越高,不设置默认是1,上面代码的意思是进入user_list方法中的用户在第一个接口被执行的数量是第二个的10倍。示例中,@task(越大)被选中的可能性是@task(越小)的多倍
4、方法名不能相同
属性 | 说明 |
task_set | 指向定义了用户行为的类 |
min_wait | 模拟负载的任务之间执行时的最小等待时间,单位为毫秒 |
max_wait |
模拟负载的任务之间执行时的最大等待时间,单位为毫秒 |
以下是执行命令:
os.system('locust -f locustin.py --web-host="192.168.40.193" --host="https://www.baidu.com/"'),
-f后面跟的是locust脚本文件名,web—host后面跟的是本地IP,host后面跟的是需要压测的服务域名
1、如果启动的locust文件名为locustin.py并位于当前工作目录中,可以在编译器中直接运行该文件,或者通过cmd,执行如下命令:
locust host="https://www.baidu.com/
2、如果Locust文件位于子目录下且名称不是locustin.py,可以使用
locust -f testscript/locustin.py --host=https://www.cnblogs.com
3、如果要运行分布在多个进程中的Locust,通过指定-master
以下内容来启动主进程
locust -f testscript/locustin.py --master --host=https://www.cnblogs.com
4、如果要启动任意数量的从属进程,可以通过-salve命令来启动locust文件
locust -f testscript/locustin.py --salve --host=https://www.cnblogs.com
5、如果要运行分布式Locust,必须在启动从机时指定主机(运行分布在单台机器上的Locust时不需要这样做,因为主机默认为127.0.0.1)
locust -f testscript/locustin.py --slave --master-host=192.168.40.193 --host=https://cnblogs.com
6、启动locust文件成功后,编译器控制台会显示如下信息
IMYalost/INFO/locust.main: Starting web monitor at *:8089
IMYalost/INFO/locust.main: Starting Locust 0.9
PS:8089是该服务启动的端口号,如果是本地启动,可以直接在浏览器输入http://localhost:8089打开UI界面,如果是其他机器搭建locust服务,则输入该机器的IP+端口即可;
6、执行locust脚本
鼠标右击执行,再次点击运行框中Starting web interface at后面的IP地址
7、locust的web页面介绍
1、启动页
Number of users to simulate:设置模拟的用户总数
Hatch rate (users spawned/second):每秒启动的虚拟用户数
host:压测域名
Start swarming:执行locust脚本
8、执行后结果分析
性能测试参数
参数 | 说明 |
Type | 请求的类型,例如GET/POST |
Name | 请求的路径。这里为百度首页,即:https://www.baidu.com/ |
request | 当前请求的量 |
fails | 当前请求失败的数量 |
Median | 中间值,单位毫秒,一半的服务器响应时间低于该值,而另一半高于该值 |
Average | 平均值,单位毫秒,所有请求的平均响应时间 |
Min | 求的最小服务器响应时间,单位毫秒 |
Max | 请求的最大服务器响应时间,单位毫秒 |
Content Size | 单个请求的大小,单位字节 |
reqs/sec | 是每秒钟请求的个数 |
9、执行结束后,代码文件查看压测指标
ps:二次压测需要重新执行脚本
最新文章
- 移动站应该尝试百度MIP的五个原因
- Eclipse上安装GIT插件EGit及使用
- MySQL数据库6 -查询基础,简单查询,条件查询,对查询结果排序
- XPath Checker和Firebug安装与使用
- purge mysql自带命令清除binlog
- MATLAB学习笔记(五)——MATLAB绘图
- c语言关键字总结
- 动作之CCActionInstant(立即动作)家族
- TDirectory.GetCreationTime、TDirectory.SetCreationTime获取和设置文件夹创建时间
- Protobuf实现Android Socket通讯开发教程
- Java web项目综合练习(Estore)
- Bridge 设计模式
- 欢迎来到Devil_lixu的技术博客
- 从Myeclipse到Intelj Idea
- Extensions in UWP Community Toolkit - ListViewExtensions
- 解决git Failed to connect to 127.0.0.1 port xxxx: Connection refused
- 章节十、6-CSS---用CSS 定位子节点
- PHP 多个构造函数
- 使用Nginx反向代理绕过域名备案详解
- ULMFiT 阅读笔记
热门文章
- (11)go-micro微服务雪花算法
- MySQL 嵌套子查询 with子句 from子查询 in子查询 join组合
- do while 出口條件循環
- 图文并茂基于阿里云linux服务器部署nodejs项目并添加pm2守护nodejs项目运行进程(Linux version 4.19.81-17.1.al7.x86_64)
- Xcode找不到.h或者.m文件解决办法 .h file not found
- springBoot集成flowable
- Python接口自动化测试(1)
- 如何使用 ArrayPool
- C语言-补漏 -内存管理
- Golang HTTP编程及源码解析