当前位置: 首页 > news >正文

JMeter案例分享:通过数据验证的错误,说说CSV数据文件设置中的线程共享模式

前言

用过JMeter参数化的小伙伴,想必对CSV Data Set Config非常熟悉。大家平时更关注变量名称,是否忽略首行等参数,其余的一般都使用默认值。然而我最近遇到一个未按照我的预想读取数据的案例,原因就出在最后一个参数“线程共享模式”上。记录一下,大家避坑。

业务需求及脚本逻辑

某系统用户提交订单之后,在订单列表页面会新增一条记录。

压测前后,需要分别查询订单数量,根据提交订单的成功事务数来判断,是否所有的订单都成功入库。

但是,因为测试过程中多用户并发,每个用户只能查到自己的订单,所以检查时需要逐个检查所有参与并发测试的用户名下的订单数量,然后加总求和。

详情可参见JMeter案例分享:通过采样器自动完成性能测试过程中的功能检查-数据条目验证-CSDN博客

查找问题

脚本调试时,仅使用有限几个账户,一切正常。但是,当项目组提供真正的登录账号后,数据验证总是对不上。于是,减少并发数,并把用户、订单数量信息一一打印出来查看。

1cf0a9646cee4982a6a05d93c993eef6.png

原来:

业务前数据检查的用户是usr1、2、3

执行业务的用户是usr4、5、6

业务后数据检查的用户又变成了usr7、8、9

分析原因

它们分属3个线程组,虽然使用的是同一个数据文件,但是因为数据文件是放置在线程组内的,按照我的理解,作用域也应该仅限于本线程组,那么每一个线程组都应该从这个数据文件的第一行开始读取。

然而,事实上,这个数据文件似乎是三个线程组间共享的。

于是,关注到CSV data set config中的共享模式(sharing mode)

242c47e55c0145d099968e9db9a62ad8.png

官网中对该选项的介绍如下:

  • All threads - (the default) the file is shared between all the threads.(默认值,文件在所有的线程间共享)
  • Current thread group - each file is opened once for each thread group in which the element appears(文件仅在它所在的线程组中被打开一次)
  • Current thread - each file is opened separately for each thread(每个线程都单独打开一份,也就是说,这个文件,每个线程都会独自使用)
  • Identifier - all threads sharing the same identifier share the same file. So for example if you have 4 thread groups, you could use a common id for two or more of the groups to share the file between them. Or you could use the thread number to share the file between the same thread numbers in different thread groups.

下面我们分别设置来看看效果

All threads

默认值,效果前面已经看到了,所有的线程组中的所有线程,共享一个文档,从第一行顺序向下读取。

Current thread group

文件仅在当前线程组中有效,本线程组结束后,下一个线程组将重新打开一遍数据文件,从第一行开始向下读取。这就是我当前这个测试场景中需要的效果。

4aedd7dbddf4478aaea7aa08f9e8121d.png

Current thread

数据文件仅在当前线程中有效。同一个线程组的不同线程间,不共享数据文件。

本例中数据验证线程组是单线程,用循环控制器顺序执行的,看不出效果,看业务线程组:3个并发执行1次,也就是三个线程,但是usr1登录了3次。

也就是说,线程1打开数据文件,从第一行开始读取;

线程2打开数据文件,从第一行开始读取

每个线程读取各自的文件。

9385e698793d4e029380942f29c9f262.png

Identifier

我在业务前数据验证和业务线程组中分别输入1,标识这两个线程组是group 1

在业务后数据验证线程组中,输入2,标识这是group2

709beb65511e4d29b43f2d3cce5d4dfc.png

执行结果如下:

7c8d965277d349e4840537fe68bb6066.png

红色的两个线程组(group ID为1)作为一个group,共享数据文件。

黄色的线程组(group ID为2)作为一个group,独享数据文件。

遗留问题

最后一种共享模式中这句话我不知道该怎么操作,官网没有示例。

Or you could use the thread number to share the file between the same thread numbers in different thread groups.

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Flutter和React Native(RN)的比较
  • 【无需公网IP】在树莓派上搭建Web站点
  • 亚马逊云科技EC2简明教程
  • 每日Attention学习11——Lightweight Dilated Bottleneck
  • Jetson-AGX-Orin 非docker环境源码编译安装CyberRT
  • ctfshow--web入门--SSRF
  • Python爬虫与文本到语音转换实战:获取并播报长沙天气
  • golang interface指针实现
  • 数据库使用SSL加密连接
  • vue学习day08-v-model详解、sync修饰符、ref和$refs获取dom组件、Vue异步更新和$nextTick
  • 【C++】——入门基础
  • VECTOR,ARRAYLIST, LINKEDLIST的区别是什么?
  • MVC 生成验证码
  • 代码随想录算法训练营第11天
  • 知识图谱研究综述笔记
  • .pyc 想到的一些问题
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 30天自制操作系统-2
  • 4个实用的微服务测试策略
  • Bootstrap JS插件Alert源码分析
  • CSS 专业技巧
  • Docker: 容器互访的三种方式
  • ECMAScript入门(七)--Module语法
  • ESLint简单操作
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript的使用你知道几种?(上)
  • Linux各目录及每个目录的详细介绍
  • Next.js之基础概念(二)
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 回顾 Swift 多平台移植进度 #2
  • 深度学习在携程攻略社区的应用
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 项目实战-Api的解决方案
  • 用jquery写贪吃蛇
  • 正则学习笔记
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #mysql 8.0 踩坑日记
  • #宝哥教你#查看jquery绑定的事件函数
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • ( 10 )MySQL中的外键
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (39)STM32——FLASH闪存
  • (7)svelte 教程: Props(属性)
  • (Charles)如何抓取手机http的报文
  • (pytorch进阶之路)扩散概率模型
  • (TOJ2804)Even? Odd?
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (十八)Flink CEP 详解
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略