Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >JMeter:如何在多个线程组循环中重用/重新打开CSV?

JMeter:如何在多个线程组循环中重用/重新打开CSV?
EN

Stack Overflow用户
提问于 2014-03-23 17:09:24
回答 5查看 2.5K关注 0票数 4

在JMeter中,我有一个CSV用户列表,每个用户都应该上传一定数量的文件。这些文件列在第二个CSV中。每个用户必须上传所有文件。由于服务器不能一次处理所有线程,因此我将Thread组设置为使用X个用户并循环Y次,以便最终所有用户都上传所有文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 Test plan
 - CSV Data Set Config (contains users) --> Recycle = false, Stop thread on EOF = false
 - Thread Group (X users, Y loops)
 - - While Controller ( ${__javaScript("${uploadFile}"!="<EOF>")} )
 - - - CSV Data Set Config (contains files) --> Recycle = false, Stop thread on EOF = false
 - - - HTTP Request (upload file)

对于第一个循环,一切正常:启动了X个线程。在每个线程中,都会打开files-CSV,每个用户都会上传所有文件。然后第二个线程组循环开始,下一个用户从users-CSV中取出,但是当这些线程到达包含文件-CSV的while-循环时,它们不会上传任何内容。似乎他们重用了第一个循环中的文件- CSV,并认为CSV是EOF或类似的东西。

例如,3个线程/用户和2个循环的结果如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
**first loop**
user 1
  upload file 1
  upload file 2
  upload file 3
user 2
  upload file 1
  upload file 2
  upload file 3
user 3
  upload file 1
  upload file 2
  upload file 3
**second loop**
user 4
user 5
user 6

第二个循环中的用户还应该检查files-CSV并上传文件。你知道我做错了什么吗?提前感谢!!

EN

回答 5

Stack Overflow用户

发布于 2014-03-24 06:12:40

我认为您需要在EOF上启用回收。我也会查看jmeter的日志,寻找一些关于为什么jmeter不再发送任何请求的提示。

jmeter documentation

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
When the end of file (EOF) is reached, and the recycle option is true, 
reading starts again with the first line of the file.

If the recycle option is false, and stopThread is false, then all the 
variables are set to <EOF> when the end of file is reached. This value 
can be changed by setting the JMeter property csvdataset.eofstring . 
票数 0
EN

Stack Overflow用户

发布于 2015-10-30 19:50:45

所以这就是我如何设置的:

我将Users CSV设置为Stop on End of File (而不是Recycle on EOF)。

我将Files CSV设置为Recycle on End of File (而不是Stop on EOF)。

请注意,我每个线程只有一个用户。是的,您将运行更多的线程循环,但每个循环将更短。

票数 0
EN

Stack Overflow用户

发布于 2020-09-27 07:35:24

我找不到一个简单的解决方案。我最终使用了beanshell脚本,它可以让你使用与java非常相似的代码来做一些自定义的事情。我做了一个示例JMeter项目来演示如何做到这一点(是的,它非常复杂,考虑到我只想重复CSV读取):

  1. Files:

我的文件结构:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
JMeterExample
|--JMeterTests.jmx             // the JMeter file--example.csv                 // the CSV file

我的CSV的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
guest-id-1,"123 fake street",
guest-id-2,"456 fake street",
guest-id-3,"789 fake street",

所以在这个线程组中,我将只有一个用户,并且我将循环2次。我打算在每个CSV线路上发送1个请求。所以总共应该发送6个请求。

  1. 线程组

  1. User Defined Variables

这是可选的,但是文件路径可能会改变,我不喜欢仅仅为了配置的改变而改变我的脚本。因此,我将CSV文件名存储在“用户定义变量”节点中。

如果将CSV文件存储在与JMeter测试相同的目录中,则只需指定文件名即可。

如果要将CSV保存在包含JMeter文件的目录以外的文件夹中,则需要提供绝对路径,然后稍微修改下面的beanshell脚本:您将需要注释掉相对加载文件的行,并注释从绝对路径加载的行。

用于解析和存储CSV线的

  1. BeanShell采样器

添加一个Beanshell采样器,它基本上接受一个路径,并将每一行解析并存储为一个变量。第一行将存储为名为csv_line_0的变量,第二行将存储为csv_line_1,依此类推。我知道这不是一个干净的解决方案但是..。我找不到任何干净利落的方法来完成这个干净利落的任务。我复制并粘贴了下面的代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.apache.jmeter.services.FileServer;
import java.text.*;
import java.io.*;
import java.util.*;

String temp = null;

ArrayList lines = new ArrayList();

BufferedReader bufRdr;

ArrayList strList = new ArrayList();     

// get the file
try {
    // you can use this line below if your csvFilePath is an absolute path
    // File file = new File(${csvFilePath});

    // you can use this line below if your csvFilepath is a relative path, relative to where you saved this JMeter file
    File file = new File(org.apache.jmeter.services.FileServer.getFileServer().getBaseDir() + "/" + ${csvFilePath});

    if (!file.exists()) {
        throw new Exception ("ERROR: file " + filename + " not found");
    }

    bufRdr = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF8"));
} catch(Exception e){
    log.error("failed to load file");
    log.error(e.getMessage());
    return;
}

// For each CSV line, save it to a variable
int counter = 0;
while(true){
    try{
        temp = bufRdr.readLine();
        if(temp == null || temp.equals("<EOF>")){
            break;
         }
         lines.add(temp);
         vars.put("csv_line_" + String.valueOf(counter), temp);
        counter++;

        

    } catch(Exception e){
        log.error("failed to get next line");
        log.error(e.getMessage());
        break;
    }
}

// store the number of CSV lines there are for the loop counter
vars.put("linesCount", String.valueOf(lines.size()));

  1. 循环控制器

添加为每条CSV线路循环一次的Loop Controller。${linesCount}是CSV行数的计数,由上面的beanShell脚本计算得出。

用于从当前CSV线提取数据的

  1. Beanshell脚本

此脚本将在每个CSV行上运行一次。它将获取当前行,并解析出其中的任何数据。您必须修改此脚本才能获得所需的数据。在我的示例中,我只有2列,其中列1是"guestId",列2是"address“。

__jm__loopController__idx是JMeter为您定义的变量,也是循环控制器的索引。变量名为__jm__{loop controller name}__idx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String index = vars.get("__jm__loopController__idx");
String line = vars.get("csv_line_" + index);
String [] tokens = line.split(",");
vars.put("guestId", tokens[0]);
vars.put("address", tokens[1]);

  1. Http请求采样器

下面是使用提取的数据的HTTP请求。

  1. result

当运行这段代码时,根据需要,我最终向我定义的端点发送了6个http请求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22594097

复制
相关文章
select2的使用
你必须在其它地方能获取到这个select标签,所以要为其设置id、class或者是name以便能得到这个标签。multiple属性是是否可以多选。option是下拉框中多选的内容。例如在angluar中,使用ng-repeat循环出来值xxx,然后放在option中供select使用。
晓果冻
2022/06/17
1.5K0
ui-select官方教程(二)——ui-select指令
ui-select指令 ui-select的指令和事件 属性 选项 描述 值 默认值 multiple 多选,直接加上multiple属性 close-on-select 在多选情况下,选中一项,就关闭下拉项 boolean true append-to-body 在多选情况下,选中项追加显示 boolean false ng-disabled 控件被禁用 boolean true ng-model 控件绑定对象 String,number,array undefined search-enabled
逝兮诚
2019/10/30
2.7K0
select2的搜索框不能输入搜索内容
按照select2官网配置完后,搜索框弹出后无法输入内容,究竟怎么回事,于是在其他页面尝试了select2,发现可以啊,为什么在这个地方不可以,终于找到了造成这个问题的不同之处:select2在模态对话框中会失效。找到了问题所在,但不知道如何解决:百度或者google,最终找到了解决方案:
johnhuster的分享
2022/03/29
1.4K0
在 Discourse 中如何使用输入对话框
如下图显示的内容,可以在输入框中输入文本,然后在主题中可以根据你输入的文本重新生成字符串:
HoneyMoose
2021/09/08
2.2K0
在 Discourse 中如何使用输入对话框
在Ubuntu 20.04中禁用motd欢迎消息
本篇文章重点讲解一下在Ubuntu 20.04中禁用motd欢迎消息具体方法,有需要的小伙伴可以参考一下。
会长君
2023/04/25
2.6K0
禁止在input中输入中文
提示:设置ime-mode为disabled的意思是禁止在输入时禁止用户激活输入中文,韩文,日文等的输入法(IME)状态,因为这个只能检测到键盘的输入,对通过鼠标操作的粘贴和拖放无效。
崔笑颜
2020/06/08
4K0
win禁用shift切换输入法
在很多场景下,我们都会使用到shift来完成一些功能,最常见的就是输出键盘上面一排标点符号,但是往往在使用shift时会出现切换输入法的情况,在一些仅英文或者中文输入的场合切换会对工作效率造成影响,这里介绍禁用shift切换输入法的方法,仅仅采用ctrl+空格的方式完成切换输入法。
timerring
2022/09/21
6K0
win禁用shift切换输入法
select2无法输入搜索和宽度问题解决
这时候select2的搜索框无法输入,一般有两方面的原因 1.检查下modal的div中是否有tabindex=”-1”,这个属性
botkenni
2019/09/02
1.7K0
select2无法输入搜索和宽度问题解决
yii2使用select2
Text-to-speech function is limited to 200 characters
botkenni
2019/09/02
8990
yii2使用select2
select2 使用教程(简)「建议收藏」
用了这么久的Select2插件,也该写篇文章总结总结。当初感觉Select2不是特别好用,但又找不到比它更好的下拉框插件。
全栈程序员站长
2022/09/12
25.1K0
select2 使用教程(简)「建议收藏」
在python中实现密文输入
本文由腾讯云+社区自动同步,原文地址 http://blogtest.stackoverflow.club/input-password-in-python/
羽翰尘
2019/11/21
1.8K0
【DB笔试面试727】在Oracle中,如何禁用HAIP?
说明,ora.cluster_interconnect.haip的ENABLED属性的原始值为1:
AiDBA宝典
2020/01/20
1.8K0
如何使用 Selenium 在 HTML 文本输入中模拟按 Enter 键?
Selenium是 Python 中可用的内置模块,允许用户制作自动化套件和测试。我们可以使用 selenium 构建代码或脚本以在 Web 浏览器中自动执行任务。Selenium 用于通过自动化测试软件。此外,程序员可以使用 selenium 为软件或应用程序创建自动化测试用例。
海拥
2021/12/20
8.4K0
在 Vue 中创建自定义输入
基于组件的库或框架(如 Vue )可以创建 可重用组件 ,它能在各自应用程序中相互传递数据,这些框架能确保这些数据是一致的,并且(希望)简化了它们的使用方式。
疯狂的技术宅
2019/03/28
6.5K0
Python 教程之输入输出(1)—— 在 Python 中接受输入
开发人员经常需要与用户交互,以获取数据或提供某种结果。今天的大多数程序都使用对话框来要求用户提供某种类型的输入。而 Python 为我们提供了两个内置函数来读取键盘输入。
海拥
2022/09/16
1.7K0
Python 教程之输入输出(1)—— 在 Python 中接受输入
在评论输入框中插入表情
最近在做一个后台管理系统,要求可以对前台用户的作品进行评论,而评论要可以输入表情,常规的文字输入框都是用的文本域textarea来做的,但这种输入框只能输入文字,没有办法输入表情图标,这个时候可编辑div就能起到作用了,那么如何在可编辑的div中插入表情呢?
越陌度阡
2020/11/26
4.1K0
初次使用AngularJS中的ng-view,路由控制
AngularJS中的route可以控制页面元素的改变,使多页面变成一个单页面 第一步:引入必要的js: <script src="js/lib/angular.js"></script> <script src="js/lib/angular-animate.min.js"></script> <script src="js/lib/angular-route.min.js"></script> <script src="app.js"></script> 第二步:准备好一个单页: <body ng-a
Ryan-Miao
2018/03/13
1.6K0
在文件中输入字符串HelloWord
Our life today is three years ago, our life three years later is today's choice.
小Bob来啦
2020/12/15
2.5K0
在文件中输入字符串HelloWord
点击加载更多

相似问题

使用Select2禁用用于自动完成的输入

12

在更新来自ng重复的ng禁用输入时停止ng模型

20

ng-禁用所有输入元素

10

Select2 -禁用用户输入选择

23

在ng-repeat下的tfoot中禁用输入控件

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文