关于CSV Data Set Config

它允许你从CSV、TXT文件中读取数据,在测试计划的运行过程中将这些数据作为变量使用。这在进行性能测试时非常有用,尤其是当你需要模拟大量用户使用不同的输入数据时。

通过 右键-添加-配置元件-CSV Data Set Config 添加,可以添加在 测试计划、线程组、取样器 下,作用域也随之变化。

参数包括:

是否允许带引号?

遇到文件结束符再次循环

遇到文件结束符停止线程

线程共享模式

这些编码系统各有特点,适用于不同的语言和场景。随着全球化的发展,UTF-8因其兼容性和效率成为了最广泛使用的编码方式。

推荐使用UTF-8编码,因为它可以表示任何语言的字符,并且是Web标准。几乎所有的现代文本编辑器、浏览器和编程语言都支持UTF-8。如遇到一些UTF-8无法兼容的语言,可以选择或编辑添加其他编码。

变量名称

数据文件中,1列对应1个变量,从左依次对应。变量名称不应多于列数。每次读取1行。以TXT文件为例:

111,222,333,444,555,666,777
aaa,bbb,ccc,ddd,eee,fff,ggg

数据文件中有5列,代表有7个变量。

变量名称可以输入 a1,a2,a3,a4,a5,a6,a7 a1 获取第1列数据, a7 获取第7列数据。 a1 第1次获取 111 a1 第2次获取 aaa

忽略首行

如果数据文件的第一行包含列标题,可以使用此选项跳过第一行,只读取数据。以csv文件为例:

第1行只是标题,实际上并不需要标题数据。这种情况下可以选择 True ,不获取第1行。

分隔符

不建议更改,使用 ,(英文符) 即可。

TXT文件中列于列之间要用 , 分隔。

是否允许带引号

以TXT文件为例:

"444"

选择 True ,引用变量时,获取的值会是 444

选择 False ,引用变量时,获取的值会是 "444"

遇到文件结束符再次循环

文件结束符(End Of File,简称EOF)是一个用于表示文件内容结束的信号,在txt、csv等文件的未尾以 <EOF> 结束。当程序读取文件时,以 <EOF> 来确定是否已经到达文件的末尾。

当读取到文件的结束符,线程或循环还没结束时。选择 True ,接下来的线程或循环会继续从文件的首行开始(可能忽略首行)。选择 False ,接下来的线程或循环会一直获取文件的结束符 <EOF>

遇到文件结束符停止线程

当读取到文件的结束符,线程或循环还没结束时。选择 True ,接下来的线程或循环不会再继续。选择 False ,不会影响到线程或循环的继续。

线程共享模式

其提供了多种模式来指定如何使用数据文件,模式共有:

当前线程组

我们可以使用txt文件作为数据文件,文件内容如下:

111,222,333,444
aaa,bbb,ccc,ddd
888,999,1010,2020
fff,iii,jjj,kkk
6060,7070,8080,9090
000,ppp,qqq,rrr

所有线程

默认的共享模式,所有线程共享同一个CSV文件,所有线程将按照执行顺序依次读取CSV文件中每一行的数据(一个线程一行数据),直到文件结束。

示例Jmeter脚本

测试计划下添加查看结果树、CSV 数据文件设置、线程组1、线程组2

CSV 数据文件设置中配置参数
文件名: txt文件的路径
文件编码: UTF-8
变量名称: a,b,c,d
线程共享模式: 所有线程

线程组1下添加HTTP请求-1、HTTP请求-2

线程组2下添加HTTP请求-3、HTTP请求-4

所有取样器的请求地址: HTTP://127.0.0.1:5000/GetList/

所有取样器的请求方式: GET

HTTP请求-1中添加参数。名称1: a 值1: ${a} ;名称2: b ,值2: ${b}

HTTP请求-2中添加参数。名称1: c 值1: ${c} ;名称2: d ,值2: ${d}

HTTP请求-3中添加参数。名称1: a 值1: ${a} ;名称2: b ,值2: ${b}

HTTP请求-4中添加参数。名称1: c 值1: ${c} ;名称2: d ,值2: ${d}

线程: 线程组1 1-1 的执行时间比线程: 线程组2 2-1 早,所以线程: 线程组1 1-1 会获取txt文件第一行的数据,即 HTTP请求-1获取111、222;HTTP请求-2获取333、444

HTTP请求-3获取aaa、bbb;HTTP请求-4获取ccc、ddd ,获取第二行数据。

若这两个线程组分别有多个线程,而且文件中的数据足够多,所有的线程按照执行顺序依次获取每行数据。

当前线程组

该模式下,只有同一个线程组内的线程会共享CSV文件。比如数据文件有10行数据,并且有10个线程在同一个线程组中,每个线程将分别读取一行数据。不同的线程组分别独立从 CSV Data Set Config 获取数据。

示例Jmeter脚本

测试计划下添加查看结果树、CSV 数据文件设置、线程组1、线程组2

CSV 数据文件设置中配置参数
文件名: txt文件的路径
文件编码: UTF-8
变量名称: a,b,c,d
线程共享模式: 所有线程

线程组1、线程组2的线程数配置为: 2

线程组1下添加HTTP请求-1、HTTP请求-2

线程组2下添加HTTP请求-3、HTTP请求-4

所有取样器的请求地址: HTTP://127.0.0.1:5000/GetList/

所有取样器的请求方式: GET

HTTP请求-1中添加参数。名称1: a 值1: ${a} ;名称2: b ,值2: ${b}

HTTP请求-2中添加参数。名称1: c 值1: ${c} ;名称2: d ,值2: ${d}

HTTP请求-3中添加参数。名称1: a 值1: ${a} ;名称2: b ,值2: ${b}

HTTP请求-4中添加参数。名称1: c 值1: ${c} ;名称2: d ,值2: ${d}

同线程组的两个线程,分别获取文件中第一行、第二行的数据。线程: 线程组1 1-1 获取第一行数据,线程: 线程组1 1-2 获取第二行数据。

不同线程组之间互相独立。线程: 线程组1 1-1 获取第一行数据,线程: 线程组2 2-1 都获取第一行数据。

当前线程

该模式下,各个线程相互独立,分别独立从 CSV Data Set Config 获取数据。

示例Jmeter脚本

测试计划下添加查看结果树、CSV 数据文件设置、线程组1、线程组2

CSV 数据文件设置中配置参数
文件名: txt文件的路径
文件编码: UTF-8
变量名称: a,b,c,d
线程共享模式: 当前线程

线程组1、线程组2的线程数配置为: 2

线程组1下添加HTTP请求-1

线程组2下添加HTTP请求-2

所有取样器的请求地址: HTTP://127.0.0.1:5000/GetList/

所有取样器的请求方式: GET

HTTP请求-1中添加参数。名称1: a 值1: ${a} ;名称2: b ,值2: ${b}

HTTP请求-2中添加参数。名称1: a 值1: ${a} ;名称2: b ,值2: ${b}

另外在使用 CSV Data Set Config 时,还需注意循环次数。

配置 所有线程 ,如果有2个线程组、这两个线程组都是2个线程,线程组(A)有3次循环

执行时,首先两个线程组共四个线程获取文件的前四行数据,然后线程组(A)第二次循环获取第五、六行数据,线程组(A)第三次循环获取第七、八行数据后结束。

配置 当前线程组 ,如果有2个线程组、这两个线程组都是2个线程,线程组(A)有3次循环

执行时,首先线程组相互独立,两个线程组的两个线程都从数据文件中获取前两行数据,然后线程组(A)第二次循环获取第三、四行数据,线程组(A)第三次循环获取第五、六行数据后结束。

配置 当前线程 ,如果有2个线程组、这两个线程组都是2个线程,线程组(A)有3次循环

执行时,首先各个线程相互独立,两个线程组共四个线程都从数据文件中获取第一行数据,然后线程组(A)第二次循环的两个线程都获取第二行数据,线程组(A)第三次循环的两个线程都获取第三行数据。

其中 忽略首行、是否允许带引号、遇到文件结束符再次循环、遇到文件结束符停止线程、线程共享模式 的选项中还有 编辑 选项,因未使用过,我并不知怎样使用,读者们可以去探究一番。