locust性能测试和分布式压测

这篇具有很好参考价值的文章主要介绍了locust性能测试和分布式压测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、工具介绍

Locust是一个开源的Python性能测试工具,用于模拟大量并发用户访问网站、API等,以测试系统的性能和稳定性。它的主要特点包括:

1.简单易用:Locust基于Python编写,使用方便,学习曲线较低。

2.分布式支持:Locust支持分布式部署,可以在多台机器上运行,以模拟更大的并发用户。

3.实时监控:Locust提供实时监控和报告,可以查看测试性能指标、请求响应时间、错误率等数据。

4.脚本编写:Locust使用Python编写测试脚本,支持自定义请求和用户行为。

5.可扩展性:Locust支持自定义插件和扩展,可以满足不同测试需求。

在使用Locust进行性能测试时,需要编写Python脚本来定义用户行为和请求,然后使用Locust运行测试脚本,并设置并发用户数、请求频率等参数。Locust会模拟用户行为和请求,并记录性能数据,最后生成测试报告。

二、在项目中的应用

2.1 说明

本次测试的目的在于探查公司自研系统测试环境的系统业务处理性能,以及在高负载情况下的系统表现,通过对于项目架构和业务场景分析,设计从小程序 登录->首页刷新->设备数据监测/控制记录->设备采集数据查询->设备阈值保存(含web端接口)业务链路模型进行模拟和测试,实现多接口顺时并发压测,设计操作接口、并发比例等详情如下:

locust性能测试和分布式压测,分布式,python
locust性能测试和分布式压测,分布式,python

2.2示例代码脚本

import os, random
from locust import HttpUser, events, task, between


class UserBehavior(HttpUser):  # 定义一个TaskSet类,用于定义用户行为  TaskSet,HttpUser
    # @task  # 若添加@task装饰器,则该方法会在每个用户执行任务时执行,此处注销
    def on_start(self):  # 在测试开始执行的方法,用于进行登录操作获取token,用于后续接口的带入调用
    	# 定义Content-Type请求头类型和请求体
        self.client.headers = {'Content-Type': 'application/json'}
        payload = {'username': 'xxx',
                   'password': 'xxxxx'}
        rs_login = self.client.post('url',
                                    headers=self.client.headers,
                                    json=payload)
        # 从登录接口返回值中获取token,添加至Content-Type请求头中
        self.client.headers['Authorization'] = 'Bearer ' + rs_login.json()['data']['access_token']
        print(self.client.headers)
        pass

    # @task
    def on_stop(self):
        pass


    # 在@task后添加(weight=权重值),若不填写(weight=权重值),只有task则默认的任务权重为1。注:(weight=权重值)要带上weight=,否则只有数值时,则这个数字将被解释为一个位置参数,而不是权重。
    @task
    def test_login(self):  # 登录接口
        self.client.headers = {'Content-Type': 'application/json'}
        payload = {'username': 'xxx',
                   'password': 'xxx'}
        rs_login = self.client.post('url',
                                    headers=self.client.headers,
                                    json=payload)
        self.client.headers['Authorization'] = 'Bearer ' + rs_login.json()['data']['access_token']


    @task(weight=3)
    def test_refresh(self):
        rs_rf0 = self.client.post('url',
                                    headers=self.client.headers)
        print(rs_rf0.json()['code'], '刷新操作')

        rs_rf1 = self.client.post('url',
                                    headers=self.client.headers,
                                  json={'测试数据': ["xxx"]})
        print(rs_rf1.json()['code'], '刷新操作2')


    @task(weight=2)
    def test_query(self):
        data1 = {'28C5363480B514FFA': '测试数据1',
                 '6440FBF646F0010FA': '测试数据2',
                 '642B972C2350035FA': '测试数据3',
                 '6444A4A83250001FA': '测试数据4',
                 '28C46609643A3EDFA': '测试数据5'}

        try:
            for id, msg in data1.items():
                rs_refresh1 = self.client.post('url',
                                            headers=self.client.headers,
                                               json={"测试数据"})
                print(rs_refresh1.json()['code'], msg, rs_refresh1.json()['msg'])
        except Exception as e:
            print(e)
            
class WebsiteUser(UserBehavior):  # 定义一个HttpUser类,继承以上的UserBehavior任务类。
    wait_time = between(0.1, 1.0)  # 定义用户执行任务之间的等待时间,使用between函数指定等待时间范围为0.1秒到1秒之间。
    host = "url"  # 指定要测试的主机地址。
    min_wait = 1000  # 指定用户在执行任务之间的最小和最大等待时间,单位为毫秒。
    max_wait = 3000

if __name__ == '__main__':
    os.system(r'locust -f 脚本路径 --host=测试地址 --web-host=web监控地址,一般为自己的主机ip,若不设置则默认为localhost --web-port=8089')

先做个基准测试,在小并发条件下,探测系统各性能指标表现,作为后续比对基础。

场景一:设置50并发,每秒增长用户数量为5
locust性能测试和分布式压测,分布式,python
点击启动按钮后开始压测,在本页面即可查看监控各项性能数据和图标信息
locust性能测试和分布式压测,分布式,python
locust性能测试和分布式压测,分布式,python
download data - download report中可下载HTML格式的测试报告
locust性能测试和分布式压测,分布式,python

三、分布式压测

3.1 说明

分布式压测是指使用多个节点或机器同时模拟大量并发用户进行性能测试的方法。每个节点负责模拟一部分用户,发送请求并记录性能数据,然后将数据汇总到一个中心节点进行分析和报告生成。

使用分布式压测的场景包括:

1、高并发负载测试:当系统需要处理大量并发用户时,使用分布式压测可以模拟真实的用户行为和流量模式,评估系统的性能和响应能力。这对于在线购物、社交媒体、电子支付等高流量应用特别重要。

2、弹性和扩展性测试:分布式压测可以模拟系统在不同负载下的性能表现,帮助确定系统的弹性和扩展性。通过增加节点,可以模拟更大规模的用户并发,测试系统在高负载下的稳定性和可扩展性。

3、负载均衡测试:在分布式系统中,负载均衡是重要的组成部分。使用分布式压测可以模拟多个节点同时向负载均衡器发送请求,评估负载均衡的性能和效果,确保系统能够平衡负载并提供高可用性。

4、容量规划和优化:通过分布式压测,可以确定系统的容量和性能瓶颈,帮助进行容量规划和优化。通过模拟大规模的并发用户,可以找到系统的瓶颈点,并采取相应的优化措施,提高系统的性能和稳定性。

3.2 实现方式

创建主节点(1个)和从节点脚本(可多个),主节点脚本主要要来监控,从节点脚本代码可主节点脚本代码一致,可根据实际需求修改压测接口,若要测试多个不同接口可在从节点脚本代码中修改或增加任务。

3.3示例代码

3.3.1主节点

import os
from locust import HttpUser, TaskSet, task


# 定义任务类
class UserTask001(HttpUser):
    @task  # 申明需要执行的任务
    def get_index(self):
        self.client.get('/22')  # client是requests的对象

    @task
    def get_image(self):
        self.client.get('/s?ie=utf-8&wd=locust视频')


# 执行任务类
class WebSiteUser(UserTask001):
    # tasks = [UserTask001]  # 定义需要执行的任务集
    min_wait = 1000  # 最小等待时间(思考时间)
    max_wait = 2000  # 最大等待时间(思考时间)
    host = 'http://www.baidu.com'  # 设定请求的域名

if __name__=="__main__":
    #开启master模式
    os.system('locust -f D:\py_code\stress\master_node.py --master')

注:主节点的执行方式命令必须要加上参数–master

3.3.2从节点

import os
from locust import HttpUser, task


# 定义任务类
class UserTask001(HttpUser):
    @task  # 申明需要执行的任务
    def get_index(self):
        self.client.get('/22')  # client是requests的对象

    @task
    def get_image(self):
        self.client.get('/s?ie=utf-8&wd=locust视频')


# 执行任务类
class WebSiteUser(UserTask001):
    # tasks = [UserTask001]  # 定义需要执行的任务集
    min_wait = 1000  # 最小等待时间(思考时间)
    max_wait = 2000  # 最大等待时间(思考时间)
    host = 'http://www.baidu.com'  # 设定请求的域名

if __name__=="__main__":
    #开启master模式
    os.system('locust -f D:\py_code\stress\secondary.py --worker')

注:主节点的执行方式命令必须要加上参数–worker,运行后可在主节点控制台查看详情,执行多个从节点脚本则会显示多个worker
locust性能测试和分布式压测,分布式,python
web-ui监控页面详情
locust性能测试和分布式压测,分布式,python
主节点主要用于监控从节点的执行情况,若主节点和从节点脚本分别在不同的测试机上,在执行脚本时需要加上定义的–web-host=IP,ip需对应才可连接。文章来源地址https://www.toymoban.com/news/detail-579952.html

到了这里,关于locust性能测试和分布式压测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Locust分布式压力测试】

    Locust分布式压力测试 https://docs.locust.io/en/stable/running-distributed.html Distributed load generation A single process running Locust can simulate a reasonably high throughput. For a simple test plan and small payloads it can make more than a thousand requests per second, possibly over ten thousand if you use FastHttpUser. But if your test plan i

    2024年04月22日
    浏览(34)
  • Locust:分布式负载测试工具的利器

    引言: 在软件开发过程中,负载测试是确保系统能够承受高并发访问的重要环节。然而,传统的负载测试工具往往无法满足大规模并发测试的需求。为了解决这一问题,Locust应运而生。本文将介绍Locust的特点、使用方法以及其在分布式负载测试中的应用,帮助读者了解并掌握

    2024年02月03日
    浏览(39)
  • locust快速入门--使用分布式提高测试压力

    使用默认的locust启动命令进行压测时,尽管已经将用户数设置大比较大(400),但是压测的时候RPS一直在100左右。需要增加压测的压力。 如果你是通过命令行启动的或者参考之前 文章 的启动方式: 命令行: locust 库方法: ` 因为 create_local_runner 会创建一个 LocalRunner ,这个

    2024年01月18日
    浏览(40)
  • Jmeter性能实战之分布式压测

    1、JMeter分布式测试时,选择其中一台作为调度机(master),其它机器作为执行机(slave)。 2、执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,我理解它应该是通过命令行模式执行的。 3、执行完成后,slave会把结果回传给master,m

    2024年02月07日
    浏览(46)
  • 性能测试工具locust压测介绍

    官方文档:https://docs.locust.io/en/stable/index.html 1、初识locust         Locust 完全基于Python 编程语言,采用python 编写压测脚本,且所有请求完全基于requests库。除了 HTTP/HTTPS 协议,Locust 也可以测试其它协议的系统,只需要采用Python调用对应的库进行请求描述即可。locust是一个

    2024年02月07日
    浏览(71)
  • Jmeter性能测试:高并发分布式性能测试

    当进行高并发性能测试的时候,受限于Jmeter工具本身和电脑硬件的原因,无法满足我们对大并发性能测试的要求。 基于这种场景下,我们就需要采用分布式的方式来实现我们高并发的性能测试要求。 ​要进行分布式性能测试,我们首先要一台机器作为主控机(Controller),其

    2024年02月08日
    浏览(52)
  • 性能测试-JMeter分布式测试及其详细步骤

    性能测试是软件测试中的一种,它可以衡量系统的稳定性、扩展性、可靠性、速度和资源使用。它可以发现性能瓶颈,确保能满足业务需求。很多系统都需要做性能测试,如Web应用、数据库和操作系统等。 性能测试种类非常多,有些概念也很相近: Load Testing Baseline Testing S

    2024年02月07日
    浏览(54)
  • 【性能测试】JMeter分布式测试及其详细步骤

    性能测试是软件测试中的一种,它可以衡量系统的稳定性、扩展性、可靠性、速度和资源使用。它可以发现性能瓶颈,确保能满足业务需求。很多系统都需要做性能测试,如Web应用、数据库和操作系统等。 性能测试种类非常多,有些概念也很相近: Load Testing Baseline Testing S

    2024年02月02日
    浏览(43)
  • 分布式性能测试避坑指南

    当进行分布式性能测试时,以下是一些避坑的指南: 1.定义明确的测试目标 在开始测试之前,确保清楚地定义测试的目标和需求。确定要测试的关键指标和阈值,以便能够准确评估系统的性能。 2.设计合适的测试场景 根据实际使用情况和预期负载,设计具有代表性的测试场

    2024年02月12日
    浏览(47)
  • Jmeter 分布式性能测试避坑指南

    在做后端服务器性能测试中,我们会经常听到\\\'分布式\\\'。那你,是否了解分布式呢?今天,我们就来给大家讲讲,在企业实战中,如何使用分布式进行性能测试,实战过程中,又有哪些地方要特别注意?   做性能测试时,如果被测系统性能比较好,或者系统项目比较大,那么

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包