在使用JMeter的时候,往往需要参数化一些数据,常用到的就是CSV Data Set Config,一般使用.csv或者.dat或者.txt结尾的文件。
3.1字段解释
Filename:
填写测试数据的文件名。可以写绝对路径,注意复制文件路径后,需要把反斜杠“\”改为斜杠“/”。建议采用相对路径,避免脚本迁移时需要修改。和测试脚本在同一个目录中时,仅需要测试数据文件名称。
File encoding:
参数文件的编码格式。推荐选择 UTF-8,也可能为gbk、gb2312。
Variable Names:
对应参数文件每列的变量名。也是后续引用的标识符,建议采用有意义的英文标示,以英文逗号分隔,参考格式:aaa,bbb,ccc。
Ignore first line:
是否忽略首行,首行为字段名称时,选择True。
Delimiter:
参数文件分隔符。与参数文件中的分隔符保持一致即可。若数据文件中使用tab分隔,则此处填写“\t”。若仅第一行有分隔符,则后面行的第二个参数,默认使用第一行的第二个参数。不建议使用该方法,尽量保证每行的每一个参数都有值。
Allow quoted data:
是否允许引用数据。默认设置为 false。设置为true时,可以传递带英文双引号内的数据,例如”a”,传递的参数为去掉双引号之后的a。设置为true时,可以传递带英文单引号的数据,例如’a’,传递的参数为带单引号的’a’。设置为false时,带单双引号均会报错。
Recycle on EOF?:
是否循环读取参数文件内容。默认设置为 true。设置为 true 时,当已经读取完参数文件内的测试用例数据,还需要继续获取用例数据时,此时会循环读取参数文件数据;设置为 false 时,若已至文件末尾,则不再继续读取测试数据。通常在 线程组的线程数 * 线程组的循环次数 > 参数文件行数时,才需要将此项设置为 true。
Sop thread on EOF?:
当读取到参数文件末尾时,是否停止读取线程。默认为 false。当 Recycle on EOF? 设置为 true 时,此项不起任何作用。当且仅当 Recycle on EOF? 为 false 时,此项配置才生效。
若为 true,则在读取到参数文件行末尾时,终止参数文件读取线程。例如:线程组的线程数 * 线程组的循环次数 = 10,参数文件行数 = 7,那么将在第 8 次开始停止线程。
若为 false,此时线程会继续读取,但是会请求错误,因此时读取的数据为 EOF。以上同例,自第 8 次开始,线程的请求数据为 EOF。
是否循环 |
是 |
否 |
是 |
否 |
读取结束是否停止 |
是 |
否 |
否 |
是 |
结果 |
循环读取 |
读取到结束后,其余请求EOF |
循环读取 |
仅读取到结束 |
Sharing mode:
共享模式,即参数文件变量作用域。前提是该配置原件位于测试计划下方,设置才会生效。该配置原件在线程组下方时,三个选项没有区别,均是依次使用每一行参数。
All threads默认:当前测试计划中的所有线程组中的所有的线程均有效。
Current thread group:当前的线程组中的线程有效
Current thread:当前线程有效。
下面通过一个例子介绍一下Sharing mode三种模式数据的取数策略;
测试计划结构:
测试计划
线程组A--线程1、线程2
线程组B--线程1、线程2
数据文件内容为:12345678
1)数据文件置于线程组A子节点
只有线程组A可以调用数据文件中的数据;,数据组B不可以调用数据文件中的数据;
2)数据文件置于和线程组A、线程组B同一级别节点
线程组A和线程组B都可以调用数据;
线程共享模式为:所有线程
所有线程执行1次,线程1-线程4的取数为:1234
所有线程执行2次,第一次取数为:1234,第二次取数为:5678
结论:线程共享模式为所有线程时,所有线程组共享同一个文件数据,同一次,每个线程的取数都不同;
线程共享模式为:当前线程组
所有线程执行1次,线程1-线程4的取数为:1122
所有线程执行2次,第一次取数为:1122,第二次取数为:3344
结论:线程共享模式为当前线程组时,当前线程组共享同一个文件数据,同一次,每个线程组中的不同线程取数相同;不同线程组中线程取数不同;
线程共享模式为:当前线程
所有线程执行1次,线程1-线程4的取数为:1111
所有线程执行2次,第一次取数为:1111,第二次取数为:2222
结论:线程共享模式为当前线程时,所有线程共享同一个文件数据,同一次,每个线程的取数都相同。
3.2实例操作
1、 准备一个txt的测试数据文件,并放到和脚本同级目录中。
2、 配置csv data set config
3、 添加一个http请求,并使用参数
4、 查看结果树