PostMan接⼝测试(很全⾯的接⼝测试教程)
⼀:理论部分
1. 前⾔
在前后端分离开发时,后端⼯作⼈员完成系统接⼝开发后,需要与前端⼈员对接,测试调试接⼝,验证接⼝的正确性可⽤性。⽽这要求前端开发进度和后端进度保持基本⼀致,任何⼀⽅的进度跟不上,都⽆法及时完成功能模块的测试。
做为后端开发⼈员,要求独⽴开发完成某个接⼝后,开发⼈员⾃⼰需要先测试通过后再提交给测试⼈员进⾏测试,否则会出现到测试⼈员哪⾥业务流程根本就⾛不通,或者BUG会过多的情况等。
市场上有很多优秀的,完善的接⼝测试⼯具,⽐如SoapUI,Postman,JMeter、yapi等,能够⾼效的帮助后端开发⼈员独⽴进⾏接⼝测试。这⾥使⽤Postman接⼝测试⼯具,分别介绍如何对GET请求和POST请求进⾏接⼝测试。
2. Postman简介
Postman是⼀个接⼝测试⼯具,在做接⼝测试的时候,Postman相当于⼀个客户端,它可以模拟⽤户发起的各类HTTP请求,将请求数据发送⾄服务端,获取对应的响应结果,
从⽽验证响应中的结果数据是否和预期值相匹配;并确保开发⼈员能够及时处理接⼝中的bug,进⽽保证产品上线之后的稳定性和安全性。
它主要是⽤来模拟各种HTTP请求的(如:get/post/delete/put..等等),Postman与浏览器的区别在于有的浏览器不能输出Json格式,⽽Postman 更直观接⼝返回的结果。
3.Postman界⾯图
各个功能区的使⽤如下:
l 快捷区:快捷区提供常⽤的操作⼊⼝,包括运⾏收藏夹的⼀组测试数据,导⼊别⼈共享的收藏夹测试数据(Import from file, Import from folder, Import from link等),或新建请求、收藏夹、环境变量等。
l 侧边栏:包括搜索栏, Request 请求的历史记录和收藏夹管理。
l 功能区: Request 请求设置,查看 Response 响应结果和测试结果,可以将请求保存到收藏夹。
l 设置区:设置和管理环境变量和全局变量。
⼆:⼯具应⽤
1. 新建接⼝
1.1 创建Collection集合
在刚开始⼀个项⽬时,为了后续便于组织和管理,把同属该项⽬的多个 API,放在⼀组⾥。所以要先去新建⼀个 Collection: New -> Collection
1.2 创建请求
1.3 设置HTTP请求
设置 HTTP 的 Method ⽅法和输⼊ api 的地址以及请求参数或请求体
以下为获取为案例所设计的HTTP请求
GET是请求⽅法,请求⽅法是HTTP请求的必要要素,常见的请求⽅法有GET和POST两种。API地址⼀
般为URL地址。如果是请求URL中的⼊参,会在Params列出参数名称及参数取值,⽅便我们轻松的修改各⼊参的值。如有需要,还应该设置HTTP请求Headers部分。
如果是POST请求,需要将请求⽅法设置为POST,⼀般说来POST请求是有请求体的,固需要在Body部分中编写正确的请求body内容和Content-Type的值(在Headers中进⾏设置)
1.3.1 GET和POST的区别
l GET 使⽤URL 或Cookie 传参,⽽POST将数据放在Body 中。
l GET的URL 在长度上会有限制,⽽POST没有。
l POST⽐GET相对安全,因为在地址栏不可见。
l ⼀般POST请求⽤来获取数据,POST请求⽤来发送数据。
对于上⾯的区别,其实第⼀点POST也可以将数据放在URL⾥,GET请求其实也没有长度限制,POST请求看起来是隐式的,但是可以通过抓包拿到参数。
1.4 发送HTTP请求
点击上图中蓝⾊Send图标即可发送请求,验证请求结果是否正确。下图是对应的响应结果,包含Body和Headers两个部分,Body即响应体正⽂,Headers即为响应头信息,响应头不包含响应状态码和状态信息部分。
响应体包含三种查看模式,分别为:Pretty默认模式、Raw原始数据格式,Preview预览模式(此模式针对HTML页⾯效果很好)。
1.5 关联技术
关键技术是将前⼀个请求的响应结果保存到变量中,再将此变量在后续请求中进⾏引⽤。
1.5.1 保存前⼀个请求的响应数据
因为Tests模块是后置模式,可对响应进⾏处理。我们可以通过赋值⽅式把响应结果保存到变量中,参考代码如下:
1.5.2 对后⼀个请求进⾏参数化
因前⾯将access_token的值保存到了环境变量中,所以在该请求中,只需要进⾏参数引⽤即可。
1.5.3 关联的⾼级操作
利⽤Send a request实现前置步骤,例如:客服发消息模块,前置步骤是获取access_token,我们可在Pre-request Script前置步骤中发送请求,将该请求的结果保存到环境变量accesstoken中,然后在主请求中引⽤该环境变量即可。
1.5.4 附:前置步骤中发送POST请求
POST请求相⽐GET请求要复杂⼀点,因为其需要加⼊请求Header和请求Body,以下是Pre-request Script在发送POST请求的案例:构造⼀个登录请求
const loginRequest = {
url: '115.28.108.130:5000/api/user/login/',
method: "POST",
body: {
mode: 'urlencoded', // 模式为表单url编码模式
urlencoded: 'name=张三&password=123456'
}
};
发送请求
pm.sendRequest(loginRequest, function (err, res) {
console.log(err ? err : ());
});
发送JSON格式请求与发送POST请求类似,以下采⽤了raw模式发送请求体。
构造⼀个注册请求
const regRequest = {
url: '115.28.108.130:5000/api/user/reg/',
method: 'POST',
header: 'Content-Type: application/json', //注意要在Header中声明内容使⽤的类型
body: {
mode: 'raw', // 使⽤raw(原始)格式
raw: JSON.stringify({ name: '⼩⼩', password: '123456' }) //要将JSON对象转为⽂本发送
}
};
发送请求
pm.sendRequest(regRequest, function (err, res) {
console.log(err ? err : res.json()); // 响应为JSON格式可以使⽤res.json()获取到JSON对象
});
因为HTTP请求都⽀持raw格式,我们只要能够获取请求的raw格式,便可采⽤raw模式发送任意类型的请求体了。
2.接⼝数据⽤例
2.1 数据⽤例设计
Postman⽀持的是csv⽂件作为数据⽤例,数据⽤例包含三⼤部分,分别为:⽤例标题(title),⼊参(grant_type,appid,secret),期望结果(expected)
title grant_type appid secret expected
正确的⽤例client_credential wx508a5cacbbfc1141fa4fc7f17ddead12d7cdcd994e7d25437200
grant_type错误client_credentia wx508a5cacbbfc1141fa4fc7f17ddead12d7cdcd994e7d254340002
appid错误client_credential wx508a5cacbbfc114fa4fc7f17ddead12d7cdcd994e7d254340013
secret错误h client_credential wx508a5cacbbfc1141fa4fc7f17ddead12d7cdcd994e7d25440001
我们可以根据⿊盒⽤例设计⽅法如等价类、边界值、判定表、正交实验法对⼊参进⾏⽤例设计,得到各
种不同的测试场景(取值组合)2.2 数据⽤例参数化
前⾯我们在csv⽂件中编写好了数据⽤例,且保证第⼀⾏为参数的名称。将请求中⼊参值依次进⾏替换,在Postman中参数的编写规格为两个花括号,如:{{appid}}
2.3 设置迭代器
要读取所有的测试⽤例,需要设置迭代器让其循环读取那些测试数据。Postman中设置迭代器需在Run中完成,请看【4.Runner执⾏测试】3.结果检查(断⾔)
Postman的断⾔功能在Test模块中,⽐如要测试返回结果是否含有某⼀字符串,就需要在Test中编写相应的代码,Test中的代码使⽤的是JavaScript语法。
3.1 Postman⾃带Tests函数
Postman提供了参考代码供我们选择即可,主要断⾔代码有如下⼏种:
# 断⾔状态码是否为200,在断⾔中此种断⾔价值不⾼
});
# 断⾔响应⽂本中是否包含某个数据串,常⽤
<()).to.include("string_you_want_to_search");
});
# 使⽤JsonPath断⾔
var jsonData = pm.response.json();
});
# 检查响应正⽂中是否包含某个⼦串
});
# 响应信息包含列表中其中某⼀个
});
# 将xml响应转为json
var jsonObject = xml2Json(responseBody);
3.2 ⼿⼯tests函数
也可以使⽤断⾔并赋值的形式,相对⽽⾔,以下⽅式会更为简洁实⽤。
常见的断⾔代码有:
# 检查response的body中是否包含字符串
tests["Body matches string"] = responseBody.has("string_you_want_to_search");
# 检查JSON节点的值和节点元素的个数为5
var data = JSON.parse(responseBody).city; //把JSON字符串转化为对象
tests["Your test name"] = data.value===100;
tests["program's lenght"] = data.programs.length===5;
# 验证Response time是否⼩于某个值
tests["Response time is less than 200ms"] = responseTime < 200;
3.3 tests⾼级操作
我们可以引⽤数据⽤例csv⽂档中的预期结果进⾏断⾔。
var jsonData = JSON.parse(responseBody) ;
# pected 为csv数据⽂件中的预期结
tests["测试结果通过"] = pires_in===pected ;
在tests还可以使⽤判断语句进⾏断⾔,如下:
在Postman中断⾔的操作⾮常灵活,需要同学们多进⾏练习。
if(JSON.parse(responseBody).city==="长沙"){
<()).to.include("千⾥");
<()).to.include("长沙");
}else if(JSON.parse(responseBody).city==="Changsha"){
<()).to.include("千⾥");
<()).to.include("Changsha");
}else if(JSON.parse(responseBody).city==="⾧沙"){
<()).to.include("千⾥");
<()).to.include("⾧沙");
}
});
4.Runner执⾏测试
4.1 设置迭代器
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论