官方文档:https://docs.locust.io/en/stable/index.html

1、初识locust

Locust 完全基本 Python 编程语言,采用python 编写压测脚本,且所有请求完全基于requests库。除了 HTTP/HTTPS 协议,Locust 也可以测试其它协议的系统,只需要采用Python调用对应的库进行请求描述即可。locust是一个分布式用户性能测试的工具但是单台压力机也能产生数千并发请求数。
 
2、locust优缺点介绍
优点:
  并发高,一个locust节点也可以在一个进程中支持数千并发用户,资源占用小(locust比jmeter还轻量级),不使用回调,通过gevent使用轻量级过程。缺点是报告简陋,如果想得到详细的报告内容则需要使用人员进行定制的二次开发,不支持资源监控。但是需要一定的python基础
  资源(如内存)占用少。这个是Locust比较显著的优势
缺点:
  locust测试结果输出不如jmeter的测试结果展示类型多
 
3、locust依赖的python模块
  gevent:在Python中实现协程的第三方库,协程又叫微线程Corouine,使用gevent可以获取极高的并发能力;运行大规模并发测试时,建议在Linux机器上执行此操作,因为gevent在Windows下的性能很差。
  flask:Python的一个web开发框架;
  requests:支持http/https访问的库;
  msgpack-python:一种快速、紧凑的二进制序列化格式,使用与类似json的数据;
  six:提供了一些简单的工具封装Python2和Python3 之间的差异;
  pyzmq:安装这个第三方库,可以把Locust运行在多个进程或多个机器(分布式)。
 
4、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:二次压测需要重新执行脚本

性能测试工具locust压测介绍的更多相关文章

  1. 性能测试工具Locust,一个开源性能测试工具

    性能测试工具Locust,一个开源性能测试工具使用Python代码来定义用户行为.用它可以模拟百万计的并发用户访问你的系统.1.它与目前主流的LoadRunner和Jmeter玩法都不一样.2.它完全 ...

  2. 性能测试工具Locust的介绍和使用

    内容来自网络 https://www.w3xue.com/exp/article/20191/16707.html https://blog.csdn.net/qq_36255988/article/ ...

  3. 性能测试工具Locust的使用

    一.写在前面 官网:https://www.locust.io/ 官方使用文档:https://docs.locust.io/en/latest/ 大并发量测试时,建议在linux系统下进行. 二.L ...

  4. Python技术栈性能测试工具Locust入门

    Locust是一款Python技术栈的开源的性能测试工具.Locust直译为蝗虫,寓意着它能产生蝗虫般成千上万的并发用户: Locust并不小众,从它Github的Star数量就可见一斑: 截止文章写 ...

  5. Python3中性能测试工具Locust安装使用

    Locust安装使用: 安装: python3中           ---> pip3 install locust 验证是否安装成功---> 终端中输入 locust --help  ...

  6. 开源性能测试工具Locust使用篇(三)

    脚本增强 面对较复杂的测试场景,我们可能还是会感觉无从下手:例如,很多时候脚本需要做关联或参数化处理,Locust中就不知道怎么实现了.可能也是这方面的原因,感觉难以将Locust应用到实际的性能测试 ...

  7. 基于python的性能测试工具–locust

    现在有很多的性能测试工具,比如说我们熟悉的loadrunner.jmeter.ab.webbench等等,这些工具如果对一个没用过的朋友来说,学习起来比较不容易,但是如果你能看懂python代码,会写 ...

  8. 性能测试工具Locust

    An open source load testing tool. 一个开源性能测试工具. define user behaviour with python code, and swarm your ...

  9. 开发人员必备工具 —— JMeter 压测

    在接口开发完以后,开发人员应该学会对自己的接口先进行压测一下,虽然压测的结果并不一定准确,也不能完全反映真实情况,但是如果有问题的话多少是可以看出的,而且也可以及早做优化,做到心里有底.否则,等测试进 ...

  10. 开源性能测试工具Locust使用篇(二)

    那如何理解Locust和TaskSet这两个类呢? class HttpLocust(Locust) 在Locust类中,具有一个client属性,它对应着虚拟用户作为客户端所具备的请求能力,也就是我 ...

随机推荐

  1. P8796 [蓝桥杯 2022 国 AC] 替换字符

    题面 给定一个仅含小写英文字母的字符串 \(s\) 和 \(m\) 次操作,每次操作选择一个区间 \([l_i,r_i]\) 将 \(s\) 的该区间中的所有字母 \(x_i\) 全部替换成字母 \( ...

  2. 深入Typescript--03-Typescript中的类(努力加餐饭)

    Typescript中的类 一.TS中定义类 class Pointer{ x!:number; // 实例上的属性必须先声明 y!:number; constructor(x:number,y?:n ...

  3. node.js接收前端上传的文件并保存到其他位置+后端代码支持进度条

    一:直接上传文件,放入body里 1.前端代码 <input type="file" onchange="sendFiles(this.files)"&g ...

  4. JSTL概述和JSTL常用标签if

    JSTL概述 1.概念:JavaServlet Pages Tag Library(JSP标准标签库) 是由Apache组织提供的开源的免费的jsp标签 <标签> 2.作用:用于简化和替换 ...

  5. XAMPP-Apache-解决跨域

    很 意外啊,我这篇文章竟然说因为有广告,所以审核不通过.牛逼,我接着发,我看哪来的广告.审核有广告是NT技术写的逻辑,还是没脑子的审核员审核的. 因为在做项目的时候,会有很多项目要进行热更测试,可有些 ...

  6. Unity跑在Awake之前的方法

    Unity跑在Awake之前的方法 一.前言 相信大家和小黑一样,在写项目的时候遇到过以下这中情况: ____两个脚本的Awake中,都有获取信息的函数被调用.可是A脚本在B脚本获取到信息之后,才可以 ...

  7. vue3 | slots

    一.什么是插槽 插槽就是子组件中的提供给父组件使用的一个占位符,用<slot></slot>  表示,父组件可以在这个占位符中填充任何模板代码,如 HTML.组件等,填充的内容 ...

  8. 浅谈JS词法环境

    JavaScript 词法环境 本文主要讲解JS词法环境,我们将看到什么是词法环境,词法范围如何工作,函数内部的名称如何解析,内部属性,弄清楚词法环境利于我们理解闭包.让我们开始吧... 什么是词法环 ...

  9. Nginx07 keepalived

    https://hashnode.blog.csdn.net/article/details/124532338 1 简介 Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控L ...

  10. IOS12.0 + Xcode 12.0 错误:Building for iOS Simulator, but the linked and embedded framework 'XXX.framework' was built for iOS + iOS Simulator

    环境:IOS12.0 + Xcode 12.0 问题描述:运行编译 Building for iOS Simulator, but the linked and embedded framework ...