postman 接口测试使用教程


一、接口测试的简介和分类

1.定义

接口测试就是测试系统组件接口之间的一种测试。

2.分类

测试外部接口:测试被测系统和外部系统之间的接口。(只需要测试正例即可)
测试内部接口:
1.内部接口只提供给内部系统使用。(只需要测试正例即可)
2.内部接口提供给外部系统使用。(测试必须非常全面,正例,各种异常场景,权限控制)

二、接口测试的流程以及用例的设计

1.拿到接口api文档(无接口api文档可通过抓包工具获取),熟悉接口业务,接口地址,鉴权方式,入参,出参,错误码。
2.编写接口用例以及评审。
思路:
正例:
输入正常入参,接口能够成功返回数据。
反例:
【鉴权反例】鉴权码为空,鉴权码错误,鉴权码过期…
【参数反例】参数为空,参数类型异常,参数长度异常。
【错误码覆盖】根据业务来定的。
【其他错误场景】接口黑名单,接口调用次数限制,分页场景。
接口测试用例模版
3.使用接口测试工具Postman执行接口测试。
4.Postman+Newman+Jenins实现持续集成,并且输出测试报告并且发送邮件。

三、Postman的简介,安装,注册

1.Chrome应用商店搜索Postman安装。(翻墙)
2.客户端安装
官网地址:https://www.postman.com/downloadswww.postman.com官网下载
下载跟电脑系统一致的postman版本
3.Postman的注册和登录

创建账户
创建免费的账户
邮箱会收到邮件,进行确认
邮件确认

四、postman的界面介绍

postman登录后界面:
postman界面
我的工作空间:
postman-我的工作空间
postman界面介绍

五、发送get请求和响应页签详解

第一步:创建集合
在这里插入图片描述
第二步:输入项目名称
在这里插入图片描述
右击项目,新增一个请求
在这里插入图片描述
填写接口名称
在这里插入图片描述
请求url:
http://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
在这里插入图片描述
请求页签
Params:get请求传参
Authorization:鉴权
headers:请求头
Body:post请求传参
form-data:既可以传键值对参数也可以传文件
x-www-form-urlencoded:只能够传键值对参数
raw:可以传Text、JavaScript、JSON、HTML、XML
binary:把文件以二进制的方式传参
Pre-request Script:请求之前的脚本
Tests:接口请求之后的脚本、断言
Coolies:用于管理cookies信息
在这里插入图片描述![在在这里插入图片描述
响应页签:
在这里插入图片描述
在这里插入图片描述

{
    "access_token": "72_JiYEbH6HY3Vy_GFxnhDsM1RK1guasZVJn8Y67GrlpGU8_DeNy_Osa2lQNXG30hAprSVLzy0zw8fq5r4BtHH-XKeB-BWVCWf8oiswooYENTtLg_FC0trcwmNHBioWPRfAFAIBD",
    "expires_in": 7200
}

Body:接口返回的数据
Pretty:以JSON XML HTML Text不同格式查看返回的数据
Row:以文本的方式查看返回的数据
Preview:以网页的方式查看返回的数据
Cookies:响应的Cookies信息
Headers:响应头
Test Results:断言的结果
200 状态码
OK 状态信息
615ms 响应的时间
338B 响应的字节数

六、发送post请求以及get和post的区别

url:
https://api.weixin.qq.com/cgi-bin/tags/create?access_token=ACCESS_TOKEN
参数填入第一步返回的token
在这里插入图片描述
在Body-raw-JSON里传入参数name:
{“tag”:{“name”:“重庆华虎111”}}
点击Send发送调用接口

面试题:
get请求和post请求的区别:
1.get请求一般是获取数据,post请求一般是提交数据。
2.post请求比get请求安全。
3.本质区别是传参的方式不一样:
get请求在地址栏后面以?的方式传参,多个参数之间用&分隔。
post请求是在body以表单的方式传参。

以上的问题:
多种环境:开发环境,测试环境,生产环境(两个接口的域名是一样的)
接口关联:需要手动关联(第一个接口返回的token值手动填到第二个接口的参数)
参数需要手动修改(name参数不能与已存在的标签名重复,每次修改需手动修改)

七、Postman的环境变量以及全局变量

在这里插入图片描述
添加开发环境,测试环境,生产环境:(变量名保持一致,都为ip)
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
用双大括号加变量名的方式来取得环境变量的值
在这里插入图片描述

在这里插入图片描述
环境变量:环境变量就是全局变量
全局变量:全局变量是能够在任何接口里面访问的变量
获取环境变量和全局变量的方法:{{变量名}}
在这里插入图片描述

八、接口关联

1.Json提取器

使用json提取器实现接口关联
在这里插入图片描述
在这里插入图片描述

第一个接口:
//使用json提取器提取access_token值
//把返回的字符串格式的数据转换成对象的形式。
var result = JSON.parse(responseBody);
//把access_token设置为全局变量
 pm.globals.set("access_token", "result.access_token");
第二个接口:
{{access_token}}

2.正则表达式

使用正则表达式的方式实现接口关联
返回以Text查看,以便于复制上去做正则表达式
在这里插入图片描述
在这里插入图片描述

第一个接口:
//使用正则表达式提取器实现接口关联,match匹配。
var result = responseBody.match(new RegExp('"access_token":"(.*?)"'));
console.log(result[1]);
//设置为全局变量
pm.globals.set("access_token",result[1]);
第二个接口:
{{access_token}}

九、Postman内置动态参数以及自定义的动态参数

postman内置动态参数:

{{$timestamp}}  //生成当前时间的时间戳
{{$randomin}}   //生成0-1000之间的随机数
{{$guid}}       //生成速记GUID字符串

自定义动态参数:
在这里插入图片描述
在这里插入图片描述

//手动的获取时间戳
var times = Date.now();
//设置为全局变量
pm.globals.set("times", times);

使用时使用{{times}}

十、其他接口

1.获取接口统一鉴权码token接口
url:

http://{{ip}}/cgi-bin/token?grant_type=client_credential&appid=wx6b11b3efd1cdc290&secret=106a9c6157c4db5f6029918738f9529d

在这里插入图片描述

console.log(responseBody); //先做一个打印
//使用json提取器提取access_token值
//把返回的字符串格式的数据转换成对象的形式。
var result = JSON.parse(responseBody);
console.log(result.access_token);
//把access_token设置为全局变量
pm.globals.set("access_token", result.access_token);

在这里插入图片描述
2.创建标签接口
url:

https://{{ip}}/cgi-bin/tags/create?access_token={{access_token}}

在这里插入图片描述
在这里插入图片描述

{"tag":{"name":"深圳华仔{{times}}"}}

在这里插入图片描述

//手动的获取时间戳
var times = Date.now();
//设置为全局变量
pm.globals.set("times", times);

在这里插入图片描述

//获得创建的标签ID
var tag_id = responseBody.match(new RegExp(' "id": (.*?),'));
console.log(tag_id[1])
//把标签id设置为全局变量
pm.globals.set("tag_id",tag_id[1]);

3.编辑标签接口
url:
https://{{ip}}/cgi-bin/tags/update?access_token={{access_token}}
在这里插入图片描述
在这里插入图片描述

{"tag":{"id":{{tag_id}},"name":"深圳华仔1"}}

4.获取公众号已创建的标签接口
url:

https://{{ip}}/cgi-bin/tags/get?access_token={{access_token}}

在这里插入图片描述
5.删除标签接口
url:

https://api.weixin.qq.com/cgi-bin/tags/delete?access_token={{access_token}}
{"tag":{"id":{{tag_id}}}}

在这里插入图片描述
增删改查形成业务闭环
6.文件上传接口
url:

https://{{ip}}/cgi-bin/media/uploadimg?access_token={{access_token}}

在这里插入图片描述

十一、断言

常规的六种断言:
Status code:Code is 200 检查返回的状态码是否为200
Resoonse body:Contains String 检查响应中包含指定字符串
Response body:JSON value check 检查响应中其中json的值
Response body:Is equal to a string 检查响应等于一个字符串

Response headers:Content-Type header check 检查是否包含响应头Content-Type
Response time is less than 200ms 检查请求耗时小于200ms

接口一:
在这里插入图片描述

//断言
//状态断言
pm.test("检查返回状态码为200", function () {
    pm.response.to.have.status(200);
});
//业务断言
pm.test("检查响应中包括access_token", function () {
    pm.expect(pm.response.text()).to.include("access_token");
});
//检查响应头中包含有Content-Type响应头
pm.test("Content-Type is present", function () {
    pm.response.to.have.header("Content-Type");
});
//检查响应时间少于500ms
pm.test("Response time is less than 200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(500);

接口二:
在这里插入图片描述

//断言
//状态断言
pm.test("检查返回状态码为200", function () {
    pm.response.to.have.status(200);
});
//业务断言
pm.test("检查响应中包括标签名", function () {
    pm.expect(pm.response.text()).to.include("深圳华仔"+globals.times);
});

自定义动态参数(全局变量)断言的方式:
前面一个字符串拼接一个全局变量

pm.test("检查响应中包括标签名", function () {
    pm.expect(pm.response.text()).to.include("深圳华仔"+pm.pm.globals.get("times"));
});
三种方式:
pm.globals.get("times")
globals["times"]
globels.times

接口三:
在这里插入图片描述

//断言
//状态断言
pm.test("检查返回状态码为200", function () {
    pm.response.to.have.status(200);
});
//业务断言
pm.test("检查json里面errcode为0", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.errcode).to.eql(0);
});

接口四:
在这里插入图片描述

//断言
//状态断言
pm.test("检查返回状态码为200", function () {
    pm.response.to.have.status(200);
});
//业务断言
pm.test("检查响应里包含字符串tags", function () {
    pm.expect(pm.response.text()).to.include("tags");
});

接口五:
在这里插入图片描述

pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});
pm.test("检查响应的json里errmsg的值为ok", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.errmsg).to.eql("ok");
});

接口六:
在这里插入图片描述

pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});
pm.test("响应里包含url", function () {
    pm.expect(pm.response.text()).to.include("url");
});

全局断言:
在这里插入图片描述
可以把状态断言放到全局断言里
在这里插入图片描述

十二、postman批量运行测试用例

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
postman批量上传文件时,把文件放到postman的工作目录,打开允许读取工作目录下的文件
在这里插入图片描述

十三、postman数据驱动之CSV文件和JSON文件的处理

用第一个接口来做数据驱动,也就是说既有正例,又有反例
在这里插入图片描述
在任意一个位置新建data.csv
在这里插入图片描述在这里插入图片描述

grant_type,appid,secret,assert_value
client_credential,wx6b11b3efd1cdc290,106a9c6157c4db5f6029918738f9529d,access_token
,wx6b11b3efd1cdc290,106a9c6157c4db5f6029918738f9529d,40002
client_credential,,106a9c6157c4db5f6029918738f9529d,41002
client_credential,wx6b11b3efd1cdc290,,41004

当数据文件写好之后,第一个要改的地方,参数取数据文件里面的值也是用双大括号来取:
在这里插入图片描述
第二个要改的地方,断言的时候写死的,要改成从数据文件里面取:
在这里插入图片描述
判断当返回结果中包含有access_token时才通过正则表达式去取值
在这里插入图片描述

//判断当返回结果中包含有access_token时才通过正则表达式去取值 
if (responseBody.search("access_token")!=-1){
    //使用正则表达式提取器实现接口关联,match匹配。
var result = responseBody.match(new RegExp('"access_token":"(.*?)"'));
console.log(result[1]);
//设置为全局变量
pm.globals.set("access_token",result[1]);}

//断言
//业务断言
pm.test("检查响应中包括access_token", function () {
    pm.expect(pm.response.text()).to.include(data.assert_value);
});

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
JSON文件:
新建一个文件data.json
在这里插入图片描述

[
	{"grant_type":"client_credential","appid":"wx6b11b3efd1cdc290","secret":"106a9c6157c4db5f6029918738f9529d","assert_value":"access_token"},
	{"grant_type":"","appid":"wx6b11b3efd1cdc290","secret":"106a9c6157c4db5f6029918738f9529d","assert_value":40002},
	{"grant_type":"client_credential","appid":"","secret":"106a9c6157c4db5f6029918738f9529d","assert_value":41002},
	{"grant_type":"client_credential","appid":"wx6b11b3efd1cdc290","secret":"","assert_value":41004}
]

十四、测试必须带请求头的接口

常见的请求头:
Host 请求的主机地址
Connection 连接方式
Accept 客户端接收到的数据格式
X-Requested-With 异步请求
User-Agent 客服端的用户类型

Referer 来源
Cookie Cookie信息
Content-Type 请求内容的格式

十五、Postman接口Mock Server服务器

mock模拟
后端的接口还没有开发完成,前端的业务需要调用后端的接口。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述https://fa33883c-1f71-4491-b483-19cb13487b58.mock.pstmn.io
第一点:会自动生成一个环境变量:
在这里插入图片描述
第二点:自动生成一个项目和请求
在这里插入图片描述
假设前端想要返回的数据为{“error_code”:0,“msg”:“返回成功”,data:[]}
那就在default里面直接替代掉success,保存再去发送请求的时候就得到了想要的数据
在这里插入图片描述在这里插入图片描述
在浏览器里访问测试下:

十六、Postman的Cookie鉴权和Token鉴权

什么是cookie?
cookie是一小段文本,格式key=value。
cookie鉴权的原理:
1.当客户端第一次访问服务器的时候,那么服务器就会生成Cookie信息,并且在响应头的set-cookie里面把生成的cookie信息发送给客户端。
2.当客户端第2-N次访问服务器的时候,那么客户端就会在请求头的cookie带上cookie信息,从而实现鉴权。

cookie的分类:
会话cookie:保存在内存,当浏览器关闭之后就会自动化清除cookie。
持久cookie:保存在硬盘,浏览器关闭后不会清除,只有当失效时间到了才会自动清除。
F5刷新页面,F12 Application-Cookies查看cookie:
在这里插入图片描述
在这里插入图片描述
1.访问phpwind论坛首页接口

http://47.107.116.139/phpwind/

在这里插入图片描述
在这里插入图片描述
2.登录接口

在这里插入图片描述

<input type="hidden" name="csrf_token" value="c0d302e58ac478c0"/>

正则表达式提取token值,在第二个接口请求参数里面用,实现token关联鉴权。
在这里插入图片描述

var result = responseBody.match(new RegExp('name="csrf_token" value="(.*?)"'));

console.log(result);
pm.globals.set("csrf_token", result[1]);

接口一发送成功后,自动生成3个cookie,接口二带上这3个cookie请求才会成功。
在这里插入图片描述

接口二:
http://47.107.116.139/phpwind/index.php?m=u&c=login&a=dorun
参数:
在这里插入图片描述

在这里插入图片描述

十七、Newman

postman是专为接口测试而生,Newman(新男人)是专为postman而生。newman可以让我们的postman的脚本通过非GUI(命令行)的方式。
运行命令:newman run
常用参数:
-e 引用环境变量
-g 引用全局变量
-d 引用数据文件
-m 指定测试用例迭代的次数
-r cli,html,json,junit --reporter-html-export 指定生成HTML的报告。

新建postman文件夹,
导出测试用例——
在这里插入图片描述
导出生产环境——
在这里插入图片描述
导出全局变量:
在这里插入图片描述
拷贝数据文件data.json到新建的文件夹postman
在这里插入图片描述
在该目录下输入cmd:
在这里插入图片描述
在这里插入图片描述

newman run test_case.json -e environment.json -g globals.json -d data.json -r cli,html,json,junit --reporter-html-export report.html

在这里插入图片描述
打开生成的报告如下图:
在这里插入图片描述

补充——
newman的安装:
先安装node.js
网址:https://nodejs.org/zh-cn
在这里插入图片描述
NodeJS安装成功后,新建两个文件夹,如图:
在这里插入图片描述
cmd命令下分别运行以下两条命令:

在这里插入图片描述

npm config set prefix "D:\Program Files\nodejs\node_global"
C:\Users\严荣华>npm config set cache "D:\Program Files\nodejs\node_cache"

新建系统变量:
在这里插入图片描述
系统变量中Path添加%NODE_PATH%
在这里插入图片描述
修改用户变量中的Path:
在这里插入图片描述

安装newman:
运行命令:npm install -g newman,即可完成安装操作。
检验当前Newman是否安装成功,在dos中输入命令:newman --version
在这里插入图片描述
若出现下图报错时,请检查node js文件夹权限
在这里插入图片描述
安装newman-reporter-html:
先降低npm版本:

npm install npm@6.14.10 -g --no-fund

在这里插入图片描述
安装newman-reporter-html:

npm install -g newman-reporter-html --no-fund

在这里插入图片描述
安装jenkins:
下载java 17网址:

https://www.oracle.com/java/technologies/downloads/#jdk17-windows

新建系统变量:
在这里插入图片描述
添加到path:
在这里插入图片描述
下载jenkins.war:

https://www.jenkins.io/download/

在这里插入图片描述

安装jenkins.war:

java -jar jenkins.war

在这里插入图片描述
浏览器输入127.0.0.1:8080访问jenkins:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
进入到jenkins:
在这里插入图片描述

十八、Postman+Newman+Jenkins实现接口测试持续集成

新建项目:
在这里插入图片描述
输入项目名称,选择自由风格的项目,点确定
在这里插入图片描述
跳转到项目配置页面,先不管,进入到Jenkins首页可以看到newman这个项目。
在这里插入图片描述
进入到配置页面:
在这里插入图片描述
第二步:

newman run test_case.json -e environment.json -g globals.json -d data.json -r cli,html,json,junit --reporter-html-export report.html

在这里插入图片描述
第三步:
在这里插入图片描述
第4步:
在这里插入图片描述
保存完成后,项目右键build now:
在这里插入图片描述
构建完成后生成测试报告:
在这里插入图片描述

如果缺少插件要安装插件——
安装HTML Publisher插件:
在这里插入图片描述
安装Groovy插件:
在这里插入图片描述
安装Startup Trigger:
在这里插入图片描述

总结

Postman可以用来创建、发送、调试和记录HTTP请求,并且可以自动化测试流程和代码生成,并支持多种HTTP请求方法(GET、POST、PUT、DELETE等)和数据格式(JSON、XML、HTML等)。因此,我们可以将Postman接口测试定义为通过使用Postman工具来验证API是否能够正确地响应预期的请求并返回正确的响应数据。

  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Postman是一款非常流行的API接口测试工具,可以帮助开发者快速进行接口测试、调试和文档编写等工作。以下是一个简要的Postman接口测试教程: 1. 下载并安装Postman 首先需要下载并安装Postman软件。可以从官网下载相应的安装包,并按照提示进行安装。 2. 创建试集合 在Postman中,试用例是以集合的形式组织的。可以创建一个新的集合,然后在其中添加需要试的接口。为了方便管理和试,可以对不同的接口进行分组。 3. 添加接口 在集合中添加接口时,需要输入接口的请求地址、请求方法、请求参数、请求头等信息。可以在Postman中直接输入这些信息,也可以从文本文件或其他来源导入。 4. 发送请求 在设置好接口信息后,可以点击“发送”按钮,发送请求并获取响应结果。Postman会显示响应结果的状态码、响应头、响应体等信息。可以根据需要对这些信息进行验证和分析。 5. 断言验证 在试用例中,通常需要对接口的返回结果进行断言验证。可以使用Postman提供的断言功能,比如验证响应状态码、响应头、响应体内容等。Postman还支持自定义断言函数,可以根据需要编写相关的代码逻辑。 6. 导出试报告 完成试后,可以将试结果导出为试报告。Postman支持多种格式的试报告,比如HTML、JSON、XML等。可以根据需要选择相应的格式,并将试报告分享给其他团队成员。 以上是一个简要的Postman接口测试教程,希望能对你有所帮助。当然,Postman还有很多其他功能,比如Mock服务、环境变量管理等,可以根据实际需求进行使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值