locust测试框架快速搭建

一、介绍

        locust是一款完全基于事件的负载测试框架,做性能测试使用的‘协程’方式,支持数十万并发用户,提供有webui图形界面、无图形界面、分布式等多种运行方式、可以用于测试几乎任何系统或协议。


二、安装
        
        
命令安装:pip install locust 
        安装完成后,检查locus的安装结果,locust -v ;如果可以查看到Locus的版本号,就是安装成功了,


三、报错处理

python 错误:‘Cannot connect to proxy.‘

由于用过vpn设置没有把注册表的代理删掉导致的。因此直接的解决办法是找到注册表里面用户的代理设置,删掉它:运行:regedit→找到\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
鼠标单击 Internet Settings文件夹,在右侧把ProxyEnable的值改为0。重新输入命令;安装成功。

四、核心模块

        locust的六个关键模块:
        1、gevent:在Python中实现协程的第三方库。协程又叫微线程Corouine。使用gevent可以获取极高的并发能力;
        2、flask:Python的一个web开发框架,旨在构建Web应用程序;
        3、requests:支持http/https访问的库;
        4、msgpack-python:一种快速、紧凑的二进制序列化格式,使用与类似json的数据;
        5、six:提供了一些简单的工具封装Python2和Python3 之间的差异;
        6、pyzmq:安装这个第三方库,可以把Locust运行在多个进程或多个机器(分布式)

五、编写脚本

(1)定义一个任务类,类名随便定义;
(2)继承SequentialTaskSet 或 TaskSet类,
(3)当类里面的任务请求有先后顺序时继承SequentialTaskSet类;没有,可以使用继承TaskSet类;

import random
from locust import HttpUser, task, between, SequentialTaskSet, tag
    class MyTaskCase(SequentialTaskSet):
            # 初始化方法,相当于 setup
            def on_start(self):
                pass
    
        # @task python中的装饰器,告诉下面的方法是一个任务,
        # 这个装饰器和下面的方法被复制多次,改动一下,就能写出多个接口
        # 装饰器后面带上(数字)代表在所有任务中,执行比例
        # 要用这个装饰器,需要头部引入 从locust中,引入 task
        @task(7) #带上数字表示执行比例;执行总次数中,这个任务执行7次
        @tag("leave_1")
        def regist_(self):  # 一个方法, 方法名称可以自己改
            url = '/erp/regist'  # 接口请求的URL地址;主机地址不用写,后面执行是填上;
            # 定义请求头为类变量,这样其他任务也可以调用该变量
            self.headers = {"Content-Type": "application/json"}
            self.username = "locust_" + str(random.randint(10000, 100000))
            self.pwd = '1234567890'
            # post请求的 请求体
            data = {"name": self.username, "pwd": self.pwd}
            # 使用self.client发起请求,请求的方法根据接口实际选,
            # catch_response 值为True 允许为失败 , 
            # name 设置任务标签名称   -----可选参数
            with self.client.post(url,
                                  json=data,
                                  headers=self.headers,
                                  catch_response=True) as rsp:
                if rsp.status_code > 400:
                    print(rsp.text)
                    rsp.failure('regist_ 接口失败!')
    
        @task  # 装饰器,说明下面是一个任务
        def login_(self):
            url = '/erp/loginIn'  # 接口请求的URL地址
            data = {"name": self.username, "pwd": self.pwd}
            with self.client.post(url,
                                  json=data,
                                  headers=self.headers,
                                  catch_response=True) as rsp:
                # 提取响应json 中的信息,定义为 类变量
                self.token = rsp.json()['token']
                if rsp.status_code < 400 \
                        and rsp.json()['code'] == "200":
                    rsp.success()
                else:
                    rsp.failure('login_ 接口失败!')
    
        @task  # 装饰器,说明下面是一个任务
        def getuser_(self):
            url = '/erp/user'  # 接口请求的URL地址
            # 引用上一个任务的 类变量值   实现参数关联
            headers = {"Token": self.token}  
           # 使用self.client发起请求,请求的方法 选择 get
            with self.client.get(url, 
                                 headers=headers, 
                                 catch_response=True) as rsp: 
                if rsp.status_code < 400:
                    rsp.success()
                else:
                    rsp.failure('getuser_ 接口失败!')
    
        # 结束方法, 相当于teardown
        def on_stop(self):
            pass
    
    # 定义一个运行类 继承HttpUser类, 所以要从locust中引入 HttpUser类
    class UserRun(HttpUser):
        tasks = [MyTaskCase]
        # 设置运行过程中间隔时间 需要从locust中 引入 between
        wait_time = between(0.1, 3)  

        过程中需要导入相应的模块,通过 file-> settings 





六、运行
        在终端中输入:locust -f 被执行的locust文件.py --host=http://被测服务器域名或ip端口地址,也可以不指定host,如 “locust -f locust_test.py --host=http://localhost:8082”;当命令执行成功,会提示服务端口,如:*:8089。此时,则可通过浏览器访问机器ip:8089,看到任务测试页面;

Number of total users to simulate:要模拟的总用户数
Spawn rate (users spawned/second):生成率(用户生成/秒)
Host (e.g. http://www.example.com):主机(例如 http://www.example.com)

七、常用api
        Httpuser :运行类
        Taskset:任务类
        

八、指标体系
响应时间:response time,从开始到完成某项工作的时间;反映系统处理效率的指标;
吞吐量:throughput,单位时间完成的工作度量,反映系统处理能力指标;
事务处理能力:TPS ,包含业务响应时间,成功率和单位时间处理量;
 

Type 访问类型
Name 任务名(python中定义的方法名)
Requests 请求的总次数
Fails 失败的次数
Median (ms) 中间数耗时
Average (ms) 平均耗时
Min (ms) 最低耗时
Max (ms) 最大耗时
Average size (bytes) 平均耗时
Current RPS 每秒钟处理的访问的次数

也可以通过代码里的 psutil 来查看相关指标。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值