目录
apipost脚本使用教程
缘由:
本期文章主要围绕脚本实现模拟第三方推送接口讲解
主要原因:项目涉及到需要对接第三方接口,暴露接口出去给第三方调用。每次项目订单状况节点,需要等待第三方开单后,在推送下单状态回来,每次多人操作时候,都需要登录同一账号,过程等待比较缓慢,效率比较低。
实现流程:
1、设置接口需要的URL:
http://localhost:8080/api/dbts/sendOrderStatus
2、boby:
参数名 |
参数值 | 描述 |
---|---|---|
digest | String |
{ {digest}} |
params | String |
{ {params}} |
timestamp | String |
1731572100579 |
companyCode | String |
{ {companyCode}} |
logisticID | String |
TSVU43434t318000045 |
mailNo | String |
sdferee340985266 |
statusType | String |
GOT |
3、预执行操作:
class SecurityUtil {
static getDigest(plainText) {
// 使用 crypto 模块生成 MD5 哈希
let md5Str = CryptoJS.MD5(plainText);
// 将 MD5 哈希转换为 Base64 编码的字符串
let base64Encoded = btoa(md5Str);
return base64Encoded;
}
}
let timestamp = request.request_bodys.timestamp.toString();
apt.globals.set("timestamp", timestamp);
let companyCode = "*********"; //账号编码
apt.globals.set("companyCode", companyCode);
let appkey = "********************"; //账密
let params = "";
let logisticID = request.request_bodys.logisticID.toString();
let mailNo = request.request_bodys.mailNo.toString();
let statusType = request.request_bodys.statusType.toString();
console.log("logisticID: " + logisticID + " ,mailNo: " + mailNo + " ,statusType: " + statusType );
apt.removeRequestBody("logisticID");
apt.removeRequestBody("mailNo");
apt.removeRequestBody("statusType");
const model = packingCommonModel();
params = JSON.stringify(model);
apt.globals.set("params", params);
let digest = "";
digest = SecurityUtil.getDigest(params + appkey + timestamp);
console.log("digest: ", JSON.stringify(digest));
apt.globals.set("digest", digest);
function packingCommonModel() {
const commonModel = {
gmtUpdated: "1724375950500",
logisticCompanyID: "DEPPON",
logisticID: logisticID,
mailNo: mailNo,
statusType: statusType
};
return commonModel;
}
4、断言
后执行操作:
apt.test("响应json的errstr字段值为'success'", function () {
var jsonData = apt.response.json();
apt.expect(jsonData.errstr).to.eql("success");
});
apt.test("成功的POST请求", function () {
apt.expect(apt.response.code).to.be.oneOf([201, 202]);
});
5、执行结果:
断言与校验结果:
什么是ApiPost?
Apipost 基于同一份数据源,同时提供供后端开发、前端开发、测试人员使用的接口调试、Mock、自动化测试等功能,实时协作,降本增效绝不是空谈!
同时,针对技术管理层来说,也大大方便了 API 文档类数字资产的管理与延续。
视频教程:ApiPost视频培训教程
下载以及安装:
支持Windows、Mac、Linux等多种操作系统
下载地址:
apipost下载地址
下载后,直接解压安装就OK了。如果对安装有问题的朋友,各位自行百度一下!!!
apipost使用文档介绍:
https://v7-wiki.apipost.cn/docs/4
发送前动态修改Query、Body、Header参数
在文档 “预执行脚本” 中,我们了解到,预执行脚本的作用主要是:
编写JS函数等实现复杂计算;
变量的打印
定义、获取、删除、清空环境变量
定义、获取、删除、清空全局变量
获取请求参数
动态添加、删除一个header请求参数
动态添加、删除一个query请求参数
动态添加、删除一个body请求参数
发送HTTP请求
利用这个功能,我们可以在发送前动态的添加或者修改请求参数。
1、使用场景
适用于在请求发送前,需要动态改变请求参数的情况。例如:请求发送时,需要通过其他请求参数计算一个token同时添加到对应的发送参数中。
2、脚本语法
apt.setRequestQuery("key", "value"); // 给URL添加、修改query参数
apt.removeRequestQuery("key"); // 删除URL的指定query参数
apt.setRequestHeader("key", "value"); // 增加、修改一个请求头key
apt.removeRequestHeader("key"); // 删除请求头 key
apt.setRequestBody("key", "value"); // 增加、修改一个body参数
apt.removeRequestBody("key"); // 删除body参数key
apt.setRequestBody(
{
"key": "value"
}
); // 将 body 参数 "整体" 重置为 {"key": "value"},适用于原请求体为 raw 类型的情况
3、实际项目操作例如
totalVolume 和 totalWeight 获取值之后,需要在请求体删除掉
脚本
let totalVolume = request.request_bodys.totalVolume.toString();
let totalWeight = request.request_bodys.totalWeight.toString();
apt.removeRequestBody("totalVolume");
apt.removeRequestBody("totalWeight");
利用预执行脚本动态添加一个请求参数
使用场景
我们可能需要在请求时发送一些参数,而这些参数是通过其他参与发送的请求参数计算而来的。举例:
body请求参数如下:
参数 | 参数描述 |
---|---|
user_id | 用户id |
nick_name | 用户名 |