meterSphere(四)接口自动化,测试场景自定义变量


需求

同一个接口,要输入不同的测试数据,可以用测试场景中的自定义变量来进行参数化

自定义变量类型

常量

  • 定义
    1)变量名:变量名称,后续调用直接 ${变量名} 调用

    2)值:变量值,可以使用Jmeter的内置函数

  • 调用
    直接使用 ${变量名} 调用

  • 举个例子
    新增一个常量,变量名为 test_constant ,报文中可以用 ${test_constant} 调用

列表

定义

  • 变量名:列表的变量名称
  • 值:多个枚举值之间用英文逗号分隔

调用

  • foreach循环中,直接使用 for i in 变量名,i会依次取得列表中的值;
  • 可以直接用 ${变量名_n}的形式,取得对应的值,n为值在列表中的位置,从1开始

举个例子

列表定义变量名为 test_list,变量值为 cat,dog,rabbit

  • ForEach循环

    直接for value in test_list, value会依次取得列表中的值,即cat,dog,rabbit

    运行之后,这个用例会执行三次,

    请求的报文依次为:

    {"test_list":"cat"}
    {"test_list":"dog"}
    {"test_list":"rabbit"}
    
    
  • 获取列表中指定位置的值

    指定位置从1开始

    比如,要获取dog,那么变量直接写成${test_list_2}

CSV

定义

  • 变量名:CSV文件的变量名似乎并没有什么实际的用途,因为调用的时候是不需要用到这个变量名的

  • 配置:上传的一个CSV文件,CSV文件首行就是列名,后续直接使用 ${列名}调用变量

  • Encoding:文件编码,可不填

  • 分隔符:默认逗号,一般不改

  • 是否允许带引号 : 默认False

调用

在循环计数器中调用,直接使用 ${列名}调用

举个例子

  • 新建CSV文件

  • 接口场景中,添加一个循环控制器,

  • 变量用 ${列名} 调用,接口请求报文如下:

{
	"facilityCode": "${header_facilityCode}",
	"companyCode": "${header_companyCode}",
	"clientCode": "${header_clientCode}",
	"sourcePlatformCode": "${header_sourcePlatformCode}"
}
  • 循环三次,每次依次取得CSV中中每一行的值,接口请求报文如下:
{
	"facilityCode": "basic_facility_01",
	"companyCode": "basic_company_01",
	"clientCode": "OFS",
	"sourcePlatformCode": "OFS"
}

// 这个地方有个小问题,我本来是想模拟 "facilityCode":null , 但是貌似使用csv实现不了,还是会变成字符串
{
	"facilityCode": "null",
	"companyCode": "basic_company_01",
	"clientCode": "OFS",
	"sourcePlatformCode": "OFS"
}

// csv中不填,报文就会自动识别成空字符串""
{
	"facilityCode": "",
	"companyCode": "basic_company_01",
	"clientCode": "OFS",
	"sourcePlatformCode": "OFS"
}

计数器

定义

  • 变量名:变量的名称,后续调用用 ${变量名} 调用

  • 开始:起始值,包含这个值

  • 结束:结束值,包含这个值

  • 增量:即步长

  • 输出格式:就是格式化,比如,原本准备输出值 1,输出格式定义为 000,则输出的值变成 001

调用

一般在循环计数器中使用,使用 ${变量名} 即可调用,每次循环,循环计数器的值会自动化加一

举个例子

  • 新建一个循环计数器

  • 循环计数器从1到4,如果循环次数超过循环计数器,则从头再次开始

  • 总共循环5次,每次循环的报文如下:

{"test_count":"001"}
{"test_count":"002"}
{"test_count":"003"}
{"test_count":"004"}
{"test_count":"001"}

随机数

定义

  • 变量名:变量的名称,使用 ${变量名} 调用

  • 最小值:随机的最小值

  • 最大值:随机的最大值

  • 输出格式:就是格式化,比如,原本准备输出值 1,输出格式定义为 000,则输出的值变成 001

调用

直接使用 ${变量名} 调用即可

举个例子

  • 新建一个随机数的场景变量 test_random ,随机数最小为0,最大为10

  • 添加一个循环计数器,请求报文中,直接用 ${test_random}调用

  • 循环3次,每次取得一个随机数,每次请求的报文如下:

    {"test_random":"6"}
    {"test_random":"0"}
    {"test_random":"1"}
    

总结

以上就是自定义变量的一些用法,但是目前实际测试接口用到的比较少,主要原因如下:

  • 需要测试字段为null的场景,使用csv无法实现,或者说,目前我还没找到能够实现的方式;

  • 接口不太规范,不同的测试数据请求接口,得到的结果报文都不太相同,特别是接口返回失败的时候,msg都不太一样,导致无法使用同一个断言进行判断

相关