Jmeter-CSV 数据文件设置
CSV(CSV Data Set Config) 数据文件变量是指从外部 csv 文件读取数据出来作为变量。
一、参数说明
1、理解
CSV(CSV Data Set Config) 数据文件变量是指从外部 csv 文件读取数据出来作为变量
2、设置 CSV 数据文件
测试计划->添加->配置元件->CSV 数据文件设置,查看CSV数据文件的各个要素
(1)文件名
csv 文件路径,可以是绝对路径或者相对路径(建议设置成相对路径,填写相对于脚本的路径,后续远程压测或迁移时,可以更好的找到文件)
(2)文件编码
编码格式,与所选文件编码格式保持一致
(3)变量名称(西文逗号间隔)
如果文件中只有一个变量,直接写变量名,如果有多个变量,用英文的逗号隔开(例:var1,var2)
(4)忽略首行(只在设置了变量名称后才生效)
- True:设置为 True 时,从文件第二行开始读取,此时文件第一行为变量名,例:var1,var2;设置为 True,变量名称可以不用设置,在文件第一行设置即可
- False:一般设置为 False,文件从第一行开始设置变量数据,在变量名称中设置名称
(5)分隔符(用 ‘\t’ 代替制表符)
根据文件中的分隔符进行填写,默认:,
(6)是否允许带引号?
- True:参数文件包含引号时,实际的数据为引号中的数据。比如参数文件中的数据为"1,2",当使用该参数时,实际取得值为1,2
- False:参数文件包含引号时,实际取得值为全部的值。比如参数文件中的数据为"1,2",当使用该参数时,实际取得值为"1,2"会取成两个参数
(7)遇到文件结束符再次循环?
- True:参数文件中的数据循环使用,测试按照线程组中的设置执行。比如csv 文件共有 10 条记录,但线程数有 15 个,循环 10 次后,重头开始循环取值
- False:参数文件不再循环遍历取值
(8)遇到文件结束符停止线程
- True:当执行完参数文件中所有参数后,直接停止线程
- False:不停止
(9)线程共享模式(Sharing mode)
所有线程(All threads):参数文件对所有线程共享,这包括同一测试计划中的不同线程组(测试计划下的所有线程组下的所有线程共享参数文件,所有线程之前参数取值互相影响,线程在同一次迭代下取值相同)
当前线程组(Current thread group): 只对当前线程组中的线程共享(当前线程组下的所有线程公用一个参数文件,同一个线程组下的线程之前取值相互影响,线程在同一次迭代下取值相同)
当前线程(Current thread): 仅当前线程获取(即每个线程获取一个参数文件,各个线程之间参数取值互不影响,线程在同一次迭代下取值相同)
当参数文件的位置与线程组在同级下,线程组下存在循环控制器时,循环控制器下的参数取值相同
线程组下存在循环控制器时,当参数文件在循环控制器下,循环控制器下每次迭代时重新取值
线程组下存在仅一次控制器,参数文件在仅一次控制器下,当参数在仅一次控制器下取值一次之后,之后无论哪次迭代参数取值都不变,类似于unique once
注意:创建 CSV 文件最好用 notepad 创建,编码格式为 UTF-8
二、测试计划演示
1、编写csv文件
新建一个文件名为 data.csv 的文件,并添加数据,如图所示:
2、配置CSV 数据文件
测试计划右键 -> 添加 -> 配置元件 ->CSV 数据文件设置
(1)文件名:文件所在路径
(2)文件编码:中文使用 utf-8
(3)变量名称:var1,var2
(4)是否允许带引号?:文件中,有个参数为 “张,三”,此处选择 True 允许,取值时,会将 “张,三” 当一个值;如果选 False,会当两个值取 “张” “三”
3、添加线程组
测试计划右键-> 添加 -> 线程(用户) ->线程组,线程数设置为3
4、添加取样器
线程组右键 -> 添加 -> 取样器 -> JSR223 Sampler,添加脚本
脚本文件:
log.warn("线程:"+ctx.getThreadNum()+";变量1:"+vars.get("var1")+";变量2:"+vars.get("var2"));
5、设置日志级别
选项 ->日志级别 -> WARN,设置日志级别为 WARN
6、启动测试计划并打开日志
选项 -> 日志查看,可以看到3个线程各取了一组变量,如图所示:
三、测试计划设计
脚本在测试计划演示脚本基础上验证
1、忽略首行:True
(1)修改 data.csv 文件中数据
(2)修改CSV 数据文件设置,清除日志并启动(删掉变量名称、忽略首行选择 True)
2、是否允许带引号?:False
修改CSV 数据文件设置,清除日志并启动(是否允许带引号?:False)
data.csv 文件中第一组数据中的 “张,三” ,取值时,只取了 "张
3、遇到文件结束符再次循环?:False
(1)修改线程组,将线程数改为 4
(2)CSV 数据文件设置,清除日志并启动(遇到文件结束符再次循环?:False)
- 文件中只有3组数据,而线程数为4,当执行第四个时,文件中的数据已循环取出一次,不进行循环的话,第四个线程无数据
4、遇到文件结束符停止线程?:True
修改CSV 数据文件设置,清除日志并启动(遇到文件结束符停止线程?:True)
- 线程数为4,当第三个线程执行完后,文件 data.csv 中的三组数据全部取完,线程组停止运行,第四个线程不再执行
5、线程共享模式:当前线程
(1)修改线程组,使每个线程循环执行2次
(2)CSV 数据文件设置,清除日志并启动(线程共享模式:当前线程)
- 每个线程获取一个参数文件,各个线程之间参数取值互不影响
6、线程共享模式:当前线程组
(1)将线程组和 JSR223 Sampler 复制出一份
(2)设置两个线程组线程数都为3,都循环2次,修改下输出代码
log.warn("线程组二:"+ctx.getThreadNum()+";变量1:"+vars.get("var1")+";变量2:"+vars.get("var2"));
(3)CSV 数据文件设置,清除日志并启动(线程共享模式:当前线程组)
当前线程组下的所有线程公用一个参数文件,同一个线程组下的线程之前取值相互影响
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)