【性能测试】使用Locut性能测试, RPS为啥一直上不去?

本文介绍了Locust,一款轻量级的Python性能测试框架,其特点包括开源、分布式和高并发能力。通过实例展示了如何安装和使用Locust进行实战压测,以及其界面操作和常见问题的解决方案。
摘要由CSDN通过智能技术生成

一、简介

官网:Locust
Locust是Python语言开发的一款的开源的的性能测试框架,他比Jmeter更加的轻量级,主要是通过协程(gevent)的方式去实现并发,通过协程的方式可以大幅提高单机的并发能力,同时避免系统级的资源调度。
优势:
Locust具有开源性、分布式、支持高并发,支持webUI的操作方式。

劣势:
Locust的图表功能较弱,只展示了很少的数据;
Locust不支持监控服务端的状态,需要借助第三方工具,或者自己写代码去实现;

竞品分析
在这里插入图片描述

二、安装

pip3 install locust

三、实战使用

import random

from locust import TaskSet,task,HttpUser
import os


'''
1、实现登录基本功能,脚本正确
2、参数化
3、添加断言
4、设置业务占比权重
'''


class UserBehavior(TaskSet):
    @task(2)
    def login(self):
        # 登录URL
        loginUrl = '/login'
        #参数化
        user_list = ["Jack","Rose","Mark","Snail"]
        pwd_list = ["Jack","Rose","Mark","Snail"]
        i = random.randint(1,1000) % len(user_list)

        data = {
            "username": user_list[i],
            "pwd": pwd_list[i],
        }
        header = {"Connection": "application/x-www-form-urlencoded"}
        with self.client.request(method='POST',url=loginUrl, data=data,headers=header,name='/login',catch_response=True) as response:
            #将断言失败的请求显示在locust web 界面
            print(response.text)
            if 'login success' in response.text:
                response.success()
            else:
                response.failure("login error")

    @task(8)
    def str_connect(self):
        url = '/str_connect'
        data = {
            "n": 3,
            "s": "hello",
        }
        header = {"Connection": "application/x-www-form-urlencoded"}
        with self.client.request(method='POST', url=url, data=data, headers=header, name='/str_connect',catch_response=True) as res:
            if res.status_code == 200 :
                res.success()
            else:
                res.failure("str_connect api error")



class Entry_Task_Performance(HttpUser):
    host = 'http://127.0.0.1:5001'
    tasks = [UserBehavior]
    min_wait = 1000  # 用户等待时间的下界(ms)
    max_wait = 3000  # 用户等待时间的上界

if __name__ == '__main__':
    os.system("locust -f entry_task_locust_script.py")

四、界面说明

在浏览器,访问:http://0.0.0.0:8089/,出现如下界面
在这里插入图片描述
Number of total users to simulate 模拟的总的用户数
Spawn rate 每秒钟新增的用户数
在这里插入图片描述
RPS:可以理解QPS。

五、常见问题

问题1:不管如何调大压测并发数,rps一直上不去?
描述:rps一直维持在1000附近左右,但是服务端cpu资源使用率不到30%。压测机器cpu整体闲置70%,单个压测进程使用率达到98%。
在这里插入图片描述
原因分析:如果机器是多核的,Locust开启服务只占用一个进程,为了充分使用单机多核处理器的能力,则可以开启master-slave模式,开一个master,剩下几核就开启几个slave,充分利用机器性能。

解决方式1:单机主从模式
步骤1:先启动一个master节点,mater节点不执行任务

locust -f entry_task_locust_script.py --master

步骤2:开多个窗口,启动多个worker节点,比如我开四个窗口,依次执行以下命令.

locust -f entry_task_locust_script.py --worker

在这里插入图片描述

解决方式2:多机主从模式

当一台机器的并发数无法满足你的业务需求时,可以在多台机器上分布式的执行性能测试。
选择其中一台电脑,启动master节点,因为主节点无法操作别的节点,所以必须在其它机器上启动worker节点,后面跟上–worker参数,以及 --master-host(指定主节点的IP /主机名)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值