ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Meter 接口测试核心实操:参数化、接口关联、响应断言、鉴权

Meter 接口测试核心实操:参数化、接口关联、响应断言、鉴权

JMeter 接口测试核心实操:参数化、接口关联、响应断言、鉴权

适合测试面试口述,附带操作步骤、常见踩坑,结合证券业务场景举例。

整体场景案例

业务流程:登录接口 → 获取 token (鉴权) → 查询持仓接口(依赖 token)

  1. 登录:账号密码参数化

  2. 提取登录返回 token(接口关联)

  3. token 放入请求头实现鉴权

  4. 接口增加断言,校验返回是否成功

一、前置基础结构

测试计划结构标准搭建

plaintext

测试计划 └── 线程组 ├── HTTP信息头管理器(公共请求头) ├── 用户定义的变量(可选全局变量) ├── HTTP请求1:登录接口 │ ├── 【正则表达式提取器】提取token │ └── 【响应断言】登录成功校验 └── HTTP请求2:查询持仓接口(使用token鉴权) └── 【响应断言】校验持仓数据

1、参数化(4 种常用方式)

作用:使用多组数据循环调用接口,避免写死账号密码,实现数据驱动测试

方式 1:用户定义的变量(静态参数,少量数据)

添加 → 配置元件 → 用户定义的变量

例:username=test01,password=123456

引用方式:${username}

缺点:所有线程共用同一套数据,不适合多用户并发

方式 2:CSV 数据文件设置【工作最常用⭐】

适用:大批量账号、多组测试数据

  1. 新建 csv 文件 user.csv

plaintext

account,pwd user001,123456 user002,654321 user003,888888
  1. 添加 → 配置元件 → CSV 数据文件设置

  • 文件名:填写 csv 路径

  • 变量名称:account,pwd(和表头一一对应)

  • 分隔符:,

  • 循环读取:False(读完停止)

  1. 请求中引用:${account}${pwd}

面试坑点:csv 文件不要带中文、路径不要有空格;注意编码 UTF-8。

方式 3:函数助手 _Random(随机参数)

${__Random(1000,9999,)}随机数字,用于生成随机订单号

方式 4:JDBC 请求参数化(数据库读取数据)

从 MySQL 查询账号作为入参,适合证券业务真实存量账户。

2、接口关联(核心!提取上一个接口返回值给下一个接口使用)

场景:登录返回 token,下游所有接口需要携带 token

三种提取器:正则表达式提取器、JSON 提取器(优先使用)、边界提取器

✅ JSON 提取器(推荐,JSON 接口标配)

登录接口返回示例

json

{ "code":200, "data":{ "accessToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" }, "msg":"success" }

配置(放在登录 HTTP 请求下,作为子元件)

  • 引用名称:token

  • JSON 路径表达式:$.data.accessToken

  • 匹配数字:1(取第一个)

后续接口直接使用${token}

✅ 正则表达式提取器(非 json、html 文本使用)

  • 引用名称:token

  • 正则表达式:"accessToken":"(.+?)"

  • 模板:$1$

  • 匹配数字:1

常见问题:提取为空!排查顺序:

  1. 查看取样器结果,确认响应报文存在字段

  2. json 路径 / 正则写错

  3. 提取器放置层级错误(必须是上一级请求的子节点)

3、鉴权实现(Token 登录鉴权两种方案)

方案 1:请求头携带 Token(90% 接口使用)

  1. 添加【HTTP 信息头管理器】

  2. 添加头:Authorization值:Bearer ${token}

如果后台不需要 Bearer,直接填写${token}

⚠️ 放置位置:

  • 全局头:线程组下,所有请求生效

  • 局部头:单个请求下,仅当前接口生效

方案 2:参数鉴权(token 放在请求参数 / 请求体)

直接在 POST json body 中写入"token":"${token}"

拓展:Cookie 鉴权

添加【HTTP Cookie 管理器】自动管理 session,无需手动提取。

4、断言:自动判断接口是否成功

作用:自动校验响应结果,不依赖肉眼看返回,自动化测试必备

4.1 响应断言(通用)

添加 → 断言 → 响应断言

常用配置:

  1. 测试字段:响应代码 → 模式 200(校验 http 状态码)

  2. 测试字段:响应代码 → 测试模式:200

  3. 业务校验:测试字段 = 响应内容,测试模式code":200

匹配规则说明:

  • 等于:完全一致

  • 包含:响应中包含该字符串(最常用)

4.2 JSON 断言(推荐,json 接口)

针对返回 json 做精准校验

示例:

预期值{"code":200}

可以校验状态码、返回信息,支持精准 JSON 比对。

4.3 JSR223 断言(高级)

写 groovy 代码,可以做复杂逻辑判断:数值范围、多个条件组合,性能测试常用。

断言结果查看

添加【察看结果树】,失败请求标红,可查看断言错误原因。

5、完整串联实操步骤(可直接面试口述流程)

  1. 创建线程组

  2. 添加【CSV 数据文件设置】实现账号参数化

  3. 新建登录 HTTP 请求,填入 url、请求方式,参数使用${account}${pwd}

  4. 登录请求下新增【JSON 提取器】提取 accessToken

  5. 线程组添加【HTTP 信息头管理器】Authorization: Bearer ${token}

  6. 登录请求添加【JSON 断言】校验登录成功 code=200

  7. 创建下游业务接口(查询持仓),自动携带 token 鉴权

  8. 给业务接口增加响应断言,校验业务数据正常

  9. 添加察看结果树、汇总报告,运行调试

6、高频面试问题 & 坑点

Q1:JSON 提取器取不到值怎么排查?

  1. 检查提取器层级,必须是该 HTTP 请求的子元件

  2. 察看结果树确认接口实际响应正常,没有报错

  3. json 路径表达式书写错误,区分大小写

  4. 接口响应延迟,建议增加超时时间

Q2:参数化 csv 多个线程重复读取同一行数据?

答:CSV 设置中,是否允许循环读取;并发场景如果每个用户独立数据,调整共享模式;

CSV 数据集配置【共享模式】:

  • 所有线程:所有线程共用文件(容易重复)

  • 当前线程组:每个线程组独立读取

  • 当前线程:每个线程独立顺序读取(多用户并发首选)

Q3:HTTP 信息头管理器放线程组下不生效?

确认:没有同名头在单个请求内部覆盖全局头。

Q4:关联的时候,登录接口失败,后续接口大量报错?

解决方案:使用【If 控制器】或者 JSR223,登录失败终止线程,避免无效请求。

7、拓展进阶(证券测试场景加分项)

  1. JSR223 PreProcessor:预处理参数、加密(很多证券接口请求体需要 RSA 加密)

  2. JSR223 PostProcessor:复杂返回数据处理

  3. 定时器:添加思考时间模拟真实用户

  4. 可以结合证券业务:登录→获取 token→查询持仓、委托下单接口整套链路自动化

如果你需要,我可以输出一份可直接背诵的面试问答题版本(10 道 JMeter 接口测试高频题),或者给你一套

返回列表