场景:

需要模拟 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 线程重复读取在跑数据的解决方法的更多相关文章

  1. resultMap中的collection集合出现只能读取一条数据的解决方法

    查询数据时只能获得collection集合中的的一条数据,相关情况如下: 结果集resultMap: <resultMap id="ManagerRolesAcls" typ ...

  2. 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 ...

  3. dede取子栏目时重复显示同级栏目的终极解决方法

    使用channelartlist标签时,当栏目没有子栏目是,会出现重复同级栏目的问题,解决方法如下: 先看下面的代码{dede:channelartlist typeid='2'}  {dede:ty ...

  4. SQLServerException:将截断字符串或二进制数据的解决方法

    SQLServerException:将截断字符串或二进制数据的解决方法: 最近使用JPA进行保存对象到数据库中怎么也添加不进去,始终报错 主要原因就是你增加的数据字段长度超过数据库中字段所定义长度, ...

  5. .NET MVC Json()处理大数据异常解决方法

    [1-部分原文]: .NET MVC Json()处理大数据异常解决方法 整个项目采用微软的ASP.NET MVC3进行开发,前端显示采用EasyUI框架,图表的显示用的是Highcharts,主要进 ...

  6. JAVA TcpServer端使用Scanner读取不到数据的解决办法

    在使用JAVA进行Socket通信时,在Server端使用Scanner的nextLine()方法读取数据时,一直读取不到数据是因为Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫 ...

  7. Spring初始化完成后直接执行一个方法,初始化数据(解决方法被重复执行两次的情况)

    在做WEB项目时,经常在项目第一次启动时利用WEB容器的监听.Servlet加载初始化等切入点为数据库准备数据,这些初始化数据 是系统开始运行前必须的数据,例如权限组.系统选项.默认管理员等等.但是项 ...

  8. ADO POST时出现“无法为更新定位行,一些值可能已在最后一次读取后已更改”问题的解决方法

    原因有这样几种: 1.在数据库设计时,为某些字段设置了默认值,在修改进行提交以后,数据库会自动修改对应字段的所有行的默认值,从而导致了数据库与数据集中数据的不一致,使ADOQuery无法对数据集进行定 ...

  9. 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/ ...

  10. esayUi中datagrid中json串为空时,显示上一次数据的解决方法

    function initSearchProject(startDate,finishDate,flag) {        $("#finishDate").val(finish ...

随机推荐

  1. Qt音视频开发32-Onvif网络设置

    一.前言 用onvif协议来对设备的网络信息进行获取和设置,这个操作在众多的NVR产品中,用的很少,绝大部分用户都还是习惯直接通过摄像机的web页面进去配置,其实修改网络配置的功能在大部分的NVR中都 ...

  2. Qt开源作品33-图片开关控件

    一.前言 进入智能手机时代以来,各种各样的APP大行其道,手机上面的APP有很多流行的元素,开关按钮个人非常喜欢,手机QQ.360卫士.金山毒霸等,都有很多开关控制一些操作,在WINFORM项目上,如 ...

  3. [转]boost使用之编译库及遇到的问题

    最近因为在学习网络编程相关的东西,准备学习一下boost,毕竟原生的网络编程太麻烦.看了一下其实windows下想使用起来很简单,就是下载库,然后运行脚本,然后运行exe库就出来.在把头文件和库的目录 ...

  4. 关于vue加element-ui上传文件获取文件的sha256的值

    首先使用element的上传文件的组件 安装依赖crypto-js npm i crypto-js <el-upload class="upload-demo" drag : ...

  5. 基于Qt的OFD阅读器开发原理与实践

    摘要 本文详细探讨了基于Qt开发OFD阅读器的原理与实践.通过解析OFD文件格式.构建文档结构.实现页面渲染.处理用户交互以及进行性能优化,本文展示了如何使用Qt框架开发一个功能强大.性能优异的OFD ...

  6. Linux部署Redis哨兵集群 一主两从三哨兵

    目录一.哨兵集群架构介绍二.下载安装Redis2.1.选择需要安装的Redis版本2.2.下载并解压Redis2.3.编译安装Redis三.搭建Redis一主两从集群3.1.准备配置文件3.1.1.准 ...

  7. 2020年最新Redis面试题-copy

    什么是Redis Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库. Redis 可以存储键和 ...

  8. Java多进程多线程处理详解

    在Java编程中,多进程和多线程是两种常见的并发编程技术,用于提高程序的执行效率和响应速度.本文将详细介绍Java中的多进程和多线程处理,包括理论概述和代码示例.通过本文,你将了解如何在Java中实现 ...

  9. 快速修改MySQL数据库名称

    原理:先创建新的数据库,然后利用information_schema数据库表结构信息,用 RENAME命令 将旧的表迁移到新数据库里面,最后删除旧的数据库名称即可. 步骤如下: #查询目标数据库下面的 ...

  10. 深入理解Java泛型、协变逆变、泛型通配符、自限定

    禁止转载 重写了之前博客写的泛型相关内容,全部整合到这一篇文章里了,把坑都填了,后续不再纠结这些问题了.本文深度总结了函数式思想.泛型对在Java中的应用,解答了许多比较难的问题. 纯函数 协变 逆变 ...