关于CSV Data Set Config

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

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

参数包括:

  • 文件名

  • 文件编码

  • 变量名称

  • 忽略首行

  • 分隔符

  • 是否允许带引号?

  • 遇到文件结束符再次循环

  • 遇到文件结束符停止线程

  • 线程共享模式

使用示例脚本,需下载示例接口源码并运行。

文件名

需输入数据文件的路径,运行时Jmeter会按路径查找数据文件。如果路径错误,Jmeter会报错。

JMeter提示试图读取一个名为test.txt的文件,但是这个文件不存在或者JMeter没有读取它的权限。


文件编码

编码是计算机用于表示字符的数字或二进制值。以下是一些常见的编码系统及其特点:

  1. ASCII (American Standard Code for Information Interchange)

    • 编码范围:0-127
    • 字符集:基本的英文字符、数字、标点符号和控制字符
  2. Extended ASCII

    • 编码范围:128-255
    • 字符集:在ASCII基础上扩展,包含其他语言的字符
  3. ISO 8859-1 (Latin-1 Character Set)

    • 编码范围:0-255
    • 字符集:扩展了ASCII,包括西欧语言的特殊字符
  4. UTF-8 (Unicode Transformation Format - 8-bit)

    • 编码范围:1-4字节
    • 字符集:支持全球几乎所有语言的字符,包括表情符号等
  5. UTF-16 (Unicode Transformation Format - 16-bit)

    • 编码范围:2字节(BMP)或4字节(辅助平面)
    • 字符集:同UTF-8,但使用固定长度的字节对
  6. UTF-32 (Unicode Transformation Format - 32-bit)

    • 编码范围:固定4字节
    • 字符集:同UTF-8和UTF-16,但每个字符固定占用4字节
  7. GBK (Chinese Internal Code Specification)

    • 编码范围:双字节
    • 字符集:主要用于简体中文
  8. GB2312

    • 编码范围:单字节和双字节
    • 字符集:主要用于简体中文,是GBK的前身
  9. Big5

    • 编码范围:双字节
    • 字符集:主要用于繁体中文
  10. Shift_JIS (Shifting Japanese Industrial Standards)

    • 编码范围:单字节和双字节
    • 字符集:主要用于日文
  11. EUC-JP (Extended Unix Code - Japanese)

    • 编码范围:多字节
    • 字符集:主要用于日文
  12. 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,a7a1获取第1列数据,a7获取第7列数据。a1第1次获取111a1第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