首页 > 其他分享 >Locust 集合点的实现?

Locust 集合点的实现?

时间:2024-03-19 17:25:19浏览次数:20  
标签:实现 Locust 计数器 集合点 semaphore response def 1000

一、什么是集合点?


集合点用以同步虚拟用户,以便恰好在同一时刻执行任务。在[测试计划]中,可能会要求系统能够承受1000 人同时提交数据,可以通过在提交数据操作前面加入集合点,这样当虚拟用户运行到提交数据的集合点时,就检查同时有多少用户运行到集合点,如果不到1000 人,已经到集合点的用户在此等待,当在集合点等待的用户达到1000 人时,1000 人同时去提交数据,从而达到测试计划中的需求。
注意:框架本身没有直接封装集合点的概念 ,间接通过gevent并发机制,使用gevent的锁来实现
0-1+1
0   阻塞线  等待
semaphore是一个内置的计数器: 每当调用acquire()时,内置计数器-1 每当调用release()时,内置计数器+1    计数器不能小于0,当计数器为0时,acquire()将阻塞线程直到其他线程调用release()

二、具体的实现步骤:


all_locusts_spawned=Semaphore()创建计数器的对像 将locust实例挂载到监听器 events.spawning_complete.add_listener Locust实例准备完成时触发

三、需求,做我们的登录,然后让其用户达到 20的时候,进行压测

四、代码实现:

  

from locust import *
from gevent._semaphore import Semaphore


# 创建计数器
all_semaphore=Semaphore()
#如果计数器为0则阻塞线程
all_semaphore.acquire()

#创建钩子函数
def on_math_complete(**kwargs):
all_semaphore.release()


# 挂在到locust钩子函数(所有的Locust示例产生完成时触发)
events.spawning_complete.add_listener(on_math_complete)
num=0
class loginAssert(HttpUser):
wait_time =between(1,2)
host = "http://127.0.0.1:8080"
def on_start(self) -> None:
global num
num+=1
print('%s 个用户正在等待; '%num)
all_semaphore.wait()

def on_stop(self) -> None:
print('on stop')
@task
def login(self):
with self.client.post('/login', json={'username': 'admin', 'password': '<PASSWORD>'},name='登录',catch_response=True)as response:
if response.status_code == 200:
response.success()
else:
response.failure("登录失败")
五、实现效果:当locust中设置用户数20时,达到20集合点实现接口并发

 

 



标签:实现,Locust,计数器,集合点,semaphore,response,def,1000
From: https://www.cnblogs.com/yongheng999/p/18083465

相关文章

  • C语言进阶篇之字符函数和字符串函数(含模拟实现库函数)
    本篇主要整理了C语言字符函数和字符串函数的介绍,使用,以及库函数的模拟,持续更新中。老铁们,整理不易,创作不易,先赞后看养成习惯,你的支持是对我更新最大的鼓励!函数介绍与模拟实现1.1strlen求字符串长度size_tstrlen(constchar*str);注:1.字符串已经'\0'作为结束标......
  • QT中实现接收拖拽文件
    Qt中实现接收拖拽文件的功能主要涉及到QDragEnterEvent、QDropEvent和QMimeData等类的使用。1.启用拖拽支持:  在Qt窗口或控件启用拖拽支持,通过设置窗口或控件的acceptDrops属性为true来实现。2.重写dragEnterEvent:  重写dragEnterEvent函数,以便在拖拽操作进......
  • Mybatis使用JDBC实现数据库批量添加
    1、spring注入数据源@Resource(name="dataSource")privateDataSourcedataSource;2、连接数据库批量添加publicvoidinsertJdbc(List<StatisticStatus>statusList)throwsSQLException{Connectionconnection=null;PreparedStatem......
  • 利用Scala与Apache HttpClient实现网络音频流的抓取
    概述在当今数字化时代,网络数据的抓取和处理已成为许多应用程序和服务的重要组成部分。本文将介绍如何利用Scala编程语言结合ApacheHttpClient工具库实现网络音频流的抓取。通过本文,读者将学习如何利用强大的Scala语言和ApacheHttpClient库来抓取网络上的音频数据,以及如......
  • 基于Java中的SSM框架实现宝康药房销售管理系统项目【项目源码+论文说明】
    基于Java中的SSM框架实现宝康药房销售管理系统演示摘要随着我国市场经济的蓬勃发展和人们对医药产品需求的迅速增加,医药销售行业正处于一个高速发展的时期。行业的快速发展必然导致竞争的加剧,面对药品销售业日益严酷的竟争现实,加强管理、提高工作效率和改善服务质量成了急......
  • Locust 断言的实现?
    一、检查点的方式有哪些:主要是python内置的assert断言(自动断言)还有locust中的catch_response断言(手动断言);那么这两者之间有什么区别呢?其实主要区别在与生成locust报告上面,手动断言失败,我们在locust上面可以清楚的看到报错信息,如果通过内置断言,即使断言失败我们也看不到错......
  • Locust 实现接口关联
    一、首先我们理解下什么是关联? 跟接口测试一样,我们经常需要将上一个接口返回的参数用于第二次请求二、业务场景1:用户需要先登录获取token,之后去加入购物车、下订单、充值等等行为都是需要用到这个身份验证三、解决方案:客户不是每次行为都需要登录,每个客户只需要登录一次......
  • 五、jsPlumb实现流程图配置--连线
    一、线条创建在第一篇文章讲到过线条一共有四种类型Bezier、Straight、Flowchart、StateMachine,以及每种类型的样子,接下来就演示如何创建线条。创建一条连线有两种方式:通过代码创建;用户使用鼠标拖拽进行创建。1.通过代码创建使用jsPlumb提供的connectAPI可以创建连线。......
  • 基于SSM的网上商城的设计与实现
        本项目采用SSM框架,以MySQL数据库作进行数据存储。下面是整个项目的架构图,具体如下:    本项目一共有三个角色分别为:游客、商城用户和管理员。下面是前台功能模块图,在下图中用虚线红色框框起来的部分为游客可访问的功能模块,下方所有功能商城用户都有权限:......
  • 数据库中利用二进制实现多个布尔属性的增删改查
    需求背景业务场景中经常需要一些布尔型的属性来标记数据状态,如果每个属性值都新增一个数据库字段来保存会造成空间上的浪费,在工作中进行建模设计时难免会想到用二进制来节省空间,以整形32位为例,去除最高位的符号位总共可以用来保存31个布尔属性值。实现细节为方便讲解,这里......