在实际压测场景中,经常同时使用出参和检查点功能来从业务维度判断请求是否成功。本文介绍出参和检查点的含义,以及如何提取出参和配置检查点。

出参

出参是从当前请求的Response中截取需要的内容,在后续的请求中作为参数使用。在一个压测请求API中可以定义多个出参。

api_configuration

出参的配置项说明如下。

配置项 说明
出参名 只能包含英文字母、数字和下划线。
来源 标记Response的解析方式,可选择以下类型:
  • Body:JSON :以JSON格式解析Response Body
  • Body:TEXT:以TEXT格式解析Response Body
  • Header:K/V :以键值对格式解析Response Header
  • Cookie:K/V :以键值对格式解析Cookie
  • 响应状态码:提取Response中的状态码
解析表达式 从Response截取需要的内容,对应到当前变量。
第几个匹配项 仅用于来源Body:TEXT时。若上一步定义的解析表达式在Response中有多个匹配时,指定第几个字符串作为出参。从0开始,-n表示倒数第n个,取值区间为 [-99,99]。如果想要取随机匹配项,请填写random
说明 当来源使用Header:K/V时,解析表达式的格式必须是标准的MIME类型。

若您不能判断解析表达式是否正确时,可以在场景调试中测试解析表达式并设置出参,具体操作请参见测试出参正则表达式

Body:TEXT类型

TEXT格式解析支持任意文本格式且可使用正则表达式提取。当一个正则表达式有多个匹配项时,可指定第几个匹配项,默认用0表示匹配第一个。

API的Response示例如下:

<input name="id" value="34729XXXX">
<input name="token" value="acdfo4dfopasdf44dXXXX">
...
<script>
    var planId=4587;
    var planId=5689;
    var planId=8906;
</script>
            
出参的值 解析表达式 匹配数字
获取name为id的value <input name="id" value="([0-9]*)"> 0
获取name为token的value name="token" value="([A-Za-z0-9]*)" 0
获取第三个planId的值 var planId=([0-9]*); 2
随机planId的值 var planId=([0-9]*); random

格式规范:

  • 顺序匹配原则:按照顺序匹配出参信息。一旦匹配到之后即赋予该出参变量值,不会再匹配后续的信息,故需保证解析表达式的唯一性(除非多个中选第一个即可)。

  • 被匹配的文本内容不能包含大括号({})、小括号(())等特殊字符。

  • 使用正则表达式提取JSON类型的Response时,无需在K/V间隔的冒号后面加空格(JSON格式化展现中加入空格是为了展现优化)。可查看Response原文信息,参考下图:

    response_body

Body:JSON类型

JSON格式解析支持两种类型的返回信息:application/json和text/json。

API的Response Body示例如下:

{
    "info": "success",
    "message": "处理成功",
    "data": {
        "id":13509, "code":0,
        "items": [
            {"name": "name1", "value": "1234"},
            {"name": "name2", "value": "8448"},
            {"name": "name3", "value": "1298"},
            {"name": "name4", "value": "3049"},
            {"name": "name5", "value": "7648"}
        ]
    }
}
            
期望获取出参的位置 解析表达式
获取info的值 info
获取data的id的值 data.id
获取items第一个对象(支持相对位置)的value的值 data.items[0].value
获取items倒数第二个对象(支持相对位置)的value的值 data.items[-2].value
获取items整个数组 data.items[]
获取items数组中随机一个对象 data.items[random]

Cookie : K/V和Header : K/V类型

Cookie : K/V和Header : K/V分别用于提取Cookie字段和Header字段,解析表达式中直接写需要提取的Key即可。例如,Cookie信息为 “token=1234;path=/”,需要提取token的值,则解析表达式直接填写 “token” 即可。

响应状态码类型

响应状态码支持提取请求的状态码,一般情况下用于检查点或者条件跳转(不同状态码返回不同页面信息)。

出参示例

在理财业务中,需要根据用户的消费能力,推荐适当产品。则需要在前置接口中提取出消费能力等级作为出参,在当前的产品推荐接口中,使用该出参。

操作步骤如下:

  1. 创建压测页面,添加消费能力(含出参)产品推荐 API,并填写对应的URL。
  2. 消费能力(含出参) API中,基于请求的响应详情,提取消费能力信息作为出参。填写出参名(如output)和具体的解析表达式(如data.items[0].value)。
  3. 单击创建压测页面左下角的参数列表,可查看已创建的出参。单击出参参数名称或复制图标图标,系统将自动复制参数内容。copy_parameter
  4. 产品推荐 API的Body中带入已提取的出参,在Body定义编辑框内,粘贴参数内容。ex_config_body

    此外,您也可以对Body内容进行编辑,如组合字符串、参数或函数等。

检查点

配置检查点可以从从业务维度判断请求是否成功。检查点可分为响应状态码、响应Header、响应Body和出参4种类型。配置检查点后,在压测实时报表和压测报告中都会展现业务成功或失败的信息,为判断是否继续压测提供参考。

检查点

检查点参数说明:

  • 多个检查点之间是“与”的关系。
  • 当Value为字符串(非纯数字)时,支持“等于”、“不等于”、“包含”、“不包含”、“属于”、“不属于”和“正则匹配”等检查条件。
  • 当Value为数字时,支持“大于”、“大于等于”、“等于”、“小于等于”、“小于”、“属于”、“不属于”和“正则匹配”等检查条件。
  • “存在”、“不存在”所有类型数据均可使用,仅判断检查对象是否存在。
  • “属于”、“不属于”支持正负整数、0、字符串。
    • 数值:请按照标准的数学表达式规范填写。示例如下:
      • 表示闭区间:[-20,20]
      • 表示集合:{[-200,200],-1,2}
      说明 当数值集合中不包括负整数时,旧表达式仍然生效,但不推荐使用。例如,[200~300,1],可表示包括1、200至300闭区间的整数的集合。
    • 字符串示例:{“abc”,”bcd”,”200”,”-200”,”已报名”,”报名成功”}

检查点示例

对某业务压测时,压测请求同时满足以下两个条件则代表业务正常:

  1. export_cookie符合预期,如export_cookie包含sandbox。
  2. 响应状态码在200~399范围内。

在此场景中需要同时使用出参和检查点,分别配置如下:

  1. 在对应API的出参定义页签进行配置,如下图所示。ex_sc_config_participation
  2. 在对应API的检查点(断言)页签进行配置,如下图所示。sc_ex_config_check_point