Apifox 测试项目实操1


前言:本文接前面Apifox 测试项目的案例。


1.环境变量设置:



2.起步


编辑后续动作:

javascript 复制代码
// 1. 解析接口返回的 JSON
const res = pm.response.json();

// 2. 从返回结果里取出 token(对应你给的返回格式)
const token = res.data.token;

// 3. 把 token 写入当前选中的「开发环境」变量 adminToken 中
pm.environment.set("adminToken", token);

// 4. 控制台打印,方便你确认是否成功
console.log("✅ 登录成功,adminToken 已自动写入环境变量:", token);

说明:

上图中pm 是 Apifox(和 Postman 等同类工具)里默认提供的全局对象,不用你自己定义,也不用额外引入,是脚本环境自带的「内置变量」。


一、pm 到底是什么?

简单说:

  • 它是 Postman/Apifox 的脚本运行环境里,预定义好的「工具包」
  • 里面打包了所有和「请求、响应、环境变量、断言」相关的功能
  • 只要你在「前置操作 / 后置操作」的脚本里写代码,就能直接用 pm,不用自己写任何前置代码

二、现在用到的 pm 功能拆解

拿你登录接口的脚本来说:

复制代码
// 1. pm.response:拿到当前接口的响应数据
const res = pm.response.json(); 

// 2. pm.environment:操作当前选中的环境变量
pm.environment.set("adminToken", token);

// 3. pm.console:在底部控制台打印日志(其实 console 也是全局的,pm.console 是别名)
console.log("token 已写入:", token);

三、为什么它是默认就有的?

这是工具的「内置运行环境」设计:

  • 你写的脚本,不是直接跑在浏览器或 Node.js 里,而是跑在 Apifox 自己封装的沙箱环境里
  • 工具在沙箱启动时,会自动把 pm 这个全局对象注入进去
  • 你不用 npm install,也不用 require(),直接写就能用

四、pm 里你以后可能会用到的常用功能

功能 用途 示例
pm.response.json() 把接口返回的 JSON 转成 JS 对象 const data = pm.response.json();
pm.environment.set("key", value) 给当前环境变量赋值 pm.environment.set("merchantId", data.data.merchantId);
pm.environment.get("key") 读取当前环境变量的值 const token = pm.environment.get("adminToken");
pm.test("描述", function() {...}) 写接口断言(比如校验状态码) pm.test("状态码是200", () => pm.response.to.have.status(200));

补充:和 Postman 的关系

Apifox 为了兼容用户的使用习惯,直接兼容了 Postman 的 pm 对象语法。所以你在网上搜的 Postman 脚本,大部分都可以直接复制到 Apifox 里用,不用改。


3.heartbeat:


heartbeat 在 Apifox 里可以按下面方式测。先说结论:这个接口后端不校验 Authorization,文档里的 Bearer {``{bearerToken}} 是 OpenAPI 全局安全配置带出来的,可以不填也能调通。


1. 服务端实际要什么

POST /api/v1/device/heartbeat 只读 Body,不读 Header 里的 token:

字段 必填 说明
deviceId 设备 ID(数字)
version 客户端版本,会写入库
status 文档有,当前代码基本未用

成功示例:

{

"success": true,

"message": "Success",

"data": { "status": "OK" }

}

常见失败:

  • deviceId is required --- 没传 deviceId
  • Device not found --- 库里没有该设备
  • Device is not active --- 设备状态不是 ACTIVE
  • Heartbeat too frequent --- 3 秒内重复请求(限流)

2. Authorization: Bearer {``{bearerToken}} 怎么填?

情况 A:只测 heartbeat(推荐先这样)

  • Header 可以不填,或在 Apifox Auth → 无认证 / 不继承父级
  • 只保证 Body 里有正确的 deviceId

{``{bearerToken}} 来自导入时 OpenAPI 的全局 JWT 说明,不是 heartbeat 专用要求。

情况 B:想统一用 Bearer(和别的接口一致)

在 环境管理 → 开发环境 增加或复用变量,例如:

变量名 值从哪来
deviceToken POST /api/v1/device/handshake 响应里的 data.deviceToken
bearerToken deviceToken 填同一个值(或后置脚本自动同步)

Header 填:

Authorization: Bearer {{deviceToken}}

或在 Auth 里选 Bearer Token,Token 填:{``{deviceToken}}

注意:

  • 不要用 adminToken(用户登录 token)去测设备 activities / templates;那些接口要 deviceToken。
  • heartbeat 即使用错 token 也不影响,因为服务端不校验。

3. Apifox 操作步骤(完整链路)

步骤 1:先有设备(拿到 deviceId

任选一种:

商家端(需 merchantToken):

POST {``{baseUrl}}/api/v1/merchant/devices

{

"merchantId": 1,

"deviceCode": "DV_TEST_001",

"secret": "test-secret-123",

"name": "Apifox测试机"

}

记下返回的 data.id → 写入环境变量 deviceId

或 先 handshake(若库里已有设备)见步骤 2。


步骤 2:handshake(建议做,顺便拿 token)

POST {``{baseUrl}}/api/v1/device/handshake

无需 Authorization

{

"deviceCode": "DV_TEST_001",

"secret": "test-secret-123"

}

成功响应示例:

{

"success": true,

"data": {

"deviceId": 1,

"deviceToken": "eyJhbGciOiJIUzI1NiJ9...",

"expiresIn": 86400,

"serverTime": "..."

}

}

后置脚本(开发环境):

const res = pm.response.json();

if (res.success && res.data) {

pm.environment.set("deviceId", String(res.data.deviceId));

pm.environment.set("deviceToken", res.data.deviceToken);

pm.environment.set("bearerToken", res.data.deviceToken); // 与文档占位符对齐

}


步骤 3:测 heartbeat

  1. 左侧 device-controller → POST heartbeat
  2. 点 调试(不要只看文档页)
  3. 右上角环境选 开发环境
  4. Auth:无认证,或 Bearer {``{deviceToken}}(可有可无)
  5. Body → JSON:

{

"deviceId": {{deviceId}},

"version": "1.0.0"

}

若环境变量是数字类型,也可直接写 "deviceId": 1

  1. 点 发送

4. 和后续接口的区别(避免混用 token)

接口 要不要 Bearer Token 类型
POST /device/handshake 不要 ---
POST /device/heartbeat 不要(后端不校验) ---
GET /device/{deviceId}/activities deviceToken(handshake 返回)
GET .../templates 同上
POST /auth/login 不要 返回 adminToken / merchantToken

所以:heartbeat 重点填 Body 里的 deviceIdbearerToken 主要是给 activities/templates 用的,可先 handshake 写入 deviceToken


5. 调试页检查清单

  • URL 是否为:http://127.0.0.1:8089/api/v1/device/heartbeat(前置 URL + 路径不要重复 host)
  • Body 是否为 application/json
  • deviceId 是否为库里真实 ID
  • 两次 heartbeat 间隔是否 大于 3 秒

按上面做完,heartbeat 应返回 "data": { "status": "OK" }

5.保存测试用例:

相关推荐
影寂ldy14 小时前
C#Lambda表达式
开发语言·c#
小侯不躺平.14 小时前
C++ Boost库【6】时间戳整体综合
开发语言·c++·算法
ytttr87314 小时前
基于MATLAB的三维六面体有限元网格模型
开发语言·matlab
likerhood14 小时前
Java ArrayList 详解:从动态数组到扩容机制与常见陷阱
java·开发语言·windows
枫叶丹414 小时前
【HarmonyOS 6.0】Live View Kit 实况支持显示夕阳和赏月背景的技术解读与实践
开发语言·华为·harmonyos
AI人工智能+电脑小能手14 小时前
【大白话说Java面试题 第80题】【Mysql篇】第10题:MySQL 在什么条件下索引失效?
java·开发语言·mysql·adb·面试
风吹夏回14 小时前
Python JWT 认证实战:从原理到 PyCharm 落地指南
开发语言·python·pycharm·jwt
jieyucx14 小时前
Go 语言 JSON 序列化/反序列化:Tag 用法完全指南
开发语言·golang·json·序列化·tag
小肝一下14 小时前
STL——list
开发语言·c++·stl·list·伊雷娜