一、postman安装和下载

postman最初是集成到Chrome浏览器的插件,后续成为一个独立安装的应用。postman可以账户同步接口数据、发出各种http协议的接口请求,自动维持cookie、可以根据接口信息生成在线的接口文档。

psotmant下载地址:https://www.postman.com/downloads/,

postman接口测试_html

postman下载后如下,双击安装即可:

postman接口测试_测试报告_02

安装后建议可以注册一个账户,后期在不同设备上登录即可同步接口信息

postman接口测试_html_03

postman接口测试_json_04

二、postman项目接口构建

2.1.创建项目

打开postman后,最先需要创建一个项目,后续接口请求是属于该项目

postman接口测试_测试报告_05

修改项目名称

postman接口测试_测试报告_06

2.2.创建项目接口分类

这里通过Add Folder 创建项目目录,目的是为了后期按照不同的功能,可以对接口分类

postman接口测试_测试报告_07

修改名称

postman接口测试_测试报告_08

2.3.创建接口请求

接口可以直接属于项目,也可以是某个folder中,选择项目或者folder, 右键选择Add Request 创建接口如下:

postman接口测试_html_09

三、postman发出接口请求

3.1.发出get请求

在postman中构建请求的时候,选择请求类型,输入请求地址后,可以设置本次请求的名称,同时保存该请求

postman接口测试_html_10

3.2.发出post请求

post请求有不同的请求体,处理方式不同,如下:

1. application/x-www-form-urlencoded

选择application/x-www-form-urlencoded,格式的消息体,以键值对的形式输入内容即可,可在Description选项输入字段的备注

postman接口测试_测试报告_11

2.multipart/form-data

  • content-type的值为multipart/form-data。一般作为文件上传格式提交的请求,注意具体文件上传的字段需要选择File类型(下面案例中photo这个key,选择的就是File类型),如下:

postman接口测试_测试报告_12

  • multipart/form-data也可以作为一般的post接口提交数据使用,接口请求例如:
POST http://121.4.249.231/index.php?s=/index/user/login.html HTTP/1.1
Host: 121.4.249.231
Proxy-Connection: keep-alive
Content-Length: 241
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryvCqx46vEwBNBXwDM
Origin: http://121.4.249.231
Referer: http://121.4.249.231/index.php?s=/index/user/logininfo.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=9ieosr6lh46kii4eloh4mhvh7t

------WebKitFormBoundaryvCqx46vEwBNBXwDM
Content-Disposition: form-data; name="accounts"

lisisi
------WebKitFormBoundaryvCqx46vEwBNBXwDM
Content-Disposition: form-data; name="pwd"

123456
------WebKitFormBoundaryvCqx46vEwBNBXwDM--

postman测试如下:

postman接口测试_测试报告_13

3.application/json

以json格式提交的请求,在请求头里面的content-type一定是application/json这样的值,在postman中设置如下:

postman接口测试_测试报告_14

注意,在设置json格式提交时,必须选择旁边的body内容为json,否则headers中自动生成的content-type的值会错误。

四、postman断言

postman中的断言必须要通过断言脚本来实现,断言脚本是通过js语言来编写的。为了方便我们在postman中设置断言,它提供了一些常见的断言代码片段供我们直接使用。一般在接口测试中,我们使用postman自带的断言代码片段即可完成请求断言的操作。

postman中常见的断言类型有以下几种:

  • 断言响应状态码
  • 断言响应体JSON数据校验
  • 断言响应体是否包含指定字符串
  • 断言响应体是否等于指定字符串
  • 断言响应头是否出现指定的头信息,如content-type

4.1.断言响应状态码

根据响应的状态码断言接口请求,设置如下:

postman接口测试_json_15

如果需要断言其他状态码,可以选择下面这个:

postman接口测试_json_16

 注意,如果一次性添加多个不同的断言片段,postman会分别进行断言。

4.2 断言响应体JSON数据校验

如果响应报文是个json字符串的话,必须使用postman提供的 Response body: JSON value check 来进行断言。

登录接口的响应是:

{"data":"登陆成功","message":"操作成功","status":1}

点击 Response body: JSON value check 进行断言添加内容如下:

pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.value).to.eql(100);
});

修改成本次案例如下:

pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.data).to.eql("登陆成功");
    pm.expect(jsonData.message).to.eql("操作成功");
});

如下图所示:

postman接口测试_测试报告_17

4.3 断言响应体是否包含指定字符串

如果要断言响应体中是否包含指定字符串,可以使用postman中提供的 Response body: Contains string 来实现。其原理是将响应内容全部变成纯文本字符串,然后验证其中是否包含我们希望的子字符串。

postman接口测试_html_18

4.4.断言响应头是否出现指定的头信息

断言响应头是否出现指定的内容,下面的案例是断言是否出现了 Content-Type

postman接口测试_html_19

五、postman的环境和变量

postman存在一下两种方式

  • 全局变量即在整个postman中都可以使用的变量
  • 环境变量是在选中了特定的某个环境之后才能使用的变量。

两者除了作用域不同外,其他所有的用法都相同。

postman接口测试_json_20

5.1 设置全局变量

添加全局变量

postman接口测试_测试报告_21

需要注意的是,创建后一定要点击 save 保存

postman接口测试_测试报告_22

在postman中使用变量,语法格式是 {{password}} 的形式 

postman接口测试_html_23

5.2 设置和使用环境变量

环境这个主要是为了解决,接口越来越来的情况下,如果换了测试环境,后期每一个接口中的IP地址都要更换,特别的麻烦,所以要使用环境变量

首先,需要新建一个环境变量。如下图所示:

postman接口测试_html_24

切换环境

postman接口测试_测试报告_25

使用创建的环境

postman接口测试_html_26

5.3 postman变量实现请求关联

postman对于session机制可以自动保存,携带,但是对于token机制则无法完成,只能通过将响应中的token提取出来,然后保存成变量的形式,给后续的接口携带,如下以记账精灵APP的登录接口为案例,进行演示,登录接口的请求和响应如下:

# 请求
POST https://app.fan92.com/login/login HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 33
Host: app.fan92.com
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.11.0

phone=17625528013&passWord=123456

# 响应
HTTP/1.1 200 OK
Server: Tengine
Date: Mon, 17 Apr 2023 09:23:12 GMT
Content-Type: json/html; charset=utf-8
Content-Length: 699
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: *
Access-Control-Expose-Headers: X-Api-Token
X-Server: ADCDN-APISERVER
X-Api-Token: dbcbb6ceaa8e85cb3f48e670f587368daa5070d9

{"APISTATUS":"2000","APIDATA":{"id":31831137,"phone":"17625528013","openId":"","gender":1,"avatar":"","nickName":"","wxNickName":"","system":2,"model":"samsung-SM-S9010","device_id":"3b44468e0dfd6694b5f6dee1357777b6","systemVersion":"7.1.2","appVersion":"V6.1.9","wx_migrate":0,"loginTime":1681723343,"addTime":1658143667,"addDate":"2022-07-18","regSource":"huawei","member_status":0,"member_expire_at":"","weekReport":1,"monthReport":1,"email":"","user_status":1,"is_vip":1,"expiration_time":null,"vip_expire_at":0,"integral_nums":0,"channel":"","android_id":"","sound":0,"shake":0,"total_coins":0,"coins":0,"token":"dbcbb6ceaa8e85cb3f48e670f587368daa5070d9","user_id":31831137},"APIDEC":"SUCCESS"}

在postman中构建登录接口请求,然后再Tests中写入下面代码,获取token,然后保存成变量

// 把responseBody转为json字符串 
var data = JSON.parse(responseBody);  
if(data.APIDATA.token){
    tests["Body has token"] = true;
    //保存成全局变量
    pm.globals.set("token", data.APIDATA.token);  
}else{
    tests["Body has token"] = false;
}

如下图:

postman接口测试_json_27

后续接口测试,以记账接口为例:

# 请求
POST https://app.fan92.com/account/add HTTP/1.1
X-Api-Token: dbcbb6ceaa8e85cb3f48e670f587368daa5070d9
Content-Type: application/x-www-form-urlencoded
Content-Length: 101
Host: app.fan92.com
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.11.0

addTime=1681723505&amount=896.0&category_id=1&info=%E9%A4%90%E9%A5%AE&user_id=31831137&categoryType=1

# 响应
HTTP/1.1 200 OK
Server: Tengine
Date: Mon, 17 Apr 2023 09:25:06 GMT
Content-Type: json/html; charset=utf-8
Content-Length: 60
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: *
Access-Control-Expose-Headers: X-Api-Token
X-Server: ADCDN-APISERVER
X-Api-Token: dbcbb6ceaa8e85cb3f48e670f587368daa5070d9

{"APISTATUS":"2000","APIDATA":"15661779","APIDEC":"SUCCESS"}

postman操作如下:

postman接口测试_测试报告_28

六、 前置脚本处理

postman前置脚本可用于处理在请求前需要完成的脚本处理要求,例如:特定测试数据构造、加密参数生成等。下面以md5加密的案例给进行演示

构建接口,在接口Pre-request Script 里面编写如下内容:

//构建格式
var pwd = "5-admin123-admin123-BANhpOZGS8O1P5Kk"
//进行md5加密
var pwd_md5 = CryptoJS.MD5(pwd).toString();
//设置成全局变量
pm.globals.set("sign_pwd", pwd_md5);

如下图,将md5加密后的内容保存成变量

postman接口测试_html_29

在接口中引用该变量:

postman接口测试_测试报告_30

七、参数化执行用例

在postman中,可以使用外部数据文件CSV的形式为单接口请求实现参数化的测试。接下来以易购商城的注册和登陆接口为例,为大家演示如何进行参数化的操作。

(1) 首先生成一个csv文件格式的数据文件。

postman接口测试_json_31

注意

  • 如果包含中文必须保存为utf8格式,否则postman中读出来是乱码。
  • csv文件第一行是列标题,必须是英文,后面会用作引用该列数据的变量名。

(2) 在postman中构造注册请求和登陆请求,并在请求中使用csv里定义的列名作为变量名。

postman接口测试_json_32

在断言信息也从CSV文件读取进来:

pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    //获取变量对应的值
    var a = pm.globals.get("message");
    //断言
    pm.expect(jsonData.data).to.eql(a);
});

如下图:

postman接口测试_测试报告_33

3) 点击文件夹,并在run的设置面板里进行运行设置。

postman接口测试_测试报告_34

八、 newman生成测试报告

postman批量执行请求操作之后,可以生成测试报告,但这个测试报告很简陋,而且只能在postman中进行查看,所以一般需要在测试结束后生成便于分发的测试报告。

8.1 安装npm和newman

因为newman是node.js开发的,所以我们在安装newman之前,必须先安装node和npm。安装好node和npm后,可以通过在命令行里使用下面的命令查看是否安装成功:

node -v    # 查询node版本
npm -v     # 查询npm版本

接下来,用命令安装newman以及newman生成html测试报告的组件newman-reporter-html,

npm install -g newman    # -g是指全局安装
npm install -g newman-reporter-html   # newman用来生成html测试报告的组件

8.2 导出测试文件、环境文件

导出测试文件

postman接口测试_json_35

选择collection v2.1

postman接口测试_测试报告_36

导出环境文件,如果本次测试的接口不依赖环境可以不导出

postman接口测试_json_37

8.3 运行newman命令执行测试并生成报告

newman命令格式如下:

newman run 用例集.json -e 环境文件.json -d 数据文件.csv -r html

案例如下:

newman run d:/EasyBuy.postman_collection.json -e 测试环境.postman_environment.json -d login.csv -r html

截图如下:

postman接口测试_html_38

运行结束后,将在当前目录生成一个newman的文件夹,在里面会有一个html格式的测试报告。

postman接口测试_测试报告_39

如果想要直接指定生成html报告的名字,可以再加一个参数,如下:

newman run 用例集.json -e 环境文件.json -d 数据文件.csv -r html --reporter-html-export report.html

即可直接在当前目录下生成一个叫report.html的报告文件。