共计 3073 个字符,预计需要花费 8 分钟才能阅读完成。
一、Postman 的简单介绍
熟悉 HTTP 协议,能容易的配置一个简单的 http 请求,这里就不介绍了。下面是 Postman 的主要功能:
- 1、支持定义 http 请求分组
- 2、支持配置不同环境变量
- 3、支持路径参数、请求头参数、请求实体参数的录入
- 4、支持编写脚本预处理请求(Pre-request Script)
- 5、支持编写脚本断言响应结果及其他测试(Tests)
二、Postman 的变量
1、作用
Postman 用于注入请求地址、请求参数、请求实体、请求头中占位符 {{}}
中的值。
2、分类
postman 的变量配置,变量类型分为一下 3 种。每一个变量包含 key 值,初始化值,当前值三个可编辑项。
变量类型 | 作用范围 | 占位符取值优先级 | 脚本编辑 | 导入导出 |
---|---|---|---|---|
普通变量 | 当前单个请求 | 最高 | 支持 | 不支持 |
环境变量 | 启用下的所有请求 | 中 | 支持 | 支持 |
全局变量 | 所有请求 | 最低 | 支持 | 支持 |
3、设置入口
3.1、可视化设置
3.2、编码设置
见变量操作语法
三、Postman 的脚本执行
1、脚本设置入口
1.1、分类
以请求为导线,分为 Pre-request Script
和Tests
。
以请求组合分类为导线,分为 collection 级别、folder 级别和 request 级别。
以上两种分类的组合共有 6 个脚本设置入口。
1.2、设置入口
1.2.1、collection 级别
1.2.1、folder 级别
1.2.1、request 级别
1.3、执行时间
- 1、
Pre-request Script
在请求前执行 - 2、
Tests
在响应后执行 - 3、collection 级别在 folder 级别前执行,folder 级别在 request 级别前执行
时间线(上先下后顺序) | l 类别 |
---|---|
请求接口前 | Pre-request Script(collection 级别) |
请求接口前 | Pre-request Script(folder 级别) |
请求接口前 | Pre-request Script(request 级别) |
请求接口 | |
请求返回后 | Tests(collection 级别) |
请求返回后 | Tests(folder 级别) |
请求返回后 | Tests(request 级别) |
四、Postman 脚本常用语法
1、变量操作
<div id=” 变量操作语法 ”></div>
变量类型 | set 值语法 | get 值语法 | 清除语法 |
---|---|---|---|
普通变量 | pm.variables.set("key", "value") |
pm.variables.get("key") |
pm.variables.unset("variable_key") |
环境变量 | pm.environment.set("key", "value") |
pm.environment.get("key") |
pm.environment.unset("variable_key") |
全局变量 | pm.globals.set("key", "value") |
pm.globals.get("key") |
pm.globals.unset("variable_key") |
2、异步发送非当前请求
异步发送 Get 请求 https://postman-echo.com/get
pm.sendRequest("https://postman-echo.com/get", function (err, response) {console.log(response.json());
});
3、响应断言
3.1、请求结果断言
根据 HTTP 状态码断言
pm.test("Status code is 200", function () {pm.response.to.have.status(200);
});
pm.test("Successful POST request", function () {pm.expect(pm.response.code).to.be.oneOf([201,202]);
});
根据响应状态描述文字断言
pm.test("Status code name has string", function () {pm.response.to.have.status("Created");
});
3.2、文本响应实体断言
断言文本响应结果包含某个字符串
pm.test("Body matches string", function () {pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
断言文本响应实体匹配字符串
pm.test("Body is correct", function () {pm.response.to.have.body("response_body_string");
});
3.3、JSON 响应实体断言
pm.test("Your test name", function () {var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
3.4、响应头断言
pm.test("Content-Type is present", function () {pm.response.to.have.header("Content-Type");
});
3.5、响应耗时断言
pm.test("Response time is less than 200ms", function () {pm.expect(pm.response.responseTime).to.be.below(200);
});
4、响应实体由 XML 转 JSON
var jsonObject = xml2Json(responseBody);
5、自定义 JSON 校验规则
var schema = {
"items": {"type": "boolean"}
};
var data1 = [true, false];
var data2 = [true, 123];
pm.test('Schema is valid', function() {pm.expect(tv4.validate(data1, schema)).to.be.true;
pm.expect(tv4.validate(data2, schema)).to.be.true;
});
6、参考文档
Postman Sandbox API reference
五、使用举例
1、问题场景
公司软件项目作前后端分离,有独立的后台接口。后台接口开发过程避免不了接口测试。
由于安全性设计,请求接口需要进行参数签名。公司内部已提供简单的客户端工具,封装了签名过程,调用接口主要写接口地址、接口方法名、业务参数三中数据。但还存以下问题:
<span style=”color: red”>客户端工具不能记录历史请求,复用历史请求
</span>
2、面临问题
如果切换到 Postman 作为接口调用工具,需要具备以下条件:
- a、登录请求后,需要记住 Token
- b、所有业务接口,需要自动带上 Token
- c、对请求参数加工,附加上系统参数
- d、对请求参数进行签名(这里使用 MD5)
如果 Postman 允许,具备以下条件更好:
- e、支持一处编写脚本进行参数处理,每处复用
3、解决方法
问题序号 | 解决方法 |
---|---|
a | 编写 Tests 脚本,存储 Token 到环境变量 |
b | 使用 Postman 请求参数占位符功能,请求前自动从环境变量获取并注入 |
c | 同问题 b 的解决方法 |
d | 编写 Pre-request Script 脚本,进行参数签名。MD5 使用到内置函数 CryptoJS.MD5()
|
e | 基于 JavaScript 的封装,提供通用 JS 脚本作为一个 collection 级别的变量,在不同的请求的 Pre-request Script 脚本中使用 eval 函数进行引入 |
4、关键图示
正文完