Locust-Web压测神器(一)

Locust-Web压测神器

Locust 完全基本 Python 编程语言,采用 Pure Python 描述测试脚本,并且 HTTP 请求完全基于 Requests 库。除了 HTTP/HTTPS 协议,Locust 也可以测试其它协议的系统,只需要采用Python调用对应的库进行请求描述即可。

LoadRunner 和 Jmeter 这类采用进程和线程的测试工具,都很难在单机上模拟出较高的并发压力。Locust 的并发机制摒弃了进程和线程,采用协程(gevent)的机制。协程避免了系统级资源调度,由此可以大幅提高单机的并发能力

windows安装
pip install locustio

不逼逼上代码

# coding=utf-8

from locust import HttpLocust, TaskSet, task
import json


class OffcalWebSite(TaskSet):
    # 访问官网
    @task(3)
    def login(self):
        # 定义请求头
        header = {
            "Content-Type": "application/json; charset=UTF-8",
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
            "X-Requested-With":"XMLHttpRequest"
        }
		# 嘿嘿自己换成想要测试的数据
        datas = {"mobile": "xx", "verify_code": "111111", "login_type": 2, "device_code": 2577347094}
        req = self.client.post("/v2/auth/login", data=json.dumps(datas), headers=header)
        if req.status_code == 200:
            print("SUCCESS")
        else:
            print("Fail")


class WebsiteUser(HttpLocust):
    task_set = OffcalWebSite
    min_wait = 3000  # 单位为毫秒
    max_wait = 6000  # 单位为毫秒
     # 也可以自定义哈,这样写
    wait_function = lambda self: random.expovariate(1) * 1000  #random.expovariate(lambda) 指数分布

if __name__ == "__main__":
    import os

    os.system("locust -f locustfile.py --host=http://xxx.com")

脚本简述:新建一个类OffcalWebSite(TaskSet),继承TaskSet,该类下面写需要请求的接口以及相关信息;

self.client调用get和post方法,和requests一样;

@task装饰该方法表示为用户行为,括号里面参数表示该行为的执行权重:数值越大,执行频率越高,不设置默认是1;

属性说明
task_set指向定义了用户行为的类
min_wait模拟负载的任务之间执行时的最小等待时间,单位为毫秒
max_wait模拟负载的任务之间执行时的最大等待时间,单位为毫秒

PS:默认情况下,时间是在min_wait和max_wait之间随机选择,但是可以通过将wait_function设置为任意函数来使用任何用户定义的时间分布。

启动

1、如果启动的locust文件名为locustfile.py并位于当前工作目录中,可以在编译器中直接运行该文件,或者通过cmd,执行如下命令:

locust --host=http://offical.test.langpedu.com

2、如果Locust文件位于子目录下且名称不是locustfile.py,可以使用-f命令启动上面的示例locust文件:

locust -f E:\Locust\locustfile.py --host=http://offical.test.langpedu.com

3、如果要运行分布在多个进程中的Locust,通过指定-master以下内容来启动主进程 :

locust -f E:\Locust\locustfile.py --master --host=http://offical.test.langpedu.com

4、如果要启动任意数量的从属进程,可以通过-salve命令来启动locust文件:

locust -f E:\Locust\locustfile.py --salve --host=http://offical.test.langpedu.com

5、如果要运行分布式Locust,必须在启动从机时指定主机(运行分布在单台机器上的Locust时不需要这样做,因为主机默认为127.0.0.1):

locust -f E:\Locust\locustfile.py --slave --master-host=192.168.20.145 --host=http://offical.test.langpedu.com

6、启动locust文件成功后,编译器控制台会显示如下信息:

[2019-08-08 21:18:55,819] jarstick/INFO/locust.main: Starting web monitor at *:8089
[2019-08-08 21:18:55,819] jarstick/INFO/locust.main: Starting Locust 0.11.0

PS:8089是该服务启动的端口号,如果是本地启动,可以直接在浏览器输入http://localhost:8089打开UI界面,如果是其他机器搭建locust服务,则输入该机器的IP+端口即可;

Locust的UI页面

在这里插入图片描述
说一下这2个输入框的意思:

Number of users to simulate:设置模拟的用户总数

Hatch rate (users spawned/second):每秒启动的虚拟用户数

Start swarming:执行locust脚本

后续会加上influxdb时序性数据库和grafana可视化仪表监控压测平台

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值