postman接口测试
一、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

- 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中常见的断言类型有以下几种:
-
断言响应状态码
-
断言响应体JSON数据校验
-
断言响应体是否包含指定字符串
-
断言响应体是否等于指定字符串
-
断言响应状态码
根据响应的状态码断言接口请求,设置如下:

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

注意,如果一次性添加多个不同的断言片段,postman会分别进行断言。
登录接口的响应是:
{"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中提供的 Response body: Contains string 来实现。其原理是将响应内容全部变成纯文本字符串,然后验证其中是否包含我们希望的子字符串。

Content-Type

五、postman的环境和变量
postman存在一下两种方式
- 全局变量即在整个postman中都可以使用的变量
- 环境变量是在选中了特定的某个环境之后才能使用的变量。
两者除了作用域不同外,其他所有的用法都相同。


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

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


切换环境

使用创建的环境

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操作如下:

构建接口,在接口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的形式为单接口请求实现参数化的测试。接下来以易购商城的注册和登陆接口为例,为大家演示如何进行参数化的操作。

-
如果包含中文必须保存为utf8格式,否则postman中读出来是乱码。
-

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批量执行请求操作之后,可以生成测试报告,但这个测试报告很简陋,而且只能在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测试报告的组件

选择collection v2.1

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

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的报告文件。

浙公网安备 33010602011771号