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

出参

出参是从当前请求的 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="347290348">
<input name="token" value="acdfo4dfopasdf44ddvvm">
...
<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. 单击创建压测页面右上角的参数列表,可查看已创建的出参。单击出参参数名称或 add 图标,系统将自动复制参数内容。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

    带检查点的 API 压测过程中,可以查看业务成功率:

    success_rate