Postman Mock Server 使用
前言
科普界的老问题了。
大部分博客日志抄官方文档给的初始化样例,啥也不说。
看完除了会create,啥也不会了。
自食其力研究一下。
创建
略。
见document。
https://learning.postman.com/docs/designing-and-developing-your-api/mocking-data/mocking-with-examples/
或者随便找个中文博客。
推荐 https://zhuanlan.zhihu.com/p/371127186
但这篇文章的部分说法有误
比如文中称"Mock server只会采用最后创建的example"。 这是不对的。Mock Server会按规则匹配对应example。
创建之后,通过copy URL可以得到这个mock server的链接
默认作为公链
逻辑
postman逻辑结构有4层.
collection / folder / request / example
其中request是基本单位, 对应 http请求的寻址.
其实还有一个env,不过对这篇文章来说不重要。
1. request寻址
举例, 有一个http请求如下
axios.request({url:'/api'}
)
则需要对应地在postman中构建一个同地址的request.
{{url}}/api
值得注意的是, request中的地址部分, 前缀固定为"{{url}}"表示占位符.
此处输入 {{url}}/api 即可. 记得save.
最上面那个requestName = "New Request"可改可不改,就这样放着叫new request也无妨。
这个name是仅供postman使用者自己理解用的。
寻址是根据我们填写的url来的。
这样我们约定了一个地址为’/api’ 的接口。
接下来需要约定返回的数据。
2. example数据响应
request本身不能设置response data, 但example可以设置响应数据。
一个request下,可以添加多个example。
postman会根据http请求的不同,自动匹配对应的example,
然后返回该example中的response。
默认情况下,我们应该添加一个名为"Default"的example.
这个是缺省名字, 就像 index.html
, __init__.py
之类的一样.
这样写是符合规范的。
下面演示区别
我新建了一个New Request, 设置地址为
{{url}}/login
之后添加两个example, 分别命名为"Default" 和 “login”.
在"Default"中,我约定接口的方法是"POST", 返回值写"postlogin".
在"example2"中, 约定接口方法为"GET", 返回值 “getlogin”。
分别发送请求
axios.get({url:'/login'
}).then((res) => {console.log(res.data)})
axios.post({url:'/login'
}).then((res) => {console.log(res.data)})
可以看到非常良好地匹配上了两个example。
除了method以外, 还能匹配http response code等.
postman的匹配算法说明
https://learning.postman.com/docs/designing-and-developing-your-api/mocking-data/matching-algorithm/
3.数据动态响应
postman可以通过占位符传参。
最经典的param传参就是我们很常见的 问号后面跟key:value对的形式。
但是,经过测试这种键值对的url无法在mock server中被解析。(
mock server绑定动态变量的唯一方式,是通过slash或者backslash符号分割。
例如 /{{varName}}
这里需要注意的是,在response Body部分,
也是会经过mustache语法匹配,将"{{userID}}"部分替换为相应变量值的字符串 。
也可以使用反斜杠
/api/example\{{userID}}
这样写也能取到变量。
postman 官方似乎不推荐动态响应。
他们更希望你考虑多个不同的example取值可能性,提前写死所有query。
数据底层
先去https://web.postman.co/settings/me/api-keys
创建一个api-key.
然后新建一个request.
headers里面写上 x-api-key
url填
https://api.getpostman.com/collections/
请求之后,在response里找到自己的mock name,和对应的uid.
之后把uid,拼接到url后面
https://api.getpostman.com/collections/13803897-9e2bc2b2-2829-4224-8af8-449f53993b82
再请求一次
这一步返回的是当前mock server下的所有配置信息.
可以看到的是,每个request作为对象存放在 "item"数组中.
request下有一个属性"response"数组.
每个example作为对象存放在其中
在response中能为每个example找到唯一"id".
{"collection": {"info": {"_postman_id": "9e2bc2b2-2829-4224-8af8-449f53993b82","name": "假接口","schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"},"item": [{"name": "New Request","id": "4eb688f1-7e0b-4c82-8708-3523eadc2f25","protocolProfileBehavior": {"disableBodyPruning": true},"request": {"method": "POST","header": [],"body": {"mode": "raw","raw": ""},"url": {"raw": "{{url}}/login","host": ["{{url}}"],"path": ["login"]}},"response": [{"id": "428746aa-b59a-4785-a04b-be667a9528e7","name": "Default","originalRequest": {"method": "POST","header": [{"key": "Content-Type","name": "Content-Type","value": "application/javascript","type": "text"}],"body": {"mode": "raw","raw": "","options": {"raw": {"language": "javascript"}}},"url": {"raw": "{{url}}/login","host": ["{{url}}"],"path": ["login"],"query": [{"key": "name","value": "{{name}}","disabled": true},{"key": "password","value": "{{password}}","disabled": true}]}},"code": 200,"_postman_previewlanguage": null,"header": null,"cookie": [],"responseTime": null,"body": "{\"id\":\"11\",\"name\":\"abc\",\"token\":\"postlogin\"}"},{"id": "f012d8fb-9622-4544-b0cf-05b1fbfee298","name": "example2","originalRequest": {"method": "GET","header": [],"body": {"mode": "raw","raw": ""},"url": {"raw": "{{url}}/login","host": ["{{url}}"],"path": ["login"]}},"_postman_previewlanguage": null,"header": null,"cookie": [],"responseTime": null,"body": "{\"id\":\"22\",\"name\":\"abc\",\"token\":\"getlogin\"}"}]},{"name": "/get","id": "7b7d5f1f-75cf-453f-8309-b277bf715d9e","protocolProfileBehavior": {"disableBodyPruning": true},"request": {"method": "GET","header": [],"body": {"mode": "raw","raw": ""},"url": {"raw": "{{url}}/get","host": ["{{url}}"],"path": ["get"]}},"response": [{"id": "81501999-3d8a-44af-aa66-8e008bffb714","name": "Default","originalRequest": {"method": "GET","header": [],"url": {"raw": "{{url}}/get","host": ["{{url}}"],"path": ["get"]}},"code": 200,"_postman_previewlanguage": null,"header": null,"cookie": [],"responseTime": null,"body": "{ id=1,name='user2', token = 'abcdefg2'}"}]},{"name": "/user","id": "f8e05f82-91cc-41e6-9bdc-e914585d696e","protocolProfileBehavior": {"disableBodyPruning": true},"request": {"method": "GET","header": [],"url": {"raw": "{{url}}/user/{{userID}}","host": ["{{url}}"],"path": ["user","{{userID}}"],"query": [{"key": "id","value": null,"type": "text","disabled": true}]}},"response": [{"id": "af2743bd-2a3d-43cd-9ad5-775c11f67000","name": "Default","originalRequest": {"method": "GET","header": [],"url": {"raw": "{{url}}/user/{{userID}}","host": ["{{url}}"],"path": ["user","{{userID}}"],"query": [{"key": "id","value": null,"type": "text","disabled": true}]}},"_postman_previewlanguage": null,"header": null,"cookie": [],"responseTime": null,"body": "{\r\n \"id\": \"{{userID}}\",\r\n \"roleID\": \"01\" \r\n}"}]},{"name": "/role","id": "4d8b2c42-f3fd-4737-9329-6ed345021b8a","protocolProfileBehavior": {"disableBodyPruning": true},"request": {"method": "GET","header": [],"url": {"raw": "{{url}}/role/{{roleID}}","host": ["{{url}}"],"path": ["role","{{roleID}}"]}},"response": [{"id": "0891e08d-0aa0-4075-a63c-782c1f310fa5","name": "/role","originalRequest": {"method": "GET","header": [],"url": {"raw": "{{url}}/role/{{roleID}}","host": ["{{url}}"],"path": ["role","{{roleID}}"]}},"_postman_previewlanguage": null,"header": null,"cookie": [],"responseTime": null,"body": "{\r\n \"roleID\":\"{{roleID}}\",\r\n \"userMenus\":\"uerMenus\"\r\n}"}]}]}
}
在headers中设置
x-mock-response-name
或者
x-mock-response-id
即可对应到我们需要的example.
相当于绕过匹配规则,显式指定返回哪条example的response.
参考https://learning.postman.com/docs/designing-and-developing-your-api/mocking-data/mock-with-api/
Postman Mock Server 使用相关推荐
- Postman搭建mock server接口
在工作中,有时后端的接口还没有开发好,前端这时可以用postman的mock server来创建一个伪接口,访问这个伪接口来获得自己想要的响应. 在学习接口测试的过程中,也可以用postman的这个功 ...
- Postman高级功能Mock Server
正常情况下,我们需要验证一个接口功能应该是如下情况: 测试过程中我们经常遇到服务提供方无法满足测试条件,无法开展测试工作,这样往往会导致测试计划变更,最终延迟测试进度. 为了有效避免上述窘境,Mock ...
- Postman接口Mock Server服务器设置
目录 一.适用场景 二.设置步骤 2.1.创建一个mock server 2.2.配置mock server 2.3.Mock Servers创建成功一个新的mock地址 2.4.环境变量Enviro ...
- 1分钟搭建极简mock server
摘自博客园:https://www.cnblogs.com/mikasama/p/9838480.html 1.无聊的背景.起源: 如今的业务系统越来越复杂庞大,各个功能直接的调用也是多如牛毛,但如果 ...
- python接口测试实战_Python接口测试实战5(下) - RESTful、Web Service及Mock Server
课程目录 更多学习资料请加添加作者微信:superz-han获取 本节内容 REST及RESTful API Web Service XML解析 Mock Server REST及RESTful AP ...
- 基于django rest framework的mock server实践
网上找了一下mock server的实现,发现python的基本都是基于flask来实现的,因最近在学django,就尝试用drf实现了下: A brief introduction of sui_m ...
- 如何用Postman mock服务?
VOL 315 03 2021-11 今天距2022年58天 这是ITester软件测试小栈第315次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上 0 ...
- 搭建Mock Server实践(一)理论篇
背景 在我司 S 产品测试时,日常工作有百分之 70 是需要跟接口测试打交道,搭建的 MockServer 有数十个. 接触过多个搭建 MockServer 平台,整理成文,分享之. 目录 part1 ...
- 走进Java接口测试之简单快速的Mock Server Moco
文章目录 一.引言 二.简介 三.原理 四.使用 1.约定请求 URI 2.约定请求 Queries 3.约定请求 Get 方法 4.约定请求 Post 方法 5.约定请求 Headers 6.约定请 ...
- 软件测试 接口测试 接口鉴权 token鉴权 Mock Server 接口加解密 接口签名sign
文章目录 1 接口鉴权 1.1 cookie鉴权 1.2 session鉴权 1.3 token鉴权 1.4 Postman的鉴权方式 2 Mock Server 3 接口加解密 3.1 加密方式 3 ...
最新文章
- 深度学习中的反向卷积
- 怎么安装python3-centos编译安装python3怎么做?
- 参数 ByVal 和 ByRef 区别
- 在xcode4中使用cocos2d 2.x很顺利的
- 复习Javascript专题(二):闭包,内存,以及垃圾回收机制
- 安装 | Anaconda3下载链接
- Dubbo(四)之xml配置方式
- jsp思维导图_2019年经济法基础思维导图
- BugkuCTF-MISC题这是一张单纯的图片
- 记一次生成唯一ID的问题
- 【2】二级C语言中那些易错的概念题
- opencv-api warpAffine
- 2014蓝桥杯:李白打酒;奇怪的分式(枚举,最大公约数)
- VCIP2020:基于深度学习的HEVC帧内预测的非线性变换
- 公众号采集文章插件下载-支持各大网站自动采集发布的公众号插件
- (python)bing搜索引擎API接入测试
- 老版TP-Link路由器设置固定时间上网
- 苹果手机怎么创建php,怎么在苹果官网注册Apple ID?在网页上创建Apple ID教程
- Codeforces Round #797 (Div. 3) F. Shifting String题解
- DCloud使用小结