一、postman安装和下载
postman最初是集成到Chrome浏览器的插件,后续成为一个独立安装的应用。postman可以账户同步接口数据、发出各种http协议的接口请求,自动维持cookie、可以根据接口信息生成在线的接口文档。
psotmant下载地址:https://www.postman.com/downloads/,
postman下载后如下,双击安装即可:
安装后建议可以注册一个账户,后期在不同设备上登录即可同步接口信息
二、postman项目接口构建
2.1.创建项目
打开postman后,最先需要创建一个项目,后续接口请求是属于该项目
修改项目名称
2.2.创建项目接口分类
这里通过Add Folder 创建项目目录,目的是为了后期按照不同的功能,可以对接口分类
修改名称
2.3.创建接口请求
接口可以直接属于项目,也可以是某个folder中,选择项目或者folder, 右键选择Add Request 创建接口如下:
三、postman发出接口请求
3.1.发出get请求
在postman中构建请求的时候,选择请求类型,输入请求地址后,可以设置本次请求的名称,同时保存该请求
3.2.发出post请求
post请求有不同的请求体,处理方式不同,如下:
1. application/x-www-form-urlencoded
选择application/x-www-form-urlencoded,格式的消息体,以键值对的形式输入内容即可,可在Description选项输入字段的备注
2.multipart/form-data
- content-type的值为multipart/form-data。一般作为文件上传格式提交的请求,注意具体文件上传的字段需要选择File类型(下面案例中photo这个key,选择的就是File类型),如下:
- 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测试如下:
3.application/json
以json格式提交的请求,在请求头里面的content-type一定是application/json这样的值,在postman中设置如下:
注意,在设置json格式提交时,必须选择旁边的body内容为json,否则headers中自动生成的content-type的值会错误。
四、postman断言
postman中的断言必须要通过断言脚本来实现,断言脚本是通过js语言来编写的。为了方便我们在postman中设置断言,它提供了一些常见的断言代码片段供我们直接使用。一般在接口测试中,我们使用postman自带的断言代码片段即可完成请求断言的操作。
postman中常见的断言类型有以下几种:
- 断言响应状态码
- 断言响应体JSON数据校验
- 断言响应体是否包含指定字符串
- 断言响应体是否等于指定字符串
- 断言响应头是否出现指定的头信息,如content-type
4.1.断言响应状态码
根据响应的状态码断言接口请求,设置如下:
如果需要断言其他状态码,可以选择下面这个:
注意,如果一次性添加多个不同的断言片段,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("操作成功");
});
如下图所示:
4.3 断言响应体是否包含指定字符串
如果要断言响应体中是否包含指定字符串,可以使用postman中提供的 Response body: Contains string 来实现。其原理是将响应内容全部变成纯文本字符串,然后验证其中是否包含我们希望的子字符串。
4.4.断言响应头是否出现指定的头信息
断言响应头是否出现指定的内容,下面的案例是断言是否出现了 Content-Type
五、postman的环境和变量
postman存在一下两种方式
- 全局变量即在整个postman中都可以使用的变量
- 环境变量是在选中了特定的某个环境之后才能使用的变量。
两者除了作用域不同外,其他所有的用法都相同。
5.1 设置全局变量
添加全局变量
需要注意的是,创建后一定要点击 save 保存
在postman中使用变量,语法格式是 {{password}} 的形式
5.2 设置和使用环境变量
环境这个主要是为了解决,接口越来越来的情况下,如果换了测试环境,后期每一个接口中的IP地址都要更换,特别的麻烦,所以要使用环境变量
首先,需要新建一个环境变量。如下图所示:
切换环境
使用创建的环境
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;
}
如下图:
后续接口测试,以记账接口为例:
# 请求
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前置脚本可用于处理在请求前需要完成的脚本处理要求,例如:特定测试数据构造、加密参数生成等。下面以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中,可以使用外部数据文件CSV的形式为单接口请求实现参数化的测试。接下来以易购商城的注册和登陆接口为例,为大家演示如何进行参数化的操作。
(1) 首先生成一个csv文件格式的数据文件。
注意
- 如果包含中文必须保存为utf8格式,否则postman中读出来是乱码。
- csv文件第一行是列标题,必须是英文,后面会用作引用该列数据的变量名。
(2) 在postman中构造注册请求和登陆请求,并在请求中使用csv里定义的列名作为变量名。
在断言信息也从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);
});
如下图:
3) 点击文件夹,并在run的设置面板里进行运行设置。
八、 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 导出测试文件、环境文件
导出测试文件
选择collection v2.1
导出环境文件,如果本次测试的接口不依赖环境可以不导出
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
截图如下:
运行结束后,将在当前目录生成一个newman的文件夹,在里面会有一个html格式的测试报告。
如果想要直接指定生成html报告的名字,可以再加一个参数,如下:
newman run 用例集.json -e 环境文件.json -d 数据文件.csv -r html --reporter-html-export report.html
即可直接在当前目录下生成一个叫report.html的报告文件。