在开发过程中,为了更好地处理传递给接口的参数值,解决在调试过程中的数据处理问题,经常需要用到函数处理数据。
如果通过预执行脚本来处理数据,需要先添加脚本,再将处理后的结果再赋值给请求参数。
这种方法有一些不足:
在Apipost“请求参数”的位置可以直接添加处理函数,并可以实时预览函数处理后的结果,这种方式使整个流程更加高效、友好。
优势:
利用Apipost的自定义函数对接口传递参数值可以进行如下进行处理:数据验证、数据清理、编码处理、加密和签名、参数格式化、默认值处理等。
Apipost目前内置的处理函数有:md5、lower、length、substr、sha、base64、unbase64、encodeURlComponent、decodeURlComponent、concat、lconcat;
如果内置的函数不能满足需求,也可以灵活扩充函数库,满足更多场景的需求。(比如:时间戳转换为日期,或者去除参数中的空格等。)
关于Apipost自定义函数功能的介绍,我们可以通过以下视频来了解。
需求:构造含时间戳、随机数、MD5签名的鉴权参数
第一步: 在Query参数填写参数名并进入参数值编辑栏
第二步: 值输入框选择"引用变量" → 选择$timestamp
获取10位时间戳
第三步:添加函数处理 → 选择concat
输入000
,使时间戳精确到13位毫秒
第四步: 继续添加md5
加密 → 自动生成
第五步:点击插入,生成表达式{{$telephone|concat(000)|md5}}
效果预览:
?timestamp=e382279f1e69844a19f4ada2b16122db
需求:测试包含中文字符的接口进行长度限制和转义
第一步:在Body参数值输入框选择"Mock数据" → 选择$mockjs.cparagraph()
生成一段中文文本
第二步: 添加函数处理 → 选择substr
输入0-5
,使中文字符限制在5位
第三步: 添加encodeURIComponent
转码
第四步: 点击插入,生成表达式{{$mockjs.cparagraph()|substr(0,5)|encodeURIComponent}}
效果预览:
content=%E5%8A%9E%E5%B9%B3%E8%BF%9B%E6%89%93%E5%8D%8A
需求:测试银行卡号加密接口
第一步: 选择"固定值" → 填写6225880137700891
第二步: 继续添加sha256
加密
第三步: 最后用base64
二次编码
加密流水线: 原始卡号 → sha256摘要 → base64字符串
第四步: 点击插入,生成表达式{{'6225880137700891'|sha256|base64}}
效果预览:
key=NWFjMjBkNjc2YjMzYzc0MDJkZTRkZjlkMDUzMjg0NWNiZmJmZTJkMmQ2YTI4ZmNmZGI4NTg5YWIzZTFlNGEzZA==
需求:模拟100种SKU参数
第一步: 生成Path参数 /goods/{guid}
第二步: 选择"Mock数据" → 选择$mockjs.guid()
随机生成一个GUID
第三步: 添加lower
函数统一小写
第四步: 组合padEnd
确保长度32位
第五步: 点击插入,生成表达式{{$mockjs.guid()|lower|padEnd(32)}}
第六步: 自动化测试运行时自动生成:
/goods/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
在Apipost"项目设置-自定义函数"中,我们可以三步构建可复用的函数库:
字母/数字/下划线
(如timestamp_converter
)2024-12-12
验证输出1733961600000
支付_签名生成
、物流_单号校验
等函数创建自定义函数后,我们在插入动态值时,即可使用。
当我们在自定义函数中处理数字时,系统传入的始终是字符串类型。想进行数值运算,需要先完成“类型转化”:
// 正确姿势
let numTimestamp = Number(text);
const date = new Date(numTimestamp);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
const seconds = String(date.getSeconds()).padStart(2, '0');
return text = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
// 错误示范(将导致NaN)
const date = new Date(text);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
const seconds = String(date.getSeconds()).padStart(2, '0');
return text = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
Apipost通过三层架构重构参数处理,帮我们实现了参数处理从"体力劳动"到"智能编排"的革命。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。