文章目录

  • 1 什么是 Postman
  • 2 安装
  • 3 创建集合
  • 4 设置集合变量
  • 4-1 添加 baseUrl 变量
  • 5 添加请求
  • Get
  • Post
  • Params
  • Headers
  • Body
  • 响应
  • 5-1 在请求中使用集合变量
  • 5-2 其它设置
  • 5-3 响应信息
  • 5-4 postman 内置数据生成器
  • 6 使用文件夹组织请求
  • 7 添加授权
  • 8 添加断言测试脚本
  • 环境变量
  • Collection 操作
  • 设置集合变量
  • 获取集合变量
  • 清除集合变量
  • 普通测试
  • 断言测试
  • 响应内容是否包含某个字符串
  • 响应内容是否等于某个字符串
  • 检测头信息是否存在指定头
  • 响应时间小于指定值
  • 检测状态码200,201,422
  • 状态文本是否包含指定字符串
  • 状态码是否为指定的值之一
  • 使用 `ajv` 库进行 `JSON Schema` 格式验证
  • 什么是 `JSON Schema`?
  • 断言库
  • 9 自动化测试
  • 10 Postman 脚本的导出与导入


1 什么是 Postman

Postman 是一款功能强大的接口调试工具。

2 安装

官网:https://www.postman.com/

3 创建集合

集合Postman 对请求进行组织的一种方式,方便管理和维护。

postman dubbo 接口测试 postman调dubbo接口_状态码

4 设置集合变量

我们可以给集合设置一些变量,在请求中进行复用。

4-1 添加 baseUrl 变量

在集合变量中添加 baseUrl ,值为:http://localhost:8080/api/v1

postman dubbo 接口测试 postman调dubbo接口_JSON_02

5 添加请求

每一个请求就是我们对 api 的一次调用及测试。

postman dubbo 接口测试 postman调dubbo接口_JSON_03

Get

Post

Params

postman dubbo 接口测试 postman调dubbo接口_状态码_04

Headers

Body

响应

5-1 在请求中使用集合变量

在请求的一些配置(参数)中,我们可以使用 {{baseUrl}} 来调用我们在上面集合配置中设置的变量。

5-2 其它设置

  • 请求方法设置
  • Params 设置,这里的 Params 指的是 queryString
  • 请求头设置
  • 请求正文
  • 正文格式

5-3 响应信息

  • 响应正文
  • 响应头
  • 状态码
  • 请求日志

postman dubbo 接口测试 postman调dubbo接口_状态码_05


postman dubbo 接口测试 postman调dubbo接口_postman dubbo 接口测试_06

5-4 postman 内置数据生成器

postman 内置提供了许多的随机数据生成器,帮助我们自动生成各种数据。

https://learning.postman.com/docs/postman/scripts/postman-sandbox-api-reference/#dynamic-variables

6 使用文件夹组织请求

我们可以根据请求的类型,把他们通过文件夹的形式有序的进行组织。

postman dubbo 接口测试 postman调dubbo接口_状态码_07

7 添加授权

在我们的后续的应用中,许多的接口是需要登录授权后才能访问的。我们所使用的验证方式是 JWT ,同时我们是基于 Header 来对授权 token 进行传输的。根据以上规则,我们可以在 Postman 中对这种授权方式进行统一处理。

8 添加断言测试脚本

https://learning.postman.com/docs/postman/scripts/postman-sandbox-api-reference/#dynamic-variables

我们可以给每个接口请求添加断言测试脚本,来帮助我们对接口响应进行测试反馈,减轻人力。

Postman 提供了一个内置对象 pm 。通过该对象,我们可以发送请求,断言测试也是通过它来完成。下面介绍几个我们这里会用到的几个 API

环境变量

postman dubbo 接口测试 postman调dubbo接口_postman dubbo 接口测试_08


postman dubbo 接口测试 postman调dubbo接口_Postman_09

Collection 操作

设置集合变量
pm.collectionVariables.set(variableName:String, variableValue:String);
获取集合变量
pm.collectionVariables.get(variableName:String);
清除集合变量
pm.collectionVariables.unset(variableName:String);

普通测试

postman dubbo 接口测试 postman调dubbo接口_JSON_10


通过人眼去看,很麻烦

断言测试

pm.test('描述', function() {
  	//断言
  	pm.expect(true).to.be.true;
});
响应内容是否包含某个字符串
pm.test("内容包含lc", function () {
		pm.expect(pm.response.text()).to.include("lc");
});
响应内容是否等于某个字符串
pm.test("内容等于lc", function () {
    pm.response.to.have.body("lc");
});
检测头信息是否存在指定头
pm.test("存在content-type", function () {
    pm.response.to.have.header("Content-Type");
});
响应时间小于指定值
pm.test("响应小于200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});
检测状态码200,201,422
pm.test("状态码为200", function () {
    pm.response.to.have.status(200);
});

验证状态码为422

postman dubbo 接口测试 postman调dubbo接口_状态码_11


状态码为201

@Post("/postUser")
    async postUser(
        @Ctx() ctx: Context,
        @Body() body: PostUserBody,
        @Header() h: any
    ) {
        // console.log(h);
        // return `提交的数据为:${JSON.stringify(body)}`
        ctx.status = 201;
        return {
            id: 1,
            name: body.name,
            createAt: new Date(),
        }
    }

postman dubbo 接口测试 postman调dubbo接口_postman dubbo 接口测试_12

状态文本是否包含指定字符串
pm.test("状态文本包含Created", function () {
    pm.response.to.have.status("Created");
});
状态码是否为指定的值之一
pm.test("成功", function () {
    pm.expect(pm.response.code).to.be.oneOf([201,202]);
});
使用 ajv 库进行 JSON Schema 格式验证
什么是 JSON Schema
  • JSON Schema 定义了一套词汇和规则,这套词汇和规则用来定义 JSON 元数据,且元数据也是通过 JSON 数据形式表达的。
  • JSON 元数据定义了 JSON 数据需要满足的规范,规范包括成员、结构、类型、约束等。使用它我们就可以对 JSON 数据进行合法性校验。

参考:http://json-schema.org/draft/2019-09/json-schema-validation.html

模拟一个数据验证

const Ajv = require('ajv');
const ajv = new Ajv({logger: console});
// 使用对象描述JSON格式,必须使用 以下三种属性
const schema = {
  	required: ["id","name", "createAt"],
		properties: {
    		id: {
      			type: "number"
    		},
      	name: {
          	type: "string"
        },
      	createAt: {
          	type: "string",
          	format: "date-time"
        }
  	}
};

pm.test('Schema is valid', function() {
    pm.expect(ajv.validate(schema, {
      "id": 5,
    	"name": "Aryanna",
    	"createAt": "2020-03-27T16:00:47.464Z"
    })).to.be.true;
});

postman dubbo 接口测试 postman调dubbo接口_postman dubbo 接口测试_13


postman dubbo 接口测试 postman调dubbo接口_postman dubbo 接口测试_14


测试实际数据

postman dubbo 接口测试 postman调dubbo接口_Postman_15


postman dubbo 接口测试 postman调dubbo接口_Postman_16

Postman 内置安装了许多的一些常用第三方库,比如上面的 ajv ,还包括:

还有一些 NodeJS 模块


path

assert

buffer

util

url

punycode

querystring

string-decoder

stream

timers

events

断言库

https://www.chaijs.com/api/

9 自动化测试

我们不仅仅可以对单个的请求进行测试,还可以对文件夹,整个集合进行批量的测试,提高效率。

注意save你的请求

postman dubbo 接口测试 postman调dubbo接口_postman dubbo 接口测试_17


postman dubbo 接口测试 postman调dubbo接口_Postman_18

postman dubbo 接口测试 postman调dubbo接口_状态码_19

10 Postman 脚本的导出与导入

最后,我们还可以把请求测试进行导出和导入。

postman dubbo 接口测试 postman调dubbo接口_postman dubbo 接口测试_20


导入

postman dubbo 接口测试 postman调dubbo接口_JSON_21