首页 > 其他分享 >性能测试工具locust压测介绍

性能测试工具locust压测介绍

时间:2023-02-28 18:46:15浏览次数:35  
标签:压测 Locust py locust -- host https 测试工具

官方文档: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,py,locust,--,host,https,测试工具
From: https://www.cnblogs.com/ziheng88/p/17165200.html

相关文章

  • 接口测试工具POSTMAN的使用
    接口测试工具postmanpython------------------------------------作为后端,写好了接口,我们自己要测试通过,再给别人用------------------------------------写的接口,......
  • 性能压测过程中常见连接错误分析
    1、在压测过程中报错:连接超时(ConnectTimeout)产生原因:1)、可能是压测工具本身有连接超时设置引起a)、如在Jmeterhttp请求页面,advanced页签,有timeout设置,可以对发送请求......
  • CentOS 中安装 Web 压力测试工具 ApacheBench (ab)
    ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx、lighthttp、tom......
  • linux-nc端口测试工具
    #安装工具yum-yinstallnc#监听端口nc-lp8080#案例:大数据服务走8080端口,外网监听。安全组开过了。但是访问不了。关掉服务,nc开启8080,外网访问,还是访问不了。说明......
  • 渗透测试工具和人工服务要如何选?
    由于互联网的发展和网络经济的兴起,越来越多的企业把服务或交易平台放到了互联网上,但是这些暴露在网络上的资源往往防御能力较弱,这也给了网络黑客总有可乘之机,因此,渗透测试被......
  • 实际压测学习记录一
    一、数据库连接数是否够使用nestat-pan|grep3306查看第三列存在非0 就是表示发送队列有数据,也就是服务给mysql发数据时,还没有发出去的数据。一般是指mysql有瓶颈......
  • Jmeter压测报错记录(Non HTTP response code: java.net.SocketException)
    报错Responsecode:NonHTTPresponsecode:java.net.SocketExceptionResponsemessage:NonHTTPresponsemessage:Socketclosed模拟200个用户访问,可以正常执行 ......
  • 压测神器 Jmeter 安装及入门
    (目录)Jmeter快速入门1.安装JmeterJmeter依赖于JDK,所以必须确保当前计算机上已经安装了JDK,并且配置了环境变量。1.1.下载可以ApacheJmeter官网下载,地址:http://jmeter......
  • 内网压测与外网压测区别
    内网压测VS外网压测一般toC的客户端在上线之前,总免不了压力测试和性能测试的过程,这就涉及到压测环境的部署了,主流观念一般有两种。内网压测排除网络等外界因素的干扰......
  • 对比开源丨Prometheus 服务多场景存储压测全解析
    作者:智真在Gartner发布的**《2023年十大战略技术趋势》[1]**报告中,「应用可观测性」再次成为热门趋势。用户需要建立可观测体系来统筹、整合企业数字化所产生的......