使用Locust进行接口性能测试:关联与参数化技巧分析

Locust是一款开源的Python性能测试工具,它可以模拟大量并发用户对网站或者其他接口进行压力测试 

1. 关联:精确模拟用户操作

在某些场景下,我们需要将之前请求的响应参数关联到后续请求中,以模拟用户操作。这在会话管理(如session_id的传递)中很常见。通过关联,将上一个请求的响应数据应用到下一个请求中。示例:

 
  1. from locust import TaskSet, task

  2. from lxml import etree

  3. class UserTasks(TaskSet):

  4. @task

  5. def login_and_continue(self):

  6. # 模拟业务流程

  7. response = self.client.get('/login')

  8. session_id = self.extract_session_id(response.text)

  9. self.client.post('/continue', json={"session_id": session_id})

  10. def extract_session_id(self, html):

  11. ""这个函数只提供获取数据,不作为任务执行 ""

  12. tags = etree.HTML(html)

  13. return tags.xpath("//input[@name='session_id']/@value")[0]

使用extract_session_id方法从响应中提取会话ID,并在后续请求中应用。

2. 数据循环:多用户操作模拟

如我们需要使用3个用户对一批URL压测,每个用户都需要访问到每个url,可以使用数据循环的方式实现:

 
  1. from locust import TaskSet, task

  2. class UserTasks(TaskSet):

  3. def on_start(self):

  4. self.url_index = 0

  5. @task

  6. def visit_multiple_pages(self):

  7. url = self.user_data["urls"][self.url_index]

  8. self.url_index = (self.url_index + 1) % len(self.user_data["urls"])

  9. self.client.get(url)

  10. def setup(self):

  11. self.user_data["urls"] = ['page1', 'page2', 'page3', 'page4', 'page5']

通过setup方法设置了循环的URL列表,然后在visit_multiple_pages任务中实现了URL的循环使用,模拟不同用户对不同页面的操作。

3. 队列数据控制:并发数据模拟

为了并发测试数据的唯一性,可以使用队列参数化技巧。通过从队列中顺序取数然后重新放入队列:

 
  1. from locust import TaskSet, task

  2. import queue

  3. class UserTasks(TaskSet):

  4. @task

  5. def unique_concurrent_actions(self):

  6. try:

  7. data = self.user_data_queue.get()

  8. except queue.Empty:

  9. print('数据已用尽,测试结束。')

  10. exit(0)

  11. self.client.post('/action', json=data)

  12. self.user_data_queue.put_nowait(data)

  13. def setup(self):

  14. self.user_data_queue = queue.Queue()

  15. for index in range(100):

  16. data = {

  17. "param1": f"value{index:04d}",

  18. "param2": f"value{index:04d}"

  19. }

  20. self.user_data_queue.put_nowait(data)

用户共享同一组数据,先将数据放入队列,所有用户开始执行unique_concurrent_actions任务都会从队列取数,这样就保证数据的唯一性,并在并发场景中循环使用,利用这个特点可以很好的处理多用户流程执行脚本的时候,出现数据错位的情况

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1540331.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

数字工厂管理系统与MES系统在实际应用中有哪些区别

随着制造业的数字化转型步伐加快,数字工厂管理系统与制造执行MES系统作为两大关键工具,在实际应用中展现出了明显的差异。本文将从实际应用的角度,详细探讨这两种系统之间的主要区别。 数字工厂管理系统的实际应用 数字工厂管理系统侧重于对…

python检测keycloak证书连接报错问题

最近一直被keycloak的证书问题困扰了很久,老是提示ssl安全连接,由于不会java,只好硬着头皮用python测试。 我这里的证书是自己签注的证书,导入系统的是CA根证书。 from keycloak import KeycloakOpenID# 1. 配置 Keycloak 客户端 keycloak_o…

STM32F407ZGT6驱动sd卡+文件夹 并写入多组实时数据 基于cubemx生成

SD卡介绍 SD卡,全称Secure Digital卡,是一种常见的便携式存储设备,通常用于存储和传输数据。它是一种闪存存储卡。 TF卡(TransFlash卡) 又称MicroSD卡,MicroSD卡比SD卡小,通常只有SD卡的1/4大小…

LLM(大语言模型)和AIGC入门学习路线图,零基础入门到精通,收藏这一篇就够了

大模型是指网络规模庞大的深度学习模型,其参数量通常在千亿级别。 学习大模型需要具备计算机基础,这一点非常重要! 要系统地入门大模型,首先需要学习深度学习的基础知识,包括神经网络(NN)、卷…

nvm node管理工具常用指令

注:使用nvm之前需要卸载掉原有的node 1.在终端输入 nvm list available, 查看网络可以安装的版本。 点击visit后面的链接可查看完整版本列表 版本区别: CURRENT:当前正在使用的 Node.js 版本。LTS(Long Term Suppor…

java踩坑

1.mybatis在idea可以正常运行,但是打jar包后,就报链接超时,可能是参数设置有问题,但是idea自动忽略了。 出问题的配置:(圈出来的地方乱码了,idea有纠错能力,它自动调整为正确的&…

电脑录课软件哪个好用,提高教学效率?电脑微课录屏软件推荐

在当今这个数字化时代,教育领域也迎来了翻天覆地的变化。随着远程教学和在线学习的普及,教师们开始寻求更高效、更便捷的教学工具来提升教学质量和学生的学习体验。电脑录课软件,作为现代教育技术的重要组成部分,能够帮助教师轻松…

基于存内计算架构的模型部署与映射优化

先进计算大赛背景: ‘’存内计算”架构通过消除存储与计算单元间的物理距离,突破传统冯诺依曼架构的限制,自2016年起受到广泛关注,被视为国产算力发展的关键技术。 ​ 在存内计算架构中,权重布局对提高存算单元利用率…

海外盲盒APP为盲盒出海助力,拓展海外市场

潮玩市场是一个具有全球化的行业在全球都具有非常高的发展潜力,随着国内盲盒市场的饱和,拓展海外市场对盲盒企业至关重要。近年来,盲盒已经在海外市场取得了一定的成绩,这为企业拓展海外市场奠定了发展基础。 目前,在…

虚拟机(VMware)安装,保姆级教程(附所有安装包及所有安装步骤)

1.安装包下载 1.1VMware下载 VMware安装包 提取码:b9ds 1.2镜像下载 镜像安装包 提取码:hbtq 2.配置虚拟机向导 2.1配置虚拟机向导 2.2选择虚拟机硬件兼容性 2.3安装客户机操作系统 2.4简易安装信息 2.5命名虚拟机 2.6处理器配置 #这个根据自己…

“数字化、数字化流程、流程数字化转型、端到端流程”概念解析

​头一次看到能把“数字化”“数字化流程”“流程数字化转型”和“端到端流程”说的这么清楚的! 所谓的“数字化”是指新一代的数字化技术,比如移动、社交、云技术、大数据、人工智能、区块链、数字孪生等。这批新技术已经开始改变人们的工作方式&#x…

VBA技术资料MF198:禁用下拉拖放

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…

案例精选 | 聚铭助力河北省某市公安局筑牢网络安全防护屏障

近年来,各级公安机关积极响应信息化发展趋势,致力于提升公安工作的效能与核心战斗力。河北省某市公安局作为主管全市公安工作的市政府部门,承担着打击违法犯罪、维护社会稳定的重任。随着信息化建设的推进,局内系统数量、种类及数…

模板初阶(C++)

初识模板 模板分为 函数模板和类模板这两种,模板可以理解为是一套固有的方法,通过改变里面不同的载体( 参数类型)进而调高代码的复用性。这是一个经典案例,在不使用模板的情况下,若遇见不同类型的参数&…

Linux——k8s认识

计算资源隔离 - 更方便进行高并发架构的维护和升级 - 架构管理的灵活性更高,不再以单个节点的物理资源作为基础 技术: - 硬件辅助虚拟化 - 容器技术 在企业部署方案中,很少以单节点实现虚拟化和容器技术,一般以集群状态来运…

PCL KD树的使用

目录 一、概述 1.1原理 1.1.1 数据拆分过程 1.1.2 树的构建示例 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1KD树构建与查询: 2.1.2 k近邻搜索 2.1.3半径搜索 2.2完整代码 三、实现效果 3.1处理后点云 3.2数据显示 PCL点云算法汇总及实战…

neo4j导入csv数据

neo4j数据可视化实践 手动输入数据 - 官方democsv数据导入准备数据数据处理导入步骤① 导入疾病表格② 导入药物表格③导入疾病-药物关系表格 爬虫的csv文件 手动输入数据 - 官方demo 点击之后,按照左边10张图中的代码,复制粘贴熟悉语法 效果如下 csv数据…

(十六)Ubuntu 20.04 下搭建PX4+MATLAB 仿真环境(HITL)

在文章(十五)Ubuntu 20.04 下搭建PX4MATLAB 仿真环境我们学习了如何配置仿真环境,在本节,主要进行HITL的仿真环境搭建。 根据(十五)Ubuntu 20.04 下搭建PX4MATLAB 仿真环境完成配置到如下界面:…

STM32F1+HAL库+FreeTOTS学习11——延时函数API

STM32F1HAL库FreeTOTS学习11——延时函数API 延时函数API1. vTaskDelay()2. vTaskDelayUntil()3. xTaskDelayUntil()相对延时和绝对延时的区别4. xTaskAbortDelay() 上一期,我们学习了任务相关API使用,这一期我们开始学习FreeRTOS延时函数的API使用 延时…

MySQL--导入SQL文件(命令行导入)

MySQL--导入SQL文件 一、前言二、导入SQL文件 一、前言 用可视化编辑工具编写,并且在控制台输入命令行在MySQL中导入SQL文件。 在导入SQL文件之前查看了目前存在的数据库 **目标:**在可视化编辑工具(这里以word文档为例)中编写SQL语句&…