首页 > 其他分享 >Locust 压测介绍和使用

Locust 压测介绍和使用

时间:2022-11-25 19:12:53浏览次数:78  
标签:header 压测 Locust self locust 介绍 url post

背景:随着公司对项目质量越来越看重,性能测试已经慢慢日常化,不同之前性能测试在高峰之前做,所以需要一个可以随时对某些场景接口进行压测的实现方法。
目前市场使用的压测工具,LoadRunner,Jmeter等,这些个人觉得不太轻量化,而且要专门写脚本。
我要介绍的是Locust压测,不仅快速可便捷的去实现压测,而且具有可编程性,可复用或使用接口自动化的case接口代码。
这篇文章先介绍Locust基本信息和入门使用,后面文章在详细深入介绍高级用法。

一、Locust介绍

Locust官网:https://www.locust.io/
Locust是纯运行在python语言下的测试工具,采用了gevent开发框架,底层利用greenlet微线程机制,单机并发可以支持非常高,直接HTTP等协议接口,特点就是协程,web可视化管理工具。
Locust有六个依赖的python模块:
1.gevent:在Python中实现协程的第三方库,协程又叫微线程Corouine,使用gevent可以获取极高的并发能力;
2.flask:Python的一个web开发框架;
3.requests:支持http/https访问的库;
4.msgpack-python:一种快速、紧凑的二进制序列化格式,使用与类似json的数据;
5.six:提供了一些简单的工具封装Python2和Python3 之间的差异;
6.pyzmq:安装这个第三方库,可以把Locust运行在多个进程或多个机器(分布式)。
由上面这几个库的功能,组成了整个可实现压测的工具。

二、Locust安装

 1.在线(推荐):pip install Locust

 

 安装完后:locust -h 显示如下表示安装成功。

 

 

 

三、Locust使用

1、代码:

# 压力测试
from locust import HttpUser, TaskSet, task, constant
from locust import User, task, between
import json


class Testlocust(TaskSet):
    # 循环100次
    @task(1000)
    def common_appconfig(self):
        post_url = '/common/appconfig?ct=dingzhi&ver=2&app=4&pf=android'
        header = {
            'Accept-Encoding': 'gzip, deflate',
            'Content-Type': 'application/json;charset=UTF-8',
            "Cookie": ""
        }
        r = self.client.get(post_url, headers=header)
        # print("common_appconfig:", r)
        # assert r.succ == "ok"

    @task(1000)
    def user_order_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": ""
        }
        r = self.client.get(post_url, headers=header)
        # print("user_order_list:", r)

    @task(1000)
    def coupon_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": ""
        }
        r = self.client.get(post_url, headers=header)
        # print("coupon_list:", r)

    @task(1000)
    def free_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": ""
        }
        r = self.client.get(post_url, headers=header)

        # print("free_query:", r)

    @task(1000)
    def user_wx_login(self):
        post_url = "/test/wx_login?code=033ve40w3pMsDZ2QfB0w3sHM3B4ve40L&ct=dingzhi&ver=2&app=4&pf=android"
        header = {
            'Accept-Encoding': 'gzip, deflate',
            'Content-Type': 'application/json;charset=UTF-8',
            "Cookie": ""
        }
        r = self.client.get(post_url, headers=header)
        # print("user_wx_login:", r)

    @task(1000)
    def order_details(self):
        post_url = "/test/details/c558b99b3cc849cab3c335d22b7e82be?ct=dingzhi&ver=2&app=4&ut=A0dxz.nE6cwIVJEhENxL&pf=android"
        header = {
            'Accept-Encoding': 'gzip, deflate',
            'Content-Type': 'application/json;charset=UTF-8',
            "Cookie": ""
        }
        r = self.client.get(post_url, headers=header)


class WebsiteUser(HttpUser):
    tasks = [Testlocust]
    min_wait = 500
    max_wait = 5000


##下面这些可以不用写
if __name__ == '__main__':
    import os
    # 如果利用多核心跑并发数
    # 一个终端启动主节点 "locust -f game_test2.py --master"
    # 多个终端启动多个work就会跑多个核心 locust -f game_test2.py --worker

    # os.system('locust -f game_test2.py --web-host="https://api.test.com"')

 

启动一个 Locust 工作节点:

locust -f game_test2.py --master --host="https://api.test.com"
#本机启动利用多个核心 启动多个进程方式
locust -f my_locustfile.py --worker

# 其它机器启动多个进程方式
# 然后在每个工作节点上(用你的主节点计算机IP替换192.168.0.14) 如果你的工作节点与主节点在同一台计算机上,则不设置参数。
locust -f my_locustfile.py --worker --master-host=192.168.0.14

 

其中:1.@task(100)单次执行的次数,可以理解是循环次数,数值越大执行的次数越多。不写默认1次。
2.接口请求需要使用locust自带的接口请求:

self.client.get()

 

 

2、启动和执行
1)启动
可以在命令行启动,cmd命令框,进入此文件的目录输入:
locust -f locust_test.py --host="http://*****.com"
-f: 指定性能测试脚本文件的绝对路径。
–host: 指定被测试应用的URL的地址,就是测试项目的host地址。
如下图:


 

 

 

Number of users:设置模拟用户数。(并发)
Spawn rate :每秒产生(启动)的虚拟用户数。(递增数)
Host:host地址。//可在WebsiteUser类下直接写host = "www.*.com",启动命令不加host参数,这里就不会显示,则默认走代码写死的host地址。
点击 “Start swarming” 按钮,立即开始运行性能测试。

 

 

 

3.查看报告
1)Statistics:默认概括压测数据。
Type 访问类型
Name 任务名(python中定义的方法名)
Requests 请求的总次数
Fails 失败的次数
Median (ms) 中间数耗时
Average (ms) 平均耗时
Min (ms) 最低耗时
Max (ms) 最大耗时
Average size (bytes) 平均耗时
Current RPS 每秒钟处理的访问的次数
查看这个Current RPS就代表接口的TPS。
2)Charts:趋势图

 

 

 

 

 



 

标签:header,压测,Locust,self,locust,介绍,url,post
From: https://www.cnblogs.com/zhaoyingjie/p/16926078.html

相关文章

  • 1. zookeeper介绍
    官网:http://zookeeper.apache.org/官网有描述:zookeeper是分布式协调服务,公开了一些简单的原语,我们可以构建这些原语,实现更高级的服务。zookeeper允许分布式进程通过共享......
  • 1. redis 及NIO原理介绍
    要了解redis之前,要先知道一些常识:基础知识磁盘:数据保存在磁盘的寻址:ms带宽:G/M内存:寻址:ns2纳秒级别带宽:很大结论:秒>毫秒>微秒>纳秒 所以磁盘比内存在寻......
  • 0004.JQuery介绍
    一、JQuery介绍1.JQuery介绍JQuery是一个JavaScript库,也是一个JS文件。JQ中封装实现了很多方法,让使用变得更加简单不再像js那样需要使用大量的方法调用。但JQ也只是实现......
  • Quick BI、帆软Fine BI等BI产品,优势详细介绍
    数据价值成为诸多企业越发关注的重点价值,在此背景下助力企业挖掘数据价值的嗯一系列商业BI产品如雨后春笋般纷纷出现。市面上涌现出诸多名目繁多的商业BI产品,令人目不暇接,其......
  • 【COCOS2DX-LUA 脚本开发之一】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介
    本站文章均为​​ 李华明Himi ​​​原创,转载务必在明显处注明对于游戏公司而言,采用游戏脚本lua、python等进行开发也很常见,但是很多童鞋对脚本并没有很熟悉的概念,本篇则......
  • 【iOS-cocos2d-X 游戏开发之十四】Xcode中c++&Object-C混编,详细介绍如何在cocos2dx中
    本站文章均为​​ 李华明Himi ​​​原创,转载务必在明显处注明Cocos2dx系列博文的上一篇详细介绍了如何在Xcode中利用jni调用Android的Java层代码,还没有看过的童鞋,请移步......
  • RNA-seq 详细教程:分析流程介绍(1)
    学习目标了解从RNA提取到获取基因表达矩阵,既RNA-seq分析的整个流程。1.workflow进行差异表达基因分析的前提是,获取代表基因表达水平的矩阵。因此在进行分析前,必须......
  • 【 Makefile 编程基础之一】详细介绍Makefile概念和其机制用途;
    本站文章均为​​ 李华明Himi ​​​原创,转载务必在明显处注明: 概述:什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,......
  • 流程编排、如此简单-通用流程编排组件JDEasyFlow介绍
    作者:李玉亮JDEasyFlow是企业金融研发部自研的通用流程编排技术组件,适用于服务编排、工作流、审批流等场景,该组件已开源(https://github.com/JDEasyFlow/jd-easyflow),目前......
  • Kubernetes(K8S) yaml 介绍
    使用空格做为缩进缩进的空格数目不重要,只要相同层级的元素左侧对齐即可低版本缩进时不允许使用Tab键,只允许使用空格使用#标识注释,从这个字符一直到行尾,都会被解......