Jmeter系列- 详解 CSV 数据文件设置

本文介绍了CSV文件在JMeter中的应用,特别是在参数化测试和负载测试中的作用,包括如何配置CSV数据文件、处理文件结束符、线程共享模式以及通过命令行进行压力测试的方法。

一、什么是csv文件

CSV文件:是指"逗号分隔值"(Comma-Separated Values)文件,它是一种简单的文件格式,用于存储表格数据,例如电子表格或数据库,可以用记事本和Excel打开,用记事本打开的话,每一列数据都用逗号隔开

二、CSV数据文件设置适用场景

在JMeter中,CSV数据文件配置元件(CSV Data Set Config)用于从CSV文件中读取数据,并将这些数据作为参数传递给测试计划中的请求,这样可以在测试运行时模拟不同的用户、输入或数据组合,增加测试的复杂性和覆盖范围。

  • 从外部导入测试数据,相当于数据参数化
  • 通过从文件中导入大量的测试数据,来模拟大量真实用户发送并发请求

使用场景:

参数化测试:当你需要对一个请求进行多次重复测试,并使用不同的输入数据进行参数化,CSV数据文件配置元件非常有用。例如,可以测试一个登录页面,通过从CSV文件中读取多个用户名和密码进行登录测试。
负载测试:模拟大量真实用户发送并发请求来访问系统,CSV数据文件配置元件可以为每个用户提供不同的数据,以验证系统在高负载情况下的性能。

三、在线程组下添加csv数据文件

csv配置参数:

遇到文件结束符再次循环: 如果设置为True,当CSV文件的所有数据行都被使用后,JMeter将重新从文件的开头开始使用数据。如果设置为False,当所有数据行用完后,测试会停止。

遇到文件结束符停止线程: 如果设置为True,当CSV文件的所有数据行都被使用后,相关的线程组将停止执行。如果设置为False,当所有数据行用完后,线程组仍将继续执行。

线程共享模式:这是线程间共享文件句柄的模式。有三个选项:

  • All threads: 所有线程共享一个CSV文件句柄。
  • Current thread group: 当前线程组内的线程共享一个CSV文件句柄。
  • Current thread: 每个线程都有自己的CSV文件句柄。

请求配置:

request0226.csv文件内容:

注:如果请求不通的时候可以把request0226.csv重命名为request0226.txt

使用命令行的方式发送压力:

命令行压测命令:
apache-jmeter-5.5/bin/jmeter  -n -t test.jmx -l t2.jtl

带输出报告的:
apache-jmeter-5.5/bin/jmeter  -n -t test.jmx -l t2.jtl -e -o /home/username/result

-n 非gui方式运行jmeter
-t :jmx 脚本路径
-l :result.jtl 运行结果保存路径,注意:.jtl 文件名不能重复,文件夹需要存在
-e :在脚本运行结束后生成 HTML 报告
-o :用于存放 HTML 报告的目录,文件夹需要存在 

其中test.jmx是在jmeter GUI用户界面保存的计划生成的。

<think>我们正在讨论JMeter中的CSV数据文件配置元件的线程共享模式设置。根据引用内容,CSV数据文件配置元件用于从CSV文件中读取数据,并将这些数据作为参数传递给测试计划中的请求。线程共享模式决定了这些数据如何在多个线程之间共享。 在JMeter中,CSV数据文件配置元件(CSV Data Set Config)的“共享模式”(Sharing Mode)设置有以下几种选项: 1. 所有线程(All threads):默认选项。该文件被所有线程共享,每个线程按顺序从文件中读取数据行。当所有线程总共读取的行数超过文件行数时,根据“遇到文件结束符再次循环?”(Recycle on EOF?)的设置决定是重新从文件开始读取还是停止。 2. 当前线程组(Current thread group):每个线程组使用独立的文件指针,即每个线程组内的线程共享一个文件指针,但不同线程组之间互不影响。 3. 当前线程(Current thread):每个线程都有自己独立的文件指针,即每个线程都会从头开始读取文件(除非设置了不同的起始行)。 4. 编辑(Edit):用于自定义共享模式,通常用于跨线程组共享,但需要配合属性设置设置步骤: 1. 在JMeter测试计划中添加CSV数据文件配置元件(位于配置元件下)。 2. 在“文件名”中指定CSV文件的路径(可以是绝对路径或相对路径,建议使用相对路径以便于迁移)。 3. 设置文件编码(如果文件中有非英文字符,建议使用UTF-8)。 4. 设置变量名称(多个变量用逗号分隔,与CSV文件中的列对应)。 5. 设置分隔符(默认为逗号,如果文件中使用其他分隔符,如制表符,则填写\t)。 6. 设置“是否遇到文件结束符再次循环?”(Recycle on EOF?):当读取到文件末尾时是否重新从头开始读取。如果选择True,则循环读取;如果选择False,则停止读取,并且当“遇到文件结束符停止线程?”(Stop thread on EOF?)设置为True时,线程在读取完最后一行后将停止运行。 7. 设置“共享模式”(Sharing mode):根据需求选择上述模式之一。 例如,如果我们希望每个线程独立读取整个文件(即每个线程都从文件的第一行开始读取),则选择“当前线程”(Current thread)。如果我们希望所有线程共享一个文件指针(即每个线程按顺序读取下一行),则选择“所有线程”(All threads)。 注意:在分布式测试中,CSV文件需要放在每个负载机(slave)的相同路径下,因为每个负载机都会读取自己的副本。 下面是一个配置示例: - 文件名:data.csv - 文件编码:UTF-8 - 变量名称:username,password - 分隔符:, - 遇到文件结束符再次循环?:True - 遇到文件结束符停止线程?:False - 共享模式:所有线程 这样配置后,所有线程将按顺序从data.csv中读取一行数据,并将该行的两列分别赋值给变量username和password。当读取到文件末尾时,会重新从文件开头读取。 如果希望每个线程组独立共享文件,则选择“当前线程组”。如果希望每个线程独立使用整个文件(例如每个线程需要读取整个文件多次),则选择“当前线程”。 根据引用[3]中的例子,如果每个线程需要上传不同的文件,可以将所有文件名放在一个CSV文件中,然后设置共享模式为“所有线程”,这样每个线程会读取一个不同的文件名。如果希望每个线程读取整个文件列表并循环上传,则可能需要设置共享模式为“当前线程”并设置循环读取。 请根据实际测试需求选择合适的共享模式。 §§相关问题§§ 1. 在JMeter中,如何设置CSV数据文件配置元件以实现每个线程读取整个文件? 2. 分布式测试中,CSV数据文件配置需要注意什么? 3. 如何避免多个线程同时读取CSV文件时出现数据冲突?</think>### JMeter CSV数据文件配置:线程共享模式设置详解JMeter中,CSV数据文件配置元件(CSV Data Set Config)的线程共享模式决定了CSV数据如何在不同线程间分配。以下是设置方法及关键参数说明: #### 📌 配置步骤 1. **添加配置元件** 右键测试计划 → 添加 → 配置元件 → CSV数据文件设置 2. **关键参数设置** ```plaintext 文件名:data.csv # CSV文件路径 文件编码:UTF-8 # 文件编码格式 变量名称:user,pass # 对应CSV列的变量名(逗号分隔) 共享模式:所有线程 # ★ 核心配置项 ★ ``` 3. **共享模式选项**(通过下拉菜单选择): | 模式 | 描述 | 适用场景 | |---|---|---| | **所有线程** | 全局共享文件指针 | 默认模式,线程顺序读取数据 | | **当前线程组** | 线程组内共享 | 多线程组测试时隔离数据 | | **当前线程** | 线程独立读取 | 每个线程读取完整文件 | | **编辑** | 自定义共享范围 | 通过变量名指定共享组 | #### ⚙️ 配合参数说明 - **遇到文件结束符再次循环?** - `True`:数据用尽时从头读取(循环使用) - `False`:数据用尽后停止读取 - **遇到文件结束符停止线程?** 需与上一参数配合,当数据用尽且不循环时停止线程 - **线程共享示例**: ```plaintext 文件内容: user1,pass1 user2,pass2 模式:所有线程 → 线程1读取user1,线程2读取user2 模式:当前线程 → 所有线程都从user1开始读取 ``` #### 💡 最佳实践建议 1. **性能测试**:使用`所有线程`模式确保数据均匀分配[^1] 2. **数据隔离测试**:`当前线程组`模式隔离不同业务场景数据[^2] 3. **文件上传场景**:`当前线程`模式实现每个线程上传独立文件[^3] 4. **分布式测试**:在所有负载机上放置相同CSV文件路径 > ⚠️ 注意:当使用`所有线程`模式时,确保CSV数据行数 ≥ 线程数 × 循环次数,避免数据重复使用。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值