本文总结了 Apipost7 大高频脚本使用场景 —— 从动态参数修改、自动签名、登录态维护,到加密处理、性能压测、OAuth 授权获取,让接口调试过程 更智能、更自动、更省心。
场景1:如何在发送前动态修改 Query、Body、Header 参数?
应用场景:临时切换环境参数、关闭某个冗余参数、批量修改参数值,不想手动编辑。
解决方法:利用「预执行脚本」的apt系列方法,动态操作参数。
核心脚本语法(直接复制使用)
//1. 新增/修改Query参数(URL中拼接的参数) apt.setRequestQuery("key", "value"); //2. 删除指定Query参数 apt.removeRequestQuery("key"); //3. 新增/修改Header参数 apt.setRequestHeader("key","value"); //4. 删除指定Header参数 apt.removeRequestHeader("key"); //5. 新增/修改Body参数(form-data/raw均支持) apt.setRequestBody("key", "value"); //6. 删除指定Body参数 apt.removeRequestBody("key"); //7. 重置整个Body(仅适用于raw类型,如JSON) apt.setRequestBody({"key1":"value1","key2":"value2"});
实操示例:
临时给请求添加 version=v2的 Query 参数,同时删除 Header 中的 cache-control:
// 预执行脚本中添加 apt.setRequestQuery("version", "v2");` apt.removeRequestHeader("cache-control");
场景2:如何先发送前置请求(如获取临时密钥),再执行当前接口?
应用场景:当前接口需要用到另一个接口返回的secret参数,想让 Apipost 自动完成 “前置请求→获取数据→当前请求” 流程。
解决方法:预执行脚本中用$.ajax发送前置请求,结果存入变量后引用。
脚本示例(分同步 / 异步)
1. 异步调用
$.ajax({method: "GET", // 请求方法(GET/POST等) url:"https://xxx.com/get-secret", // 前置接口地址 success: function(response) { // 成功后将结果存入环境变量(后续接口可直接引用{{secret}}) apt.variables.set("secret", response.data.secret); console.log("前置请求成功,secret已保存"); } });
2.同步调用 异步可能导致前置请求未完成就发送当前接口,用await转为同步:
// 关键:添加await,确保前置请求完成后再执行后续逻辑 await $.ajax({ method: "GET", url: "https://xxx.com/get-secret", success:function(response) { apt.variables.set("secret", response.data.secret); } });
注意:若前置接口为 application/json 类型,需用JSON.stringify 处理参数:
await $.ajax({ method:"POST", url:"https://xxx.com/get-secret", "content-type":"application/json", data: JSON.stringify({"appId" :"123"}),// 必须转为字符串 success:function(response) { apt.variables.set("secret", response.data.secret); } });
场景3:如何调试需要登录的接口(Cookie/Session 认证)?
应用场景:调试用户收藏列表、个人信息等接口时,需要模拟登录状态,否则返回 “未授权”。
解决方法:两种方案,按需选择!
方案 一:开启全局 Cookie(简单高效)
- 点击 Apipost 右下角「Cookie 管理器」;
- 打开「全局 Cookie」开关;
- 先发送登录接口,后续所有接口会自动共享登录 Cookie,无需额外配置
方案 二:手动绑定 Cookie 到变量(关闭全局 Cookie 时使用)
- 登录接口后执行脚本:
// 将登录返回的PHPSESSID(SessionID)存入环境变量 apt.variables.set("sessionId",response.cookies["PHPSESSID"]);
- 目标接口 Header 配置:
- 添加 Header 参数:
Cookie; - 参数值:
PHPSESSID={{sessionId}}(其他语言可能为 JSESSIONID 等,需看后端定义)。
小贴士:若需所有接口共享该 Cookie,可在「项目设置→全局 Header」中添加,无需逐个接口配置。
场景4:如何对参数进行 MD5/AES/base64 加解密?
应用场景:接口要求参数加密传输(如密码用 AES 加密,签名用 MD5),Apipost 能直接实现吗?
解决方法:内置 CryptoJS 工具,支持多种加解密,直接调用即可。
常用加解密脚本(直接复制)
| 加密类型 | 脚本示例 |
| MD5 加密 | CryptoJS.MD5("待加密字符串").toString(); |
| SHA256 加密 | CryptoJS.SHA256("待加密字符串").toString(); |
| base64 加密 | CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse("待加密字符串")); |
| base64 解密 | CryptoJS.enc.Base64.parse("待解密字符串").toString(CryptoJS.enc.Utf8); |
| AES 简单加密 | CryptoJS.AES.encrypt("待加密字符串", "秘钥").toString(); |
| AES 简单解密 | CryptoJS.AES.decrypt("待解密字符串", "秘钥").toString(CryptoJS.enc.Utf8); |
自定义 AES 加解密(支持模式 / 填充,常用!)
// 配置密钥和偏移量(需与后端一致) const key = CryptoJS.enc.Utf8.parse("16位密钥");// 如"abcdefghijklmnop" const iv = CryptoJS.enc.Utf8.parse("16位偏移量"); // 如"1234567890abcdef" // 加密函数 function encrypt(word) { const srcs = CryptoJS.enc.Utf8.parse(word); return CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC,// 加密模式(后端一致) padding: CryptoJS.pad.Pkcs7// 填充方式(后端一致) }).ciphertext.toString().toUpperCase(); } // 解密函数 function decrypt(word) { const encryptedHexStr = CryptoJS.enc.Hex.parse(word); const srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr); const decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return decrypt.toString(CryptoJS.enc.Utf8);} // 调用示例:加密密码 const password = encrypt("123456"); apt.setRequestBody("password", password);
场景5:接口要求参数签名(sign)验证,怎么自动计算?
应用场景:接口要求按规则拼接参数并 MD5 加密生成sign,如appid+param1+param2+salt+secretKey,手动拼接容易出错。
解决方法:预执行脚本中自动拼接、加密、添加 sign 参数。
脚本示例(按实际签名规则修改)
// 1. 获取当前接口的Query参数(也可获取Body参数:request.request_bodys) const query = request.request_querys; const param1 = query.param1; const param2 = query.param2; // 2. 从环境变量中获取固定参数(提前在环境变量中配置APPID和SECRET_KEY) const appid = apt.environment.get("APPID"); const secretKey = apt.encironment.get("SECRET_KEY"); // 3. 生成随机salt(11111-65536之间) const salt = parseInt(Math.random() * 54425 + 11111, 10). toString(); // 4. 按规则拼接字符串 const signStr = appid + param1 + param2 + salt + secretKey; // 5. MD5加密生成sign const sign = CryptoJS.MD5(signStr).toString(); // 6. 将salt和sign添加到Query参数中 apt.setRequestQuery("salt", salt); apt.setRequestQuery("sign", sign);
操作前提 :提前在「环境变量」中配置APPID 和SECRET_KEY,避免硬编码泄露。
场景6:如何用Apipost 进行接口压测?
场景:需要测试接口的并发能力、响应时间,判断性能是否达标。
解决方法:使用 Apipost 内置压测引擎(支持万级并发)。
压测操作步骤:
1. 打开需要压测的接口,点击顶部「一键压测」按钮;
2. 配置压测参数:
- 并发数:同时发送请求的数量(建议从 10/100/500 逐步增加);
- 轮次:每个并发发送的请求次数;
- 其他:超时时间、是否跟随 302 跳转等;
3. 点击「开始压测」,等待完成后查看结果。
压测结果关键指标解读:
| 指标 | 含义 | 参考价值 |
| 每秒请求数(QPS) | 每秒平均处理请求数 | 核心性能指标,越高越好 |
| 平均响应时间 | 所有请求的平均耗时(毫秒) | 越低越好,需结合业务阈值 |
| 错误率 | 失败请求占比 | |
| 95% 响应时间 | 95% 的请求完成时间 | 反映大多数用户的体验 |
注意事项:
- 压测时关闭其他占用网络 / CPU 的程序,避免干扰结果;
- 并发数并非越大越好,超过服务器承载会导致错误率飙升,需逐步测试。
场景7:如何通过OAuth2.0 获取 GitHub 等平台的登录 token?
场景:调用 GitHub API、企业内部 OAuth2.0 认证接口时,需要先获取 access_token 才能访问。
解决方法:Apipost 支持 OAuth2.0 认证,以 GitHub 为例演示。
操作步骤:
1.创建 GitHub OAuth 应用:
- 登录 GitHub→右上角头像→Settings→Developer settings→New OAuth App;
- 填写信息:Application name(任意)、Homepage URL(http://localhost)、Authorization callback URL(http://localhost);
- 注册后获取「Client ID」和「Client Secret」。
2.Apipost中配置 OAuth2.0:
- 接口中添加 Header→选择「认证→OAuth 2.0」;
- 填写配置:a.Callback URL:http://localhost(与 GitHub 一致);b.Auth URL:https://github.com/login/oauth/authorize;c.Access Token URL:https://github.com/login/oauth/access_token;d.Client ID/Client Secret:GitHub 获取的信息;
- 点击「获取 token」,Apipost 会打开 GitHub 登录页面,授权后自动获取 token 并填入。
3.发送请求:
token 自动添加到 Header 的Authorization: Bearer {token}中,直接发送即可访问接口。 注意:若不想共享 token 给协作成员,可将 token 存入环境变量,在 token 栏填写{{github_token}}。
以上内容几乎覆盖了接口调试的所有核心需求:从 参数灵活性(动态修改) 到 安全验证(签名、加密),从 状态保持(Cookie/Token) 到 性能评估(压测),再到 第三方授权(OAuth2.0),Apipost 都能通过脚本一站式实现自动化,无论你是刚入门的接口测试者,还是资深后端开发,掌握这些脚本技巧,都能让你在开发工作中实现事半功倍的效果。