文章目录
一、CSV Data Set Config(CSV 数据文件设置)参数说明
CSV 数据文件变量是指从外部 csv 文件读取数据出来作为变量
选择请求 >>> 添加 >>> 配置元件 >>> CSV 数据文件设置
设置 CSV 数据文件(Configure the CSV Data Source)
(1)、文件名(Filename):csv 文件路径,可以是绝对路径或者相对路径
建议设置成相对路径,填写相对于脚本的路径,后续远程压测或迁移时,可以更好的找个文件
(2)、文件编码(File encoding):编码格式,与所选文件编码格式保持一致
(3)、变量名称(西文逗号间隔)(Variable Names (comma-delimited)):如果文件中只有一个变量,直接写变量名,如果有多个变量,用英语的逗号隔开。例:var1,var2
(4)、忽略首行(只在设置了变量名称后才生效)(Ignore first line (only used if Variable Names is not empty)):
-
True:设置为 True 时,从文件第二行开始读取,此时文件第一行为变量名,例:var1,var2;设置为 True,变量名称可以不用设置,在文件第一行设置即可
-
False:一般设置为 False,文件从第一行开始设置变量数据,在变量名称中设置名称
(5)、分隔符(用 ‘\t’ 代替制表符)( Delimiter (use ‘\t’ for tab)):根据文件中的分隔符进行填写,默认:,
(6)、是否允许带引号?(Allow quoted data?):
-
True:参数文件包含引号时,实际的数据为引号中的数据。比如参数文件中的数据为"1,2",当使用该参数时,实际取得值为1,2
-
False:参数文件包含引号时,实际取得值为全部的值。比如参数文件中的数据为"1,2",当使用该参数时,实际取得值为"1,2"会取成两个参数
(7)、遇到文件结束符再次循环?(Recycle on EOF?):
-
True:参数文件中的数据循环使用,测试按照线程组中的设置执行。比如csv 文件共有 10 条记录,但线程数有 15 个,循环 10 次后,重头开始循环取值
-
False:参数文件不再循环遍历取值
(8)、遇到文件结束符停止线程(Stop thread on EOF?):
-
True:当执行完参数文件中所有参数后,直接停止线程
-
False:不停止
(9)、线程共享模式(Sharing mode):
-
所有线程(All threads):参数文件对所有线程共享,这包括同一测试计划中的不同线程组(测试计划下的所有线程组下的所有线程共享参数文件,所有线程之前参数取值互相影响,线程在同一次迭代下取值相同)
-
当前线程组(Current thread group): 只对当前线程组中的线程共享(当前线程组下的所有线程公用一个参数文件,同一个线程组下的线程之前取值相互影响,线程在同一次迭代下取值相同)
-
当前线程(Current thread): 仅当前线程获取(即每个线程获取一个参数文件,各个线程之间参数取值互不影响,线程在同一次迭代下取值相同)
当参数文件的位置与线程组在同级下,线程组下存在循环控制器时,循环控制器下的参数取值相同
线程组下存在循环控制器时,当参数文件在循环控制器下,循环控制器下每次迭代时重新取值
线程组下存在仅一次控制器,参数文件在仅一次控制器下,当参数在仅一次控制器下取值一次之后,之后无论哪次迭代参数取值都不变,类似于unique once
注:创建 CSV 文件最好用 notepad 创建,编码格式为 UTF-8
二、测试计划演示
(1)、编写一个文件名为 data.csv 的文件,并添加数据
(2)、测试计划右键 <<< 添加 <<< 配置元件 <<< CSV Data Set Config(CSV 数据文件设置)
-
文件名:文件所在路径
-
文件编码:中文使用 utf-8
-
变量名称:var1,var2
-
是否允许带引号?:文件中,有个参数为 “张,三”,此处选择 True 允许,去值时,会将 “张,三” 当一个值;如果选 False,会当两个值取 “张” “三”
(3)、测试计划右键 <<< 添加 <<< 线程(用户) <<< 线程组
- 线程数:3
(4)、线程组右键 <<< 添加 <<< 取样器 <<< JSR223 Sampler
log.warn("线程:"+ctx.getThreadNum()+",变量1:"+vars.get("var1")+",变量2:"+vars.get("var2"));
(5)、设置日志级别为 WARN,打开日志,点击启动
选项 <<< 日志级别 <<< WARN
选项 <<< 日志查看
- 可以看到3个线程各取了一组变量
三、测试计划设计
脚本在测试计划演示脚本基础上验证
3.1、忽略首行:True
(1)、修改 data.csv 文件中数据
(2)、修改 CSV Data Set Config(CSV 数据文件设置),清除日志并启动
-
删掉变量名称
-
忽略首行选择 True
3.2、是否允许带引号?:False
修改 CSV Data Set Config(CSV 数据文件设置),清除日志并启动
- data.csv 文件中第一组数据中的 “张,三” ,取值时,只取了 "张
3.3、遇到文件结束符再次循环?:False
(1)、修改线程组
- 将线程数改为 4
(2)、修改 CSV Data Set Config(CSV 数据文件设置),清除日志并启动
- 文件中只有3组数据,而线程数为4,当执行第四个时,文件中的数据已循环取出一次,不进行循环的话,第四个线程无数据
3.4、遇到文件结束符停止线程?:True
修改 CSV Data Set Config(CSV 数据文件设置),清除日志并启动
- 当第三个线程执行完后,文件 data.csv 中的三组数据全部取完,线程组停止运行,第四个线程不再执行
3.5、线程共享模式:当前线程
(1)、修改线程组
- 每个线程循环执行2次
(2)、修改 CSV Data Set Config(CSV 数据文件设置),清除日志并启动
- 每个线程获取一个参数文件,各个线程之间参数取值互不影响
3.6、线程共享模式:当前线程组
(1)、将线程组和 JSR223 Sampler 复制出一份
(2)、设置两个线程组线程数都为3,都循环2次,修改下输出代码
log.warn("执行线程组二,线程:"+ctx.getThreadNum()+",变量1:"+vars.get("var1")+",变量2:"+vars.get("var2"));
(3)、修改 CSV Data Set Config(CSV 数据文件设置),清除日志并启动
- 当前线程组下的所有线程公用一个参数文件,同一个线程组下的线程之前取值相互影响