Postman工具的应用
一、Postman简介
Postman是一个接口测试和http请求的工具,它主要针对的是http请求。模拟浏览器发送请求,接收响应。使用Postman可以模拟任何浏览器发出的请求,可以构造地址,请求方法,请求内容,Cookies等。Postman的响应内容包括完整的响应头,响应时间,响应大小,cookie等内容
二、Postman入门
从官网下载Posman,安装完成后,开始使用,下方是Postman的基本界面
1.使用Postman发送请求
1.1新建集合 Collection
-
启动Postman后,点击file-new,选择Collection,输入集合名字
-
集合Collection中还可以创建不定层级的Folder
1.2 新建请求
- 选择一个Folder, 右键,点击Add Request,给Request命名
1.3 查看响应结果
- 在Requset界面中,输入请求地址url,点击Send按钮,就可以看到接口的返回值,结果图如下:
1.4 易错点:请求时key值出错,原因及解决方法
- 在发送Request请求时,请求key的值正确,但是key单词不是小写,Response中返回的结果为请求key错误。
- 解决方法:key单词严格按照接口文档中的格式,小写,报错问题解决
Postman工作原理
(1)输入请求,并单击Send按钮
(2)该请求由API服务器收,并返回响应
(3)响应由Postman接收,接口响应内容在工具中可视化
2. 执行请求前和响应后代码
Postman中,预请求脚本(Pre-request Script)是一种在发送请求之前执行的脚本。它可以用于设置请求头、修改请求参数或执行其他操作。
测试(test)是一种在发送请求之前执行的脚本。
3. 查看控制台日志
Postman界面有控制台console,可以帮助用户了解系统后台发生了什么
三、Postman基本操作
1.GET请求
HTTP GET请求方法是从服务器检索数据。数据可以在URL地址中展示出来,GET请求将参数拼接在URL后面并传递给服务器(参数的Key与Value之间由“=”号,Value不需要引号包裹,多个参数之间用“&”符号连接)
1.1构建请求
param1 和param 2表示发送的参数
**?**后面接参数
**&**连接多个参数
参数编辑:
- 点击Params按钮,Postman可以自动帮助我们解析出对应出对应参数。
- 如果想要暂时不传参数,可以方便的通过不勾选的方式去实现
- 如果想要批量的编辑参数,可以点击右上角的Bulk Edit,去实现批量编辑
2. POST请求
3. PUT请求
4. DELETE请求
返回的是“:”而不是“=”
5. PATCH请求
Postman测试项目登录界面
无接口文档时,用Fiddler抓包接口,自己写接口文档,再在Postman中测试
四、Postman中的变量
1.变量类型
临时变量(Data Variable)普通变量:在某个代码段中使用。
集合变量(Local Variable)项目变量:只在某个集合下使用
环境变量(Environment Variable):在某个环境下使用
全局变量(Global Variable):整个postman中的请求都可以使用
2.临时变量Data Variable
1.设置一个临时变量,var 变量名=变量值
2.console.log(变量名)
,验证变量是否定义成功,结果如下:
3.集合变量 Local Variable
1.在Postman界面,选中集合,Variables选项中定义集合变量c_var
,赋值
2.代码Set a collection variable
定义集合变量Collection Variables,ps:定义完成需要Get a collection variable
,声明一下,请求并验证
3.发送请求,集合变量获取成功
4.环境变量Environment Variable
1.图形化界面定义变量
(1)点击右上角“眼睛”按钮,新建环境变量
(2)输入环境名,并设置环境变量名和环境变量值,Ctrl+S保存,可以再次点击眼睛按钮查看定义的环境变量
(3)选择一个请求Request,点击Tests,右方侧边栏点击Get a environment variable
,获取一个环境变量并赋值给e_var1,console.log打印,Ctrll+S保存。代码如下:
// 获取一个环境变量
e_var1=pm.environment.get("e_var");
// 打印,查看e_var的值
console.log(e_var1)
(4)点击Send,发送请求,环境变量值在Console中打印成功。
2.JS代码定义环境变量
(1)选择请求Request,侧边栏点击Set an environment variable
,设置环境变量名variable_key
为e_var2
,环境变量值variable_value
为fffffffff
(2)侧边栏点击Get a environment variable
,获取环境变量并赋值给e2,console.log(e2)
打印e2的值
(3)Ctrl+S保存,点击Send,发送请求,验证环境变量是否定义成功,代码如下:
// 定义环境变量e_var2,值为fffffffff
pm.environment.set("e_var2", "fffffffff");
// 获取环境变量
e2=pm.environment.get("e_var2");
// 查看环境变量
console.log(e2);
(4)全局面变量在Console控制台上打印成功,结果如下:
3.引用环境变量
4.删除环境变量
环境变量用JS代码删除,侧边栏中单击Clean an environment variable
,输入要删除的环境变量名即可。代码如下:
pm.environment.unset("variable_key");// variable_key 就是要删除的环境变量名
5.全局变量Global Variable
1.图形化界面设置全局变量
(1)点击右上角“眼睛”按钮,新建全局变量
(2)进入Globals界面,设置全局变量名和全局变量值,Ctrl+S保存
(4)再次点击眼睛按钮,查看定义的全局变量
(5)选择一个Request,进入Tests,侧边栏选择Get a global variable
,赋值给g1并打印,代码如下:
// 获取一个全局变量
g1=pm.globals.get("g_var");
// 打印,查看g_var的值
console.log(g1);
(6)Ctrl+S保存,点击Send发送请求,全局变量的值在console中打印成功
5.引用变量的方法:{{参数名}}
五、添加断言Assertion
1.简介
对预先测试结果进行校验
2.在Postman中设置断言
2.1对响应体设置断言
(1)断言设置的位置:选择一个Request,单击Tests
(2)侧边栏找到Response Body:Contains string
,单击
(3)设置,返回结果中如果包含to.include
后的字符串时,pm.test
后设置断言
(4)响应结果Responce —>Test Results ,查看断言结果,为PASS
还是FAIL
代码如下:
// 判断响应体中是否包含预期的结果
pm.test("断言内容", function () {
pm.expect(pm.response.text()).to.include("断言需要的条件");// 预期结果
});
2.2对状态码设置断言
代码如下:
// 判断状态码是否为与其状态码,对响应状态码进行断言设置
pm.test("状态码是200", function () {
pm.response.to.have.status(200);
});
2.3对响应时间设置断言
代码如下:
// 判断响应时间是都为预期时间,对响应时间进行断言设置
pm.test("响应时间少于200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});
2.4转换xml返回数据为json设置断言
2.5对响应码设置断言
断言测试报错的原因
1.设置参数的参数名和cvs数据中的参数名不一样
2.设置断言的参数,大小写没有匹配成功
4.Postman中cookie的应用
以招聘系统为例,如果新增商务需求列表接口正确,请求体数据正确,但是Postman发送Send请求后,数据库中表数据不增加,因为cookie不正确,要先从登陆接口中拿到cookie,
3.在Postman中设设置参数传递(Token)
依赖登录状态的接口,在请求时,要携带服务端返回的cookie,或token,服务器验证身份后,才能进行对应操作
4.批量运行接口Run Collection
设置断言,批量运行接口,得到的pass或者fail结果可以告诉我们接口的情况,根据断言设置
六、加密接口
原理
加密时前端加的密,后端之所以能解开,是因为前后端商量好了使用哪种算法,前后端都遵循了同一种算法,就可逆,所以后端可以解开,如果别人拦截了密文,不知道加密规则,也很难解开
比如登陆禅道,在页面中输入的密码123456,在程序中使用md5加密了,Pre-request Script作用于集合cllection下的每一个请求,在每一个请求request执行之前,执行Pre-request Script脚本 。
以禅道登录为例,验证加密接口的应用
1.根据API文档,获取接口地址和入参,其中的密码应该是不加密的。如果没有API接口,用Fiddler抓取接口信息。
加密接口,password前端加密后传送后端,不记得密文,只记得明文,诉求:先加密,再发送给接口——预请求脚本Pre-request Script可以完成
将环境变量传递给登录请求的参数,Send发送请求
- 注:Fiddler抓取禅道账号登录响应内容时空白,Postman中的响应内容也是空白,换账号登录,也是空白,这是开发的问题
查看禅道登录日志,可见,Postman使用加密接口登录成功
电商项目
1.登录接口测试
因为手机号注册后,再次测试接口,就会提示已经注册,因此,生成随机数,
- 通过随机数和取整获取2位整数
- 取随机数前两位
- 把这个获取的变量设置为集合变量
{{phone}}
- 和手机号进行拼接 固定的9位+获取的变量
需要注意:round对随机数random()*100取整,可能只有一位
七、构建工作流
在使用“Collection Runner“的时候,集合的请求执行顺序就是请求在Collection中显示的排列顺序:
- 依次在集合Collection中新建 “baidu”、“jd”、“B站”三个请求,请求url就是对应的网页地址。
- 选择集合,单击三个点按钮,点击Run Collection ,批量向接口发送执行请求,构建工作流。
- 由实际运行结果可知,请求在Collection中显示的排列顺序,确实是集合的请求执行顺序:
但是,有时候我们不希望请求按照这样的方式去执行,可能是执行完第一个请求,再去执行第五个请求,然后再去执行第二个请求:那么在“Collection Runner”中该如何去构建不同的执行顺序呢?
在Postman中使用if else语句编写JS代码,可以改变集合顺序执行的速度,还以集合中baidu,jd,B站这三个接口为例,更改集合执行请求的顺序:
1.在集合中执行“jd”(京东)请求后,不再线性执行B站请求:在jd请求中的Tests中,输入以下代码
postman.setNextRequest(null);
2.选择集合,Run Collection,集合执行请求的顺序为:“baidu” —>“jd”,不再执行“B站请求”
将字符串转为JSON格式
JSON.parse内置方法,将字符串转为json格式,以字符串{"name":"tom"}
为例
var aaa='{"name":"tom"}';
// 直接取出字符串
console.log(aaa);
// JSON.parse内置方法,将字符串转为json格式,支持通过.获取value值
console.log((JSON.parse(aaa)).name);