性能测试-JMeter参数化(1)CSV Data Set Config

1、参数化的定义

所谓参数化,就是将客户端发送给服务器处理的数据预先保存到一个参数中的过程。服务器

通常来讲,对于功能测试,当用不一样的数据测试相同的功能时,咱们能够使用参数化来精简测试;分布式

对于性能测试,为了真实模拟多个用户的操做行为或应对系统对多个用户同时操做的特殊限制(好比数据惟一性要求),须要使用参数化来解决这些问题。ide

JMeter提供了很是多的参数化的方式和手段,常见有:函数

1.配置元件 CSV_Data_Set_Config

2.内置参数化函数,好比__CSVRead()

这1节咱们主要讲下CSV_Data_Set_Config参数化。性能

配置项测试

Configure the CSV Data Source:编码

1.Filename:操作系统

要读取的数据文件的路径或名称。能够使用绝对路径或相对路径。线程

当使用相对路径表示文件路径时,测试计划所在目录为当前目录。设计

当JMeter以分布式模式运行时,参数化的数据文件须要复制到每台Slave中,而且要设置相同的目录结构。

2.File Encoding:

若没有设置则以操做系统的字符编码去读取数据文件。能够指定以何种编码去读取数据文件,以防止出现乱码。

好比操做系统默认字符编码为GBK,而数据文件(CSV文件)的编码为UTF-8,则读出来的数据确定为乱码,在此状况下要设置File Encoding为“UTF-8”才能读取成功。

3.Variable Names(comma-delimited):

用于保存数据文件列值的变量名列表。变量名之间用,(逗号)分隔。若变量名列表为空,JMeter则将数据文件的第一行各字段值做为各个变量名(不管是否忽略第一行)。

好比数据文件中有以下两行值:

张三,男,25

李四,女,20

在没有设置变量名列表的状况下,会将第一行的三个值当作变量名:

张三,男,25

${张三},${男},${20}的值分别是:李四,女,20

4.Ignore first line (only used if Variable Names is not empty):

是否忽略数据文件的第一行。这个选项只有在设置了参数名列表时才起做用。

选择True表示忽略第一行,选择False表示不忽略第一行。通常用在数据文件中有列标题时,由于标题不是值,故考虑能够忽略

第一行。

好比数据文件中有以下值:

name,sex,age

张三,男,25

李四,女,20

若此项设置为False,则会将name,sex,age当作变量的值读取,设置为True会忽略此行,从第二行开始读取。

5.Delimiter (use'\t'for tab):

数据文件中字段的分隔符。根据分隔符将记录拆分保存到定义的变量中。默认值为,(逗号)分隔。

6.Allow quoted data?:

数据文件中的值是否容许使用双引号。True表示容许,False表示不容许。

通常用于当值中包含分隔符时,可考虑将值用双引号括起来,屏蔽分隔符的特殊含义。

好比记录了商品编号,名称,价格的数据文件:

goods_id,goods_name,price

1,Watch_wanguo,"1,500,000"

若没有使用双引号,商品价格为1,使用了双引号,商品价格为

1,500,000

7.Recycle on EOF?:

读取到达数据文件结束(EOF即end of file)处,是否回到文件开始出从新读取。

True循环读取,False不循环读取。

8.Stop thread on EOF?:

读取到达数据文件结束处,是否中止线程。True中止线程,测试再也不进行;

False不中止线程,继续循环取值运行测试。

9.Sharing mode:

共享模式。All threads全部线程,Current thread group当前线程组,Current thread当前线程。

1)All threads:

全部线程共享同一个文件。在测试中数据文件只打开一次,每一个线程读取不一样行的参数值。

每一个线程读取的值与线程启动的前后顺序相关;不论线程引用参数与否,每一个线程都会分配一个参数值。

2)Current thread group:

当前线程组。测试计划下的每一个线程组都单独打开一个参数文件。

3)Current thread:

当前线程。每一个线程都单独打开一个参数文件。在此模式下,若每一个线程须要从不一样的值集中取值,

能够设置一组参数化数据文件,每一个线程对应一个文件。将线程编号与数据文件名关联起来将能够了。

好比一组文件为:

testdata1.csv,testdata2.csv,... ,

testdatan.csv

线程编号能够经过内置函数${threadNum}来获取,则数据文件名可设置为: testdata${threadNum}.csv。

举个例子:

这里之前面介绍过的查询被购买商品总金额接口为例来说解:

参数化步骤:

1.肯定接口参数中哪些请求参数须要进行参数化

在设计测试用例时,咱们针对商品编号,商品规格,商品数量来准备数据,

故对id,attr,number参数化

2.将测试数据放在外部一个文档保存,文件类型为csv或txt -->

.csv or .txt

新建一个testdata.csv,一行写一个用例,多个参数值默认用,分隔:

case_name,id,attr,number

case1,9,226,3

case2,,226,1

case3,9,,1

case4,9,226,

3.添加并配置CSV Data Set Config配置元件

4.在请求中将写死的数据用第3步中定义的变量进行替换

data --> ${varName}

好比 ${attr}

5.配置参数化

5.1 将线程数设置为用例的个数

5.2 循环控制请求的次数

a.添加一个循环控制器,设置其循环次数为测试用例个数

b.将CSV Data Set Config配置元件与请求移到循环控制器下面

相关文章
相关标签/搜索