JMeter 线程重复读取在跑数据的解决方法
场景:
需要模拟 100 个账号,100个并发,循环登录登出系统;由此引起了一个问题,如果线程10比线程1提前结束,那么线程10会按 cvs 顺序读取,就有可以读取到目前还在其他线程里面的一个账号;
就会出现两个线程登录同一个账号的情况。
当A线程用User1登录,B线程再用User1登录,这个时候A线程用User1登出,就会发现登录的时候验证 token 错误(已经被线程B的登录0覆盖)
处理方式:2种
处理方式1:常规的 CSV Data Set Config 设置,如果需要用 100 个并发去验证,则需要用1000个账号去遍历,减少出现不同线程读取到同一个账号。

处理方式2:固定线程1 读取 csv 第1 个账号,线程2 读取 csv 第2 个账号.... 线程100 读取 csv 第100 个账号
1、获取当前线程的线程编号
在 Thread Group 下创建一个 User Parameters,详情如图:
Thread Group(右键)- Add - Pre Processors - User Parameters
点击:Add Variable ,填入:threadNum(变量名称) ${__threadNum} (JMeter 获取线程的变量)

2、创建一个脚本,根据线程编号读取文件指定行
在 Thread Group 下创建一个 BeanShell PreProcessor,详情如图:
Thread Group(右键)- Add - Pre Processors - BeanShell PreProcessor
Script 填入下面脚本内容,就可以通过 ${userName}, ${password} 引用这两个变量。
注:里面所引入的类都是 JMeter 的 lib 就自带的。
import java.io.File;
import java.util.List;
import org.apache.commons.io.FileUtils; try {
String path = "D:\account.csv";
File file = new File(path);
//log.info("userCsvPath:" + file.getAbsolutePath());
List lines = FileUtils.readLines(file, "UTF-8");
int threadNum = Integer.parseInt(vars.get("threadNum"));
String line = lines.get(threadNum);
//log.info("############### Thread " + threadNum + " - User=" + line); // loginName,password
String[] cols = line.split(",");
vars.put("loginName", cols[0]);
vars.put("password", cols[1]);
}catch (Exception e) {
log.info("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ FileUtils.readLines() error", e);
}
JMeter 线程重复读取在跑数据的解决方法的更多相关文章
- resultMap中的collection集合出现只能读取一条数据的解决方法
查询数据时只能获得collection集合中的的一条数据,相关情况如下: 结果集resultMap: <resultMap id="ManagerRolesAcls" typ ...
- java读取PHP接口数据的实现方法(四)
PHP文件: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 3 ...
- dede取子栏目时重复显示同级栏目的终极解决方法
使用channelartlist标签时,当栏目没有子栏目是,会出现重复同级栏目的问题,解决方法如下: 先看下面的代码{dede:channelartlist typeid='2'} {dede:ty ...
- SQLServerException:将截断字符串或二进制数据的解决方法
SQLServerException:将截断字符串或二进制数据的解决方法: 最近使用JPA进行保存对象到数据库中怎么也添加不进去,始终报错 主要原因就是你增加的数据字段长度超过数据库中字段所定义长度, ...
- .NET MVC Json()处理大数据异常解决方法
[1-部分原文]: .NET MVC Json()处理大数据异常解决方法 整个项目采用微软的ASP.NET MVC3进行开发,前端显示采用EasyUI框架,图表的显示用的是Highcharts,主要进 ...
- JAVA TcpServer端使用Scanner读取不到数据的解决办法
在使用JAVA进行Socket通信时,在Server端使用Scanner的nextLine()方法读取数据时,一直读取不到数据是因为Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫 ...
- Spring初始化完成后直接执行一个方法,初始化数据(解决方法被重复执行两次的情况)
在做WEB项目时,经常在项目第一次启动时利用WEB容器的监听.Servlet加载初始化等切入点为数据库准备数据,这些初始化数据 是系统开始运行前必须的数据,例如权限组.系统选项.默认管理员等等.但是项 ...
- ADO POST时出现“无法为更新定位行,一些值可能已在最后一次读取后已更改”问题的解决方法
原因有这样几种: 1.在数据库设计时,为某些字段设置了默认值,在修改进行提交以后,数据库会自动修改对应字段的所有行的默认值,从而导致了数据库与数据集中数据的不一致,使ADOQuery无法对数据集进行定 ...
- GCC-4.6.3编译linux2.6.32.12内核出现“重复的成员‘page’”错误的解决方法
使用gcc4.6.3编译linux2.6.32.12内核出现错误如下: In file included from drivers/net/igbvf/ethtool.c:36:0: drivers/ ...
- esayUi中datagrid中json串为空时,显示上一次数据的解决方法
function initSearchProject(startDate,finishDate,flag) { $("#finishDate").val(finish ...
随机推荐
- 【杂谈】Kafka的无锁设计
前言 在分布式消息队列系统中,Kafka 的无锁设计是其高吞吐量和高并发的核心优势之一.通过避免锁的竞争,Kafka 能够在高并发和大规模的生产环境中保持高效的性能.为了更好地理解 Kafka 的无锁 ...
- Qt/C++最新地图组件发布/历时半年重构/同时支持各种地图内核/包括百度高德腾讯天地图
一.前言说明 最近花了半年时间,专门重构了整个地图组件,之前写的比较粗糙,有点为了完成功能而做的,没有考虑太多拓展性和易用性.这套地图自检这几年大量的实际项目和用户使用下来,反馈了不少很好的建议和意见 ...
- Linux 下挂载群晖 NAS 硬盘拓展空间(NFS)
在群晖 NAS 上配置 开启 NFS 服务 打开群晖的 设置 - 文件服务 - NFS,把 NFS 服务勾选上,协议选最新即可. 配置文件夹的 NFS 权限 在 设置 - 共享文件夹 下,选择需要开启 ...
- 探探的IM长连接技术实践:技术选型、架构设计、性能优化
本文由探探服务端高级技术专家张凯宏分享,原题"探探长链接项目的Go语言实践",因原文内容有较多错误,有修订和改动. 1.引言 即时通信长连接服务处于网络接入层,这个领域非常适合用G ...
- spark (四) RDD概念
目录 1. RDD基本概念 1.1 弹性 1.2 分布式 1.3 数据集 1.4 数据抽象 1.5 不可变 1.6 可分区.并行计算 2. WordCount为例,看RDD特性 3. RDD的五大属性 ...
- Verilog5_有限状态机
一.有限状态机(Finite State Machine, FSM)基本概念 有限状态机是由寄存器组和组合逻辑构成的硬件时序电路: 其状态只能在同一时钟跳变沿从一个状态转向另一个状态: ...
- Redis 学习笔记之基础
一.Redis 是什么 Redis 是一个使用 C 语言写成的,开源的.key-value 结构的.非关系型数据库.它支持存储的 value 类型相对更多,包括 String(字符串).List(列表 ...
- CDS标准视图:催款代码 I_DunningKey
视图名称:催款代码 I_DunningKey 视图类型:基础 视图代码: 点击查看代码 @AccessControl.authorizationCheck: #NOT_REQUIRED @EndUse ...
- 微服务实战系列(七)-网关springcloud gateway-copy
1. 场景描述 springcloud刚推出的时候用的是netflix全家桶,路由用的zuul,但是据说zull1.0在大数据量访问的时候存在较大性能问题,2.0就没集成到springcloud中了, ...
- 补充:字符编码ASCII、 ISO8859-1、GB2312、GBK、Unicode、UTF-8
补充:字符编码 编码表的由来计算机只能识别二进制数据,早期由来是电信号.为了方便应用计算机,让它可以识别各个国家的文字.就将各个国家的文字用数字来表示,并一一对应,形成一张表.这就是编码表. 常 ...