什么是Postman

环境变量(Environments)

全局协议

描述 变量 初始值 当前值
请求协议 request_protocol http http

授权信息

描述 变量 初始值 当前值
授权-子系统Token auth_token_subsystem
授权-用户Token auth_token_user
授权-管理员Token auth_token_user_admin
授权-客户端Token auth_token_client

网关信息

描述 变量 初始值 当前值
网关域名 gateway_hostname gateway.xxxxx.com gateway.xxxxx.com
请求地址 request_hostname gateway.xxxxx.com gateway.xxxxx.com

对外授权

描述 变量 初始值 当前值
授权-应用Id auth_app_id
授权-应用密钥 auth_app_secret
授权-签名方式 auth_sign_type

内部授权

描述 变量 初始值 当前值
子系统授权-服务密钥 auth_sub_system_secret
子系统授权-服务标识 auth_sub_system_service_id
终端请求标识 auth_request_flag

请求路径

描述 变量 初始值 当前值
子系统授权-请求路径 auth_sub_system_token_path
对外签名-请求路径 auth_app_create_sign_path
Web后台-登录请求路径 auth_token_user_path

账号信息

描述 变量 初始值 当前值
Web后台-登录用户名 web_portal_user_name
Web后台-登录用户密码 web_portal_user_pwd
Web后台-登录终端域名 web_portal_hostname
Web后台-用户密码摘要 web_portal_user_pwd_hash
Web后台-管理用户名 web_portal_admin_name
Web后台-管理用户密码 web_portal_admin_pwd
Web后台-管理终端域名 web_portal_admin_hostname
Web后台-用户密码摘要 web_portal_admin_pwd_hash

请求前置脚本(Pre-request Script)

Base64加解密字符串

CryptoJS

// 待加密字符串
var byEncryptStr = ""; // 加密Base64
var base64Encrypt = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(byEncryptStr));
console.log('base64Encrypt:', base64Encrypt); // 解密Base64
var base64Decrypt = CryptoJS.enc.Base64.parse(base64Encrypt).toString(CryptoJS.enc.Utf8);
console.log('base64Decrypt:', base64Decrypt);

MD5摘要字符串

CryptoJS

// 待加密字符串
var byEncryptStr = ""; var hash = CryptoJS.MD5(byEncryptStr).toString();

移除请求内容体的Json注释

// 移除Json注释
const rawData = pm.request.body.toString();
const strippedData = rawData.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g, (m, g) => g ? "" : m) pm.request.body.update(strippedData); // 获取当前环境请求体
var requestJson = JSON.parse(pm.request.body.raw);

获取并赋值子系统Token


// 获取当前环境请求协议
var request_protocol = pm.environment.get("request_protocol"); console.log("获取当前环境请求协议:" + request_protocol); // 获取当前环境网关域名
var gateway_hostname = pm.environment.get("gateway_hostname"); console.log("获取当前环境网关域名:" + gateway_hostname); // 获取当前环境用户服务
var gateway_service_user = pm.environment.get("gateway_service_user"); console.log("获取当前环境用户服务:" + gateway_service_user); // 获取当前环境子系统授权路径
var auth_sub_system_token_path = pm.environment.get("auth_sub_system_token_path"); console.log("获取当前环境子系统授权路径:" + auth_sub_system_token_path); // 拼接并获取子系统授权的请求地址
var getSubSystemTokenUrl = request_protocol + '://' + gateway_hostname + "/" + gateway_service_user + '/' + auth_sub_system_token_path; console.log("拼接并获取子系统授权的请求地址:" + getSubSystemTokenUrl); // 获取当前环境子系统密钥
var auth_sub_system_secret = pm.environment.get("auth_sub_system_secret"); console.log("获取当前环境子系统密钥:" + auth_sub_system_secret); // 获取当前环境子系统身份标识
var auth_sub_system_service_id = pm.environment.get("auth_sub_system_service_id"); console.log("获取当前环境子系统身份标识:" + auth_sub_system_service_id); // 定义Post请求方法及参数
const echoPostRequest = {
url: getSubSystemTokenUrl,
method: 'POST',
header: [
"Content-Type: application/json",
"Accept: application/json"
],
body: {
mode: 'raw',
raw: JSON.stringify({
"secret": auth_sub_system_secret,
"sid": auth_sub_system_service_id
})
}
}; // 发送自定义请求
pm.sendRequest(echoPostRequest, function (err, response) { // 将返回结果中的Data赋值到环境变量
pm.environment.set("auth_token_subsystem", response.json().data);
});

获取并赋值对外接口签名


// 获取当前环境请求协议
var request_protocol = pm.environment.get("request_protocol"); console.log("获取当前环境请求协议:" + request_protocol); // 获取当前环境网关地址
var gateway_path = pm.environment.get("gateway_path"); console.log("获取当前环境网关地址:" + gateway_path); // 获取当前环境对外服务
var gateway_service_public = pm.environment.get("gateway_service_public"); console.log("获取当前环境对外服务:" + gateway_service_public); // 获取当前环境生成签名的路径
var auth_app_create_sign_path = pm.environment.get("auth_app_create_sign_path"); console.log("获取当前环境生成签名的路径:" + auth_app_create_sign_path); // 拼接并获取对外授权签名的请求地址
var createSignUrl = ""; // 判断纯数字的正则表达式
var reg = /^[0-9]+.?[0-9]*$/; // 如果网关服务名称是纯数字,即服务端口号,说明不走网关模式,即调式模式
if(reg.test(gateway_service_public))
{
createSignUrl = request_protocol + '://' + gateway_path + ":" + gateway_service_public + '/' + auth_app_create_sign_path;
}
else
{
createSignUrl = request_protocol + '://' + gateway_path + "/" + gateway_service_public + '/' + auth_app_create_sign_path;
} console.log("拼接并获取对外授权签名的请求地址:" + createSignUrl); // 获取当前环境应用密钥
var auth_app_secret = pm.environment.get("auth_app_secret"); console.log("获取当前环境应用密钥:" + auth_app_secret); // 定义Post请求方法及参数
const echoPostRequest = {
url: createSignUrl,
method: 'POST',
header: [
"Content-Type: multipart/form-data",
"Accept: application/json"
],
body: {
mode: 'formdata',
formdata: [
{
key: "SignKey", value: auth_app_secret, disabled: false, description: { content:"", type:"text/plain" }
},
{
key: "Content", value: pm.request.body.raw, disabled: false, description: { content:"", type:"text/plain" }
}
]
}
}; // 发送自定义请求
pm.sendRequest(echoPostRequest, function (err, response) { // 将返回结果中的Sign赋值到环境变量
pm.environment.set("request_sign", response.json().data.sign);
});

登陆并获取Web后台授权Token

// 获取当前环境请求协议
var request_protocol = pm.environment.get("request_protocol"); console.log("获取当前环境请求协议:" + request_protocol); // 获取当前环境网关域名
var gateway_hostname = pm.environment.get("gateway_hostname"); console.log("获取当前环境网关域名:" + gateway_hostname); // 获取当前环境用户服务
var gateway_service_user = pm.environment.get("gateway_service_user"); console.log("获取当前环境用户服务:" + gateway_service_user); // 获取当前环境Web后台登陆路径
var auth_token_user_path = pm.environment.get("auth_token_user_path"); console.log("获取当前环境Web后台登陆路径:" + auth_token_user_path); // 拼接并获取Web后台登陆的请求地址
var getWebPortalTokenUrl = request_protocol + '://' + gateway_hostname + "/" + gateway_service_user + '/' + auth_token_user_path; console.log("拼接并获取Web后台登陆的请求地址:" + getWebPortalTokenUrl); // 获取当前环境Web后台登陆的域名
var web_portal_hostname = pm.environment.get("web_portal_hostname"); console.log("获取当前环境Web后台登陆的域名:" + web_portal_hostname); // 获取当前环境Web后台登陆的用户名
var web_portal_user_name = pm.environment.get("web_portal_user_name"); console.log("获取当前环境Web后台登陆的用户名:" + web_portal_user_name); // 获取当前环境Web后台登陆的密码
var web_portal_user_pwd = pm.environment.get("web_portal_user_pwd"); console.log("获取当前环境Web后台登陆的密码:" + web_portal_user_pwd); // 获取当前环境Web后台登陆的密码摘要
var web_portal_user_pwd_hash = CryptoJS.MD5(web_portal_user_pwd).toString(); console.log("获取当前环境Web后台登陆的密码摘要:" + web_portal_user_pwd_hash); // 定义Post请求方法及参数
const echoPostRequest = {
url: getWebPortalTokenUrl,
method: 'POST',
header: [
"Content-Type: application/json",
"Accept: application/json"
],
body: {
mode: 'raw',
raw: JSON.stringify({
"username": web_portal_user_name,
"password": web_portal_user_pwd_hash,
"domain": web_portal_hostname
})
}
}; // 发送自定义请求
pm.sendRequest(echoPostRequest, function (err, response) { // 将返回结果中的Data赋值到环境变量
pm.environment.set("auth_token_user", response.json().data.token);
});

登陆并获取管理后台授权Token

// 获取当前环境请求协议
var request_protocol = pm.environment.get("request_protocol"); console.log("获取当前环境请求协议:" + request_protocol); // 获取当前环境网关域名
var gateway_hostname = pm.environment.get("gateway_hostname"); console.log("获取当前环境网关域名:" + gateway_hostname); // 获取当前环境用户服务
var gateway_service_user = pm.environment.get("gateway_service_user"); console.log("获取当前环境用户服务:" + gateway_service_user); // 获取当前环境Web后台登陆路径
var auth_token_user_path = pm.environment.get("auth_token_user_path"); console.log("获取当前环境Web后台登陆路径:" + auth_token_user_path); // 拼接并获取Web后台登陆的请求地址
var getWebPortalTokenUrl = request_protocol + '://' + gateway_hostname + "/" + gateway_service_user + '/' + auth_token_user_path; console.log("拼接并获取Web后台登陆的请求地址:" + getWebPortalTokenUrl); // 获取当前环境Web后台登陆的域名
var web_portal_admin_hostname = pm.environment.get("web_portal_admin_hostname"); console.log("获取当前环境Web后台登陆的域名:" + web_portal_admin_hostname); // 获取当前环境Web后台登陆的用户名
var web_portal_admin_name = pm.environment.get("web_portal_admin_name"); console.log("获取当前环境Web后台登陆的用户名:" + web_portal_admin_name); // 获取当前环境Web后台登陆的密码
var web_portal_admin_pwd = pm.environment.get("web_portal_admin_pwd"); console.log("获取当前环境Web后台登陆的密码:" + web_portal_admin_pwd); // 获取当前环境Web后台登陆的密码摘要
var web_portal_admin_pwd_hash = CryptoJS.MD5(web_portal_admin_pwd).toString(); console.log("获取当前环境Web后台登陆的密码摘要:" + web_portal_admin_pwd_hash); // 定义Post请求方法及参数
const echoPostRequest = {
url: getWebPortalTokenUrl,
method: 'POST',
header: [
"Content-Type: application/json",
"Accept: application/json"
],
body: {
mode: 'raw',
raw: JSON.stringify({
"username": web_portal_admin_name,
"password": web_portal_admin_pwd_hash,
"domain": web_portal_admin_hostname
})
}
}; // 发送自定义请求
pm.sendRequest(echoPostRequest, function (err, response) { // 将返回结果中的Data赋值到环境变量
pm.environment.set("auth_token_user_admin", response.json().data.token);
});

请求后置脚本(Tests)

响应结果可视化(Visualize)

var template = `
<table bgcolor="#FFFFFF">
<tr>
<th>商户ID</th>
<th>商户名称</th>
<th>开始时间</th>
<th>结束时间</th>
<th>耗时(秒)</th>
</tr> {{#each response}}
<tr>
<td>{{tenantId}}</td>
<td>{{tenantName}}</td>
<td>{{startTime}}</td>
<td>{{endTime}}</td>
<td>{{costTime}}</td>
</tr>
{{/each}}
</table>
`; // Set visualizer
pm.visualizer.set(template, {
// Pass the response body parsed as JSON as `data`
response: pm.response.json().data.details.dataSource
});

参考

温故知新,.Net Core遇见Postman(API Development),进阶分布式微服务高效调式的更多相关文章

  1. .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持

    系列文章 .Net Core 分布式微服务框架介绍 - Jimu .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持 一.前言 最近有空就优化 Jimu (一个基于.Net ...

  2. .Net Core 分布式微服务框架介绍 - Jimu

    系列文章 .Net Core 分布式微服务框架介绍 - Jimu .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持 一.前言 近些年一直浸淫在 .Net 平台做企业应用开 ...

  3. Net Core 分布式微服务框架

    Jimu : .Net Core 分布式微服务框架介绍 https://www.cnblogs.com/grissom007/p/9291345.html 一.前言 近些年一直浸淫在 .Net 平台做 ...

  4. 温故知新,使用ASP.NET Core创建Web API,永远第一次

    ASP.NET Core简介 ASP.NET Core是一个跨平台的高性能开源框架,用于生成启用云且连接Internet的新式应用. 使用ASP.NET Core,您可以: 生成Web应用和服务.物联 ...

  5. 温故知新,Blazor遇见大写人民币翻译机(ChineseYuanParser),践行WebAssembly SPA的实践之路

    背景 在之前<温故知新,.Net Core遇见Blazor(FluentUI),属于未来的SPA框架>中我们已经初步了解了Blazor的相关概念,并且根据官方的指引完成了<创建我的第 ...

  6. 使用ASP.NET Core构建RESTful API的技术指南

    译者荐语:利用周末的时间,本人拜读了长沙.NET技术社区翻译的技术标准<微软RESTFul API指南>,打算按照步骤写一个完整的教程,后来无意中看到了这篇文章,与我要写的主题有不少相似之 ...

  7. .Net Core中的Api版本控制

    原文链接:API Versioning in .Net Core 作者:Neel Bhatt 简介 Api的版本控制是Api开发中经常遇到的问题, 在大部分中大型项目都需要使用到Api的版本控制 在本 ...

  8. 【转】.Net Core中的Api版本控制

    原文链接:API Versioning in .Net Core 作者:Neel Bhatt 简介 Api的版本控制是Api开发中经常遇到的问题, 在大部分中大型项目都需要使用到Api的版本控制 在本 ...

  9. 技术的正宗与野路子 c#, AOP动态代理实现动态权限控制(一) 探索基于.NET下实现一句话木马之asmx篇 asp.net core 系列 9 环境(Development、Staging 、Production)

    黄衫女子的武功似乎与周芷若乃是一路,飘忽灵动,变幻无方,但举手抬足之间却是正而不邪,如说周芷若形似鬼魅,那黄衫女子便是态拟神仙. 这段描写出自<倚天屠龙记>第三十八回. “九阴神抓”本是& ...

随机推荐

  1. Python 送你一棵圣诞树

    Python 送你一棵圣诞树 2019-01-02阅读 8800   今天是圣诞节,先祝大家圣诞快乐!??? 有人要说了,圣诞节是耶稣诞生的日子,我又不信基督教,有啥好庆祝的.这你就有所不知了,Pyt ...

  2. -bash: ll: 未找到命令

    第一步将alias ll='ls -l'添加到/etc/profile # head /etc/profile# /etc/profilealias ll='ls -l'# System wide e ...

  3. Linux创建RAID1_实战

    Linux创建RAID1实战 Linux创建RAID1 RAID1俗称镜像,它最少由两个硬盘组成,且两个硬盘上存储的数据均相同,以实现数据冗余 RAID1读操作速度有所提高,写操作理论上与单硬盘速度一 ...

  4. 攻防世界(六)supersqli

    攻防世界系列:supersqli 方法一: 用逗号包裹回显正常,说明存在注入 1';--+(注释符也可用 -- 或 # 发现均未被过滤!) 有order by 语句可知表由2个字段,使用联合查询 (想 ...

  5. 小白菜Windows10系统安装Linux(ubuntu)虚拟机超详细教程(全)

    注:本文"(         )"中的内容可忽略 1.下载VMware(威睿 计算机虚拟化软件) 官方下载地址 默认为最新版15.1.0,我们选择立即下载 (找一个比较大的盘不要是 ...

  6. 下面附上top和sar的使用方法,方便参考! "top"工具

    下面附上top和sar的使用方法,方便参考! "top"工具 使用方式:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b] 说明:即时显示 ...

  7. MyBaits 全局配置文件(mybatis-config.xml)

    什么是 MyBatis 全局配置文件 MyBatis 全局配置文件包含影响 MyBatis 框架正常使用的功能设置和属性信息. 它的作用好比手机里的设置图标,点击这个图标就可以帮助我们查看手机的属性信 ...

  8. 火币HBAI量化币圈唯一免费量化炒币机器人

    量化交易是一种投资方法.以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种"大概率"事件以制定策略,极大地减少了投资者情绪波动的影响,避免 ...

  9. 【分布式】-- 微服务抽奖系统后台整合MyBatis-Plus

    1.整合MyBatis-Plus背景 [分布式]-- 基于Nacos.OpenFeign搭建的微服务抽奖系统后台小案例 本篇是基于上一篇博文微服务抽奖系统后台对持久层MyBatis进行更换,并整合My ...

  10. centos ping命令找不到服务

    1 首先 添加dns服务器 vi /etc/resolv.conf 在文件中添加如下两行: nameserver 8.8.8.8 nameserver 8.8.4.4 保存退出,重启服务器.之后再pi ...