Postman接口测试详细教学,一文精通接口测试!

一、接口测试分类

接口分类:

测试外部接口:是被测系统和外部系统之间的接口。(一般只要正常调用即可)

测试内部接口:是被测系统内部各个模块之间的接口。

1.内部接口提供给内部系统使用(一般只要正常调用即可)

2.内部接口提供给外部系统使用(测试必须非常全面)

接口测试重点测试什么:

接口参数传递的正确性,接口功能的正确性,以及各种异常情况系统的容错能力,接口的权限控制,接口的兼容性。

二、接口测试流程,用例设计方案

测试流程:

1.拿到api接口文档(可以从开发拿,也可以抓包自己创建,也可以录制后自己创建),熟悉接口文档业务,接口地址,接口鉴权(鉴定是否有访问接口的权限)方式,接口入参,出参,是否有完善的错误码机制。

2.编写接口测试用例以及评审。

设计用例思路:

重点在于正例&反例:

正例输入正常的入参,接口能够正常返回。(get/post)

鉴权反例:必填,错误的鉴权码,鉴权码已过期........

参数反例:必填,参数类型异常,参数的长度异常......

错误码反例:

其他场景:黑名单,接口调用次数限制,分页场景。

接口的兼容性:一个接口是否能兼容多个版本的前端。

3.使用接口测试工具Postman/jmeter/apifox执行接口测试,提供BUG,以及BUG验证。

4.Postman+Newman+Jenkins+git实现持续集成并且生成报告。

三、执行接口测试

请求:请求方式,请求路径,请求头,请求参数

Params:get请求传参。

Authorization:鉴权

Headers:请求头

accept:客户端接收的数据类型。

content-type:客户端发送给服务器的数据类型

user-agent:客户端的类型

xmlhttprequest:异步请求

.....

Body:post请求传参

none:没有参数

form-data:文件上传(包含键值对和文件上传)

x-www-from-urlencodeed:表单请求(键值对)

raw:使用原始数据格式请求(JSON,XML,HTML,Text,Javascript)

binary:二进制文件上传。

Pre-request Script:请求之前的脚本。

Tests:请求之后的脚本。

Settings:设置

Cookies:是Postman用于自动管理Cookie的功能

响应:

Body:返回的值

Pretty:以不同的格式查看返回结果

Raw:以文本格式查看返回结果

Preview:以网页格式查看返回结果

Cookies:响应的Cookie

Headers:响应头

TestResults:断言的结果

调试:

Console控制台

-----------------------------------------------------------------------------------------------------

插入一道必须要知道的面试题:

get请求和post请求的区别是什么?

1.get请求一般用于获取数据,post一般用于提交数据。

2.传参的方式不一样:get请求在接口地址里面以?的方式传参,多个参数直接用&分隔。post是在body当中传参。

3.post比get请求安全。

4.get请求只发一个数据报文,post请求发送两个数据报文

四、接口关联

第一种方式:

1.取值并设置全局变量(JSON提取器)

//打印用于调试
console.log(responseBody);
//把返回的字符串转换成JSON对象。
var baili = JSON.parse(responseBody);
//取值
console.log(baili.access_token);

2.在需要的接口里面通过{{}}取得全局变量的值

{{token}}

json;是一种数据格式。它有两种数据:

1.对象(字典)(键值对,key:value) {key:value}

2.数组 (列表) [a,b,c,d]

键值对:key:value

第二种方式:

正则表达式提取器

//正则表达式提取器
console.log(responseBody);
//通过正则匹配值,match匹配,
var aaa = responseBody.match(new RegExp('"access_token":"(.*?)"'));
console.log(aaa[1]);
//设置成全局变量
pm.globals.set("tokens",datas[1]);

2.在需要的接口里面通过{{}}取得全局变量的值

默认第二个匹配的对[1]

{{token}}

Postman的动态参数

第一种:系统自带的动态参数

{{$timestamp}} //动态时间戳

{{$randomInt}} //动态0-1000的整形

{{$guid}} //动态的guid字符串

第二种:自定义的动态参数

//自定义动态参数生产随机数
var times = Date.now();
pm.globals.set("times",times);
//定时五秒在执行的脚本
const sleep = (milliseconds) => {
const start = Date.now();
while (Date.now() <= start + milliseconds) {}
};
sleep(5000);

Postman的断言

检查返回的状态码是否为200(常用)

检查返回的数据中包括有指定的字符串(常用) 检查json中的其中一个字段的值(常用)

检查返回的值等于一个指定的字符串(常用) 检查是否包含有content-type响应头

检查请求的时间少于200MS

检查返回的状态码是否在数组中。检查状态信息是指定的字符串。

//----------------------------------断言-----------------------

pm.test("检查返回状态码为200", function () { 
pm.response.to.have.status(200);

});

//

pm.test("检查返回的结果中包括指定字符串", function () { 
pm.expect(pm.response.text()).to.include("access_token");

});

//

pm.test("检查json中其中一个字段的值", function () {

var jsonData = pm.response.json();

pm.expect(jsonData.expires_in).to.eql(7200);

});

//第四种在编辑接口

pm.test("Body is correct", function () {

pm.response.to.have.body('{"errcode":0,"errmsg":"ok"}');

});

//

pm.test("Content-Type is present", function () {21 pm.response.to.have.header("Content-Type");

});

//

pm.test("Response time is less than 200ms", function () {

pm.expect(pm.response.responseTime).to.be.below(300);

});

pm.test("Successful POST request", function () {

pm.expect(pm.response.code).to.be.oneOf([200, 202]);

});

pm.test("Status code name has string", function () {

pm.response.to.have.status("OK");

});

一旦需要断言随机数,那么就必须使用自定义动态参数并且要注意如下事项:

1.在断言中不能够使用{{}}的方式取全局变量。

2.一般通过:pm.globals.get("times") 取全局变量的值

Postman批量运行测试用例

特别要注意:文件上传的接口在做批量运行的时候会报错。解决方案:

放在files目录下

Postman的参数化(CSV,JSON)

特别注意:在断言中取数据文件的值,不能使用:pm.globals.get("times") ,而是要使用:data.assert_str

五、环境变量和全局变量

全局变量:在所有的接口里面都可以访问的变量。环境变量:在当前环境里面都可以访问的变量。

1.设置环境变量

2.把所有的请求中的ip地址改成获取环境变量的方式:{{ip}}

3.在postman的右上角选择不同的环境即可。

六、Postman接口测试之Cookie鉴权

1.什么是cookie

cookie是一小段文本,格式是key-valuie键值对。

分类:持久化,会话级。

2. 查看Cookie

F12,抓包工具。

3.Cookie是如何实现鉴权的,如果判断接口和接口之间存在Cookie鉴权

cookie可以传输session,也可以传输token。                              

cookie鉴权的原理:分为两步

1)当客户端第一次访问服务器的时候,那么服务器就会生成cookie,并且通过响应里面的set-cookie 传输给客户端。客户端会自动保存。

2)当客户端第2-N次访问服务器的时候,那么客户端就会自动的读取本地的cookie,然后根据主机IP或域名添加对应的cookie从而实现鉴权。

4.Postman实现Cookie鉴权

自动处理。但是不是万能的。经常会有坑(比如缓存没去)

七、mock测试

mock:模拟应用场景:

1.前后端分离的架构下,前后端的开发是不同步,前端的展示数据依赖于后端的接口。后端的接口还没完成。这时候怎么办?

前后端联调:就是去掉mock,然后让前端访问真实的后端接口。              

2.当被测系统调用第三方接口,这个时候我们想要测试这个接口的错误场景。

3.去甲方展示demo,静态网页。

去缓存刷新:Shift+F5(避免坑)

postman的mock的接口每天只能访问1000次。

八、Postman如何处理需要加密和解密的接口

目前市面上的加密技术:               

1.对称式加密:DES,AES,Base64

2. 非对称式加密(双钥):RSA加密

3. 只加密不解密:SHA加密,MD5

4. 混合加密(自定义加密方式)

5.接口签名Sign

postman怎么做加密接口测试?

在前置脚本设置

//Base64位加密
//把需要加密的值转换成utf-8的编码格式
var us = CryptoJS.enc.Utf8.parse("admin");
var pw = CryptoJS.enc.Utf8.parse("123");
//对转换后的值做Base64加密
var bs64_us = CryptoJS.enc.Base64.stringify(us);
var bs64_pw = CryptoJS.enc.Base64.stringify(pw);
//设置为全局变量,toString().toUpperCase()转为大写的意思
pm.globals.set("bs64_us",bs64_us.toString().toUpperCase());
pm.globals.set("bs64_pw",bs64_pw.toString().toUpperCase());

九、Postman持续集成

详见本人主页postman持续集成篇

newman+allure生成完美报告

  • 33
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

L小林同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值