Postman基础用法
1、请求中常见的数据传递格式
form表单数据示意图:
案例1:提交字符串数据
需求:
1.访问TPshop搜索商品的接口,通过查询字符串的方式传递搜索的关键字 iPhone ,并查看响应数据
2.请求路径格式为: http://localhost/Home/Goods/search.html?q=iPhone
案例2:提交form表单数据
需求:
1.请求TPshop项目登录接口,请求数据 (username:13488888888,password:123456,verify_code:1234) 2.登录接口URL:http://localhost/index.php?m=Home&c=User&a=do_login
2.1设置请求头
2.2设置请求体
案例3:提交json数据
需求:
1.请求IHRM项目的登录接口,请求数据({"mobile":"13800000002","password":"123456"})
2.登录接口地址URL:http://ihrm-test.itheima.net/api/sys/login
3.1设置请求头
3.2设置请求体
2、请求的功能页签字段说明
-
Params:get请求传参,多个参数之间用&分隔
-
Authorization:是验证是否拥有从服务器访问所需数据的权限
-
Headers:请求头
-
Body(post请求传参):
1.form-data:用于表单键值对;文件上传。
2.x-www-form-urlenconded:表单键值对。(form表单)
3.raw:传各种其他类型参数,比如:text,javascript,json,html。
4.binary:用于上传二进制文件。 -
Pre-request script:接口请求之前的js脚本(前置脚本)
-
Tests:接口请求之后的断言
-
Seting:对请求的设置
3、响应的功能页签字段说明
- Body:响应内容
- pretty:json格式
- raw:文本格式
- preview:网页格式
- cookie:响应的cookie信息
- Headers:响应头信息
- test Results:断言结果
- 响应状态码:200
- 响应信息:ok
- time Size :响应时间和响应字节数
- 控制台(Console):用于接口测试调试
Postman高级用法
一、用例管理
-
作用:规范法管理接口上的大量测试用例
-
实现步骤:
-
创建集合---项目(如IHRM、tpshop)
-
创建文件夹---模块(如:登录、员工管理)
-
创建请求---测试用例(如:登录成功)
-
二、Postman断言
1、断言前置基础
-
断言:通过代码自动判断实际运行的结果是否与测试用例中的预期结果一致
-
断言结果:
- 结果一致:测试通过pass
- 结果不一致:测试不通过fail
-
Postman的断言
- 使用JavaScript语言编写的,写在Postman的【Tests】 标签中
- 【Tests】中的脚本在发送请求之后执行,它会把断言的结果(PASS/FAIL)最终在【TestResults】 标签页中
- Postman的常用断言
- 断言响应状态码是否为200(Status code is 200)
- 断言响应体JSON数据校验(Response body:JSON value check)
- 断言响应体是否包含指定字符串(Response body: Contains string)
- 断言响应体是否等于指定字符串(Response body:Is equal to a string)
- 断言响应头是否包含指定的头信息(Response headers: Content-Type headercheck)
2.1 断言响应状态码(重点)
样例代码:
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
说明: pm.test是postman内置对象pm对外提供的一种名称为test的方法,他的功能是使用pm.test来编写测试脚 本时,即使方法内部处理内容出现错误也不会影响后续自动化脚本的运行。
案例:
1.请求IHRM项目的登录接口,请求数据({"mobile":"13800000002","password":"123456"})
2.登录接口地址URL:http://ihrm-test.itheima.net/api/sys/login
3.请设置断言自动判定服务器响应状态码为200
2.2 断言JSON数据(重点)
示例代码:
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
说明:var是用来声明javascript的变量,上面的代码等价于下面的代码。
pm.test("Your test name", function () {
pm.expect(pm.response.json().value).to.eql(100);
});
案例:
1.请求IHRM项目的登录接口,请求数据({"mobile":"13800000002","password":"123456"})
2.登录接口地址URL:http://ihrm-test.itheima.net/api/sys/login
3.请设置断言自动判定服务器响应体数据中success=true,code=10000,message=操作成功!
2.3 断言包含指定的字符串内容(知道)
样例代码:
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
案例:
1.请求IHRM项目的登录接口,请求数据({"mobile":"13800000002","password":"123456"})
2.登录接口地址URL:http://ihrm-test.itheima.net/api/sys/login
3.请设置断言自动判定服务器响应体数据中包含【操作成功】
2.4 断言等于指定的字符串(知道)
样例代码:
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string");
});
案例:
1.请求IHRM项目的登录接口,请求数据({"mobile":"13800000002","password":"123456"})
2.登录接口地址URL:http://ihrm-test.itheima.net/api/sys/login
3.请设置断言自动判定服务器响应体数据等于【操作成功】
2.4.1 题目怎么完整的匹配一个JSON返回数据?
思考:怎么完整的匹配一个JSON返回数据呢?
说明:直接单引号包裹起来即可
// 服务器响应体数据中等于【操作成功】精确查找
pm.test("服务器响应体数据中等于【操作成功】精确查找", function () {
pm.response.to.have.body( '{"success":true,"code":10000,"message":"操作成 功!","data":"9ad2a988-e618-47ec-9498-1efe9535c88e"}');
});
2.5 断言响应头标签(了解)
示例代码:
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type");
});
案例:
1.请求IHRM项目的登录接口,请求数据({"mobile":"13800000002","password":"123456"})
2.登录接口地址URL:http://ihrm-test.itheima.net/api/sys/login
3.请设置断言自动判定服务器响应头中包含Content-Type和Content-Length
3、断言综合练习
1.请求IHRM项目的登录接口,请求数据({"mobile":"13800000002","password":""})
2.登录接口地址URL:http://ihrm-test.itheima.net/api/sys/login
3.请设置断言自动判定服务器:
(a)响应状态码为200
(b)响应体数据中success=false,code=20001,message=用户名或密码错误,data=null
(c)响应体数据中包含【用户名或密码错误】
(d)响应体数据等于【false】
(e)响应头中包含Content-Type
1.请求IHRM项目的登录接口,请求数据({"mobile":"13800000002","password":""})
2.登录接口地址URL:http://ihrm-test.itheima.net/api/sys/login
3.请设置断言自动判定服务器:
(a)响应状态码为200
(b)响应体数据中success=false,code=20001,message=用户名或密码错误,data=null
(c)响应体数据中包含【用户名或密码错误】
(d)响应体数据等于【false】
(e)响应头中包含Content-Type
// 3.请设置断言自动判定服务器:
// (a)响应状态码为200
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
// (b)响应体数据中success=false,code=20001,message=用户名或密码错误,data=null
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.success).to.eql(false);
});
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.code).to.eql(20001);
});
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.message).to.eql("用户名或密码错误");
});
// (c)响应体数据中包含【用户名或密码错误】
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("用户名或密码错误");
});
// (d)响应体数据等于【false】
pm.test("Body is correct", function () {
m.response.to.have.body(false);
});
// (e)响应头中包含Content-Type
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type");
});
三、环境变量与全局变量
1、概念
- 全局变量:作用范围是针对postman下面所有测试集均生效
- 环境变量:
- 只对选择了对应环境的测试集生效(如:选择了测试环境的测试集IHRM0720)
- 开发环境、测试环境、生产/线上环境
- 一套环境中变量不能重复、但是可以定义多个不重复的变量
2、设置变量
-
全局变量
- 手动设置
- 代码设置:
// 设置全局变量 pm.globals.set("g_name", "jack");
-
环境变量
-
手动设置
-
代码设置
// 设置环境变量 pm.environment.set("e_name", "rose");
-
2.1 题目全局变量和环境变量优先级?
3、获取变量
-
全局变量与环境变量
-
在请求参数中获取:{{变量名}}
-
URL
-
-
请求头
-
-
请求体
-
-
通过代码来获取
pm.environment.get("variable_key"); pm.globals.get("variable_key"); // 获取环境变量的值 mobile2和password2 var mobile = pm.environment.get("mobile2"); var password = pm.environment.get("password2"); console.log("测试环境中的mobile是:" + mobile) console.log("测试环境中的password是:" + password)
-
四、请求前置脚本(了解)
-
介绍:在Pre-request Script页签类编写,在请求发送之前被执行
-
使用场景
- 在请求url中需要使用随机数或时间戳
- 需要对敏感数据进行加密
1、生成随机数
-
使用案例1
// 生成随机数 var r=Math.floor(Math.random()*10); console.log("生成的随机数",r) // 通过全局变量保存随机数 pm.globals.set("g_random", r);
2、生成时间戳
-
使用案例2
//获取当前时间戳 var times = Date.now(); console.log(times); //设置为全局变量 pm.globals.set("times", times)
五、Postman关联(重点)-token
1、概念
-
Postman关联:后一个接口的请求需要依赖前一个接口的响应数据,一般通过全局变量或者环境变量来进行参数在接口之间的传递。
-
技术实现
2、 通过全局变量进行接口关联
案例1:
1.请求获取天气接口,http://www.weather.com.cn/data/sk/101010100.html
2.获取天气接口返回结果中的城市名称
3.请求百度搜索接口:http://www.baidu.com/s?wd={{城市名称}},城市名称即为天气接口获取并保存 到全局变量中的数据。
![img](file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml13788\wps1.jpg)
3、 通过环境变量进行接口关联
案例2:
1.请求获取天气接口,http://www.weather.com.cn/data/sk/101010100.html
2.获取天气接口返回结果中的城市名称
3.请求百度搜索接口:http://www.baidu.com/s?wd={{城市名称}},城市名称即为天气接口获取并保存 到环境变量中的数据。
六、Postman关联(重点)-cookies
案例3:
1.iwebshop项目登录接口,http://localhost:8080/jwshoplogin/user/login.do?username=李慧&password=123456
2.获取响应体中返回的cookies 保存在全局变量中
3.请求百度搜索接口:http://www.baidu.com/s?wd={{城市名称}},城市名称即为天气接口获取并保存 到环境变量中的数据。
七、批量执行测试用例(掌握)
- 操作步骤
八、读取外部文件实现参数化(理解)
-
使用场景:针对单个接口、存在大量数据需要批量测试测试情况,我们将数据存放到外部的文件,然后postman通过读取外部文件来逐行执行脚本。
-
常见数据格式
- csv
- json
-
操作步骤
-
准备测试数据文件
-
设置参数
-
在请求中使用时,直接通过{{变量名}}引用
-
在断言中使用时,需要借助postman内置的data方法来进行使用,如 data.username
-
-
选择数据文件进行批量执行
-
结果检查
-
-
案例:
需求:批量查询手机号归属地和所属运营商信息,并校验运营商数据是否正确
接口地址: http://cx.shouji.360.cn/phonearea.php?number=13012345678
部分测试数据:
手机号: 13012345678 运营商: 联通
手机号: 13800001111 运营商: 移动
手机号: 18966778899 运营商: 电信
1. 准备测试数据文件-csv
2. 准备测试数据文件-json
3. 设置参数
-
3.1在请求中使用时,直接通过{{变量名}}引用
-
3.2在断言中使用时,需要借助postman内置的data方法来进行使用,如 data.username
4.选择数据文件进行批量执行
5. 结果检查
九、Postman测试报告(掌握)
1、Newman介绍与安装
-
Newman:一款基于nodejs开发的可以运行Postman脚本的工具,并且可以生成测试报告。
-
安装Newman
-
安装nodejs
- 下载地址: http://nodejs.cn/download/
- windows系统直接双击运行安装包,如【node-v12.10.0-x64.msi】
- 校验:打开cmd输入【node -v】,看到输出node版本信息,即代表成功
-
安装newman
- 打开cmd,输入【npm install -g newman】
- 校验:输入【newman -v】
-
安装newman-reporter-html
- 打开cmd输入:【npm install -g newman-reporter-html】
-
2、 Postman导出测试集、环境变量、全局变量
2.1 导出测试集
2.2 导出环境变量
2.3 导出全局变量
3、Newman运行及生成报告
- 打开一个cmd窗口,使用Newman命令,运行导出的测试脚本
- 格式:
newman run 测试脚本文件 -e 环境变量文件 -g 全局变量文件 -d 测试数据文件 -r html --
reporter-html-export report.html
eg: newman run demo.postman_collection.json -r html newman run demo.postman_collection.json -r html --reporter-html-export report.html
-
参数详解
- run 测试脚本文件:表示要执行的postman脚本,及导出的测试集
- -e 环境变量文件:指定脚本中依赖的环境变量文件的路径
- -g 全局变量文件:指定脚本中依赖的全局变量文件的路径
- -d 测试数据文件:指定脚本中依赖的测试数据文件的路径
IHRM项目实战
1、初始化工作
1.1 创建测试用例结构
1.2 设置环境变量
-
开发环境
base_url = http://ihrm-dev.itheima.net
-
测试环境
base_url = http://ihrm-test.itheima.net
-
生产环境
base_url = http://ihrm-prod.itheima.net
2、实现测试用例
2.1 登录——登录成功(关联token)
操作步骤:
1. 在‘登录’目录下,添加‘登录成功’的请求
2. 填写请求数据:请求方式、请求URL、请求头、请求体
3. 在‘Tests’标签页中,编写测试脚本:断言、业务数据处理
4. 发送请求,调试脚本
2.2 员工管理
2.2.1 添加员工(依赖token)
2.2.1 添加员工(关联员工ID)
2.2.1 添加员工(添加成功)
2.2.2 查询员工(依赖token和ID)
-
请求地址中后加上关联的员工ID
{{base_url}}/api/sys/user/{{e_id}}
-
请求头中加上关联的token
- 查询员工成功