什么是参数化?为什么要参数化?我们都知道接口一般都带有请求参数,有些请求参数在多个接口中都使用固定的值,有些参数在做测试的过程中需要提供多种不同的值,为了避免每个重复的参数在各个接口中都需要赋值一次(有时候可能因为手误还会写错值)或者同一个参数的不同值都需要重新发送一次请求,于是就有了参数化的概念。参数化可以减少很多重复性的工作。
本文主要介绍Jmeter参数化的四种方式的使用,应用场景是加油卡项目的接口。
一、用户定义的变量(参数化)
需求背景:加油卡项目的四个接口(添加加油卡、绑定加油卡、加油卡充值、加油卡消费)中都有一个相同的入参dataSourceId(即第三方平台编号),为了避免在每个接口中都给参数dataSourceId赋一次值(还可能因为手误在某个或多个接口中的值写错了,写错几个就需要修改几个),所以需要对dataSourceId进行参数化(这样即使值写错了也只需要修改一处即可)。
参数化步骤:
1、鼠标右键“加油卡项目”线程组,依次选择添加->配置元件->用户定义的变量:
2、在用户定义的变量界面中,点击“添加”按钮,输入变量的名称,值和描述信息,如下:
可添加多个变量。另外,可通过下方按钮“详细”、“从剪贴板添加”、“删除”、“向上”、“向下”等按钮操作变量。
需要说明的是,用户定义的变量是在测试计划执行过程中变量值不会发生改变的参数,因此一般仅将测试计划中不需要随迭代发生改变的参数设置在此处。比如测试环境的服务器IP地址和端口等。
3、使用变量,获取变量方式:${变量名} 。
以添加加油卡接口为例(其它三个接口设置禁用):
将原来具体的值“abcd”改为“${dataSourceId}”,这样在执行测试计划的时候,“${dataSourceId}”会自动获取到对应的值“abcd”.。
3、执行计划,查看结果树。先添加一个监听器“察看结果树”,然后发送请求。
从上图中可以看到测试执行结果是成功的。
4、将更多的参数定义成变量。
至此,完成用户定义的变量的参数化的使用。
二、CSV数据文件(参数化)
以添加加油卡接口为例。
需求背景:添加加油卡接口中有个入参cardNumber,参数的定义是五位数字,那么测试时就要考虑多种用例情形,如纯数字、带有字符、包含空格等等。一个参数的取值可能对应好多个用例,多个参数的情况对应的用例会更多,面对那么多的用例,我们不可能手动一个用例一个用例的执行,那怎么办呢?这时我们可以考虑用CSV文件提供用例数据,然后将文件导入,只需点击一次执行按钮,就可以批量执行多个用例。
参数化步骤:
1、先创建一个.csv格式的文件(文件位置自己定,记住就好),然后在文件中写上所有测试用例的数据(以添加加油卡接口的cardNumber参数为例),如下:
2、添加CSV数据文件设置元件。鼠标右键“加油卡项目”,依次点击添加->配置元件->CSV数据文件设置,如下:
3、导入.csv格式的文件,设置编码,是否忽略首行等。
(注:左侧菜单树可通过鼠标拖动调整节点位置。)
如果.csv数据文件中有多列,每列是一个参数的值,那么在上图3步中需要把各参数名称按顺序写上,英文逗号隔开。
4、引用变量,同样使用方式:${变量名} 。
5、执行测试,查看结果。
六条测试数据执行六次得出六条测试结果是一致的。(这里执行结果都是成功的是因为此接口没做严格校验。)
以上,就是CSV文件参数化的使用方式。支持csv,txt,dat三种文件格式。
此方法适用于参数取值范围较大的时候使用,该方法具有更大的灵活性。
三、函数助手(参数化)
以添加加油卡接口为例。
需求背景:为了测试接口对其它入参的校验,需要提供合法的卡id编号,即cardNumber入参的值。因为一个卡id只能被添加一次,所以需要使用函数按照规则自动生成卡id,保证每次执行时卡id都是一个新的值。
参数化步骤:
1、调出函数窗口。在菜单栏点击Tools菜单,在子菜单中点击“函数助手对话框”,如下:
2、上图中在函数助手对话框中,选择功能“__RandomString”(功能很多,其它可自行尝试),即生成随机字符串,然后做如下图配置:
将上图中绿框中的表达式拷贝出来,留着备用。
3、使用表达式。
使用方式一:直接写在请求消息体数据参数值处
执行前,需要把CSV数据文件设置禁用,然后把循环次数改为1。
使用方式二:写在用户定义的变量里,然后通过方式:${变量名} 取值。
以上,使用函数助手进行参数化操作完成。
---------------------------------------------------------------------------------------------------------------------
另,
注:上面图中只能获取到.csv文件中的第一行的三列值。
若只有一个线程组,即使设置循环读取次数,每次读取的都是第一行!第一行!第一行!
所以如果想要测试一个接口对不同数据的响应情况,建议选择 CSV data set config 实现。