关于CSV Data Set Config
它允许你从CSV、TXT文件中读取数据,在测试计划的运行过程中将这些数据作为变量使用。这在进行性能测试时非常有用,尤其是当你需要模拟大量用户使用不同的输入数据时。
通过右键-添加-配置元件-CSV Data Set Config
添加,可以添加在测试计划、线程组、取样器
下,作用域也随之变化。
参数包括:
-
文件名
-
文件编码
-
变量名称
-
忽略首行
-
分隔符
-
是否允许带引号?
-
遇到文件结束符再次循环
-
遇到文件结束符停止线程
-
线程共享模式
文件名
需输入数据文件的路径,运行时Jmeter会按路径查找数据文件。如果路径错误,Jmeter会报错。
JMeter提示试图读取一个名为test.txt的文件,但是这个文件不存在或者JMeter没有读取它的权限。
文件编码
编码是计算机用于表示字符的数字或二进制值。以下是一些常见的编码系统及其特点:
-
ASCII (American Standard Code for Information Interchange)
编码范围:0-127
字符集:基本的英文字符、数字、标点符号和控制字符
-
Extended ASCII
编码范围:128-255
字符集:在ASCII基础上扩展,包含其他语言的字符
-
ISO 8859-1 (Latin-1 Character Set)
编码范围:0-255
字符集:扩展了ASCII,包括西欧语言的特殊字符
-
UTF-8 (Unicode Transformation Format - 8-bit)
编码范围:1-4字节
字符集:支持全球几乎所有语言的字符,包括表情符号等
-
UTF-16 (Unicode Transformation Format - 16-bit)
编码范围:2字节(BMP)或4字节(辅助平面)
字符集:同UTF-8,但使用固定长度的字节对
-
UTF-32 (Unicode Transformation Format - 32-bit)
编码范围:固定4字节
字符集:同UTF-8和UTF-16,但每个字符固定占用4字节
-
GBK (Chinese Internal Code Specification)
编码范围:双字节
字符集:主要用于简体中文
-
GB2312
编码范围:单字节和双字节
字符集:主要用于简体中文,是GBK的前身
-
Big5
编码范围:双字节
字符集:主要用于繁体中文
-
Shift_JIS (Shifting Japanese Industrial Standards)
编码范围:单字节和双字节
字符集:主要用于日文
-
EUC-JP (Extended Unix Code - Japanese)
编码范围:多字节
字符集:主要用于日文
-
KOI8-R (KOI8 Russian)
编码范围:单字节
字符集:主要用于俄文
这些编码系统各有特点,适用于不同的语言和场景。随着全球化的发展,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、请求2同属一个线程),从CSV Data Set Config
中所获取的数据是一样的。
运行结果
线程:线程组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)第三次循环的两个线程都获取第三行数据。
编辑
其中忽略首行、是否允许带引号、遇到文件结束符再次循环、遇到文件结束符停止线程、线程共享模式
的选项中还有编辑
选项,因未使用过,我并不知怎样使用,读者们可以去探究一番。
© 转载需要保留原始链接,未经明确许可,禁止商业使用。CC BY-NC-ND 4.0
...