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