一、参数说明


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 数据文件设置,清除日志并启动(线程共享模式:当前线程组

当前线程组下的所有线程公用一个参数文件,同一个线程组下的线程之前取值相互影响

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐