IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Postman Mock Server 使用 -> 正文阅读

[开发测试]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对的形式。
在这里插入图片描述

但要注意的是,这种传参方式在postman中的原理,本质上只是 传一个urlString, 通过匹配占位符的方式, 为变量赋值。

所以我们可以写得更暴力一点,连key都不需要了, 毕竟在解析环节用不上。
在这里插入图片描述
这里需要注意的是,在response Body部分,
也是会经过mustache语法匹配,将"{{userID}}"部分替换为相应变量值的字符串

可以写更复杂的逻辑, 取到userID之后再做点别的处理。
不过对于一个仅供测试的mock server来说, 能满足基本的动态响应应该足够了。

数据底层

先去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/

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 11:49:55  更:2022-05-05 11:51:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 22:46:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码