全部产品
云市场

出参与断言

更新时间:2019-06-14 17:03:01

出参是从当前请求的 Response 中截取需要的内容,设置为断言,或在后续的请求中作为参数使用。断言用于判断业务是否成功,将某个出参的临界值定义为业务异常判断标准,类似检查点。

本文详细介绍如何提取出参、配置断言。

出参

在一个压测请求 API 中可以定义多个出参,示例如下:

出参示例

出参的配置项说明:

配置项 说明
出参名 只能包含英文字母、数字和下划线
来源 标记 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
设为断言 具体用法,参见断言小节。

注意: 为确保能提取成功,Response Headers 中数据格式必须是标准的 MIME 类型。

关于解析表达式的编写,您也可以在场景调试时,查看请求响应详情,测试出参解析达式是否正确,并直接设置出参。请参考场景调试的“测试出参”小节。

Body:TEXT

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

API 的 Response 示例如下:

  1. <input name="id" value="347290348">
  2. <input name="token" value="acdfo4dfopasdf44ddvvm">
  3. ...
  4. <script>
  5. var planId=4587;
  6. var planId=5689;
  7. var planId=8906;
  8. </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 原文信息,参考下图:

    正则提取json

Body:JSON

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

API 的 Response Body 示例如下:

  1. {
  2. "info": "success",
  3. "message": "处理成功",
  4. "data": {
  5. "id":13509, "code":0,
  6. "items": [
  7. {"name": "name1", "value": "1234"},
  8. {"name": "name2", "value": "8448"},
  9. {"name": "name3", "value": "1298"},
  10. {"name": "name4", "value": "3049"},
  11. {"name": "name5", "value": "7648"}
  12. ]
  13. }
  14. }
期望获取出参的位置 解析表达式
获取 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 字段和 Header 字段,解析表达式中直接写需要提取的 Key 即可。例如,Cookie 信息为 “token=1234;path=/”,需要提取 token 的值,则解析表达式直接填写 “token” 即可。

响应状态码

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

断言

断言提供了从业务维度判断成功与否的功能,将某个出参的临界值定义为业务异常判断标准,类似检查点。定义之后,在压测实时报表和压测报告中都会展现业务成功或失败的信息,为判断是否继续压测提供参考。

设置出参后,勾选设为断言,并在下方定义断言判断的 Value。

断言

配置说明

  • 多个断言之间是“且”的关系。
  • 当 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 范围内。

那么对应 API 的断言配置,如下图所示。

断言配置示例

带断言的请求压测过程中,可以查看业务成功率:

断言示例