文章目录
-
- 一、Postman的基本介绍
- 二、接口测试的基本流程
-
- 接口测试流程
- 三、Postman使用
-
- 接口收发包流程
- HTTP接口测试
- postman接口测试实战
- 接口测试实战 :POST方法
- 四、使用Postman的进阶功能:断言
- 五、测试管理-测试集与数据驱动
-
- 测试集执行
- 测试集的配置
- 测试集结果
- 测试结果的响应信息
- 六、进阶实战--cookie篇
-
- 使用Cookie的方法
- 七、进阶实战--token篇
- 八、持续集成信息
-
- newman run 测试集脚本文件
- 测试报告的获取
- 定时任务执行脚本
- Jenkins持续集成
- 九、不常用功能
一、Postman的基本介绍
接口请求面板:
接口测试:
http://www.tianqiapi.com/index/doc
1)根据接口设置的参数,验证结果是否符合要求
2)通过组合不同的参数实现测试用例的设计
3)一个请求中涉及的内容说明
字段 | 说明 |
---|---|
Params | 参数 |
Authorization | 接口鉴权的方式 |
Headers | 使用的头域 |
Body | 参数携带的各种方式 |
Pre-requestScript | 接口发起请求之前发起一些JS的脚本 |
Tests | 接口请求之后完成的脚本,通常用于断言的操作 |
Settings | 环境变量设置 |
body | 返回体 |
cookies | cookies值 |
headers | 头域 |
testresult | test执行结果的记录 |
二、接口测试的基本流程
- 接口测试:接口测试就是针对软件对外提供服务的接口的输入输出进行测试,以及接口间相互逻辑的测试,验证接口功能与接口描述文档的一致性
- 目的:接口测试通常能够对系统测试得更彻底,更好地保障产品质量,同时越早越底层地发现问题,修改和维护的代价也越小。
- 如何做接口测试:根据接口文档设计用例,调用接口,验证结果
- postman是调用接口,验证结果
接口测试流程
- 获取接口信息
通过接口文档和抓包来获取接口的基本调用方式和返回 - 接口测试用例设计
根据获取到的接口信息,按照接口测试用例设计方法,设计参数和预期返回结果
通过等价类或边界值设计测试用例
1)能够实现接口的功能:通过改变某一个参数实现对应的功能
2)去掉某一些参数勾选,查看是否会有对应的信息
- 组合所有的参数,查看对应的返回是否为我们必要的信息 查看对应的参数是否为必填的选项
- 输入错误的参数信息,是否出现异常信息
- 接口发包
使用工具或编程向接口传递参数 - 返回信息验证
获取接口返回的结果,进行解析和验证
三、Postman使用
接口收发包流程
百度IP接口实战 接口地址:https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php
HTTP接口测试
-
请求
填写接口URL—设置HTTP方法—设置请求头域----填写请求参数(请求体) -
响应验证
HTTP状态码;收到接口响应;检查返回头域;查看返回主体内容(响应体)
1)请求
Postman发起接口请求
使用抓包工具获取接口信息
重点关注:URL、方法(GET、POST等)、头域、参数
注意头域的使用,接口是否需要对应的头域进行强校验
头域添加参数:Refer
具体的操作:
在Postman创建request,关注以下的信息:方法、URL、参数、头域
2)响应信息
响应信息中具体要了解的地方
在Postman的表现如下:
关于响应体的基本格式查:
响应信息需要关注的地方
响应体
Test Result 根据上面设计的Test来进行:设置结果断言
postman接口测试实战
一定需要头域的请求
有一些接口,不需要强行校验头域
需要设置头域的接口实战:
腾讯课堂评论接口,获取信息时需要添加头域referer,才能获取到正确的评论信息。
接口地址:https://ke.qq.com/cgi-bin/comment_new/course_comment_list?cid=315793&count=10&page=0&filter_rating=1&bkn=1588724244&r=0.42442113716782326
访问地址:https://ke.qq.com/course/315793?taid=7816690155180433
直接发送不带头域的返回结果不是实际需要的
这个时候需要考虑是否是头部中的信息是否是我们需要的,通过验证refer是需要的
用于指定请求的来源,防止盗链其他网址获取信息,防止查重
使用chrome开发者工具抓包、获取url,方法、referer等信息,查看哪些参数是必要的,这里发现referer是必须的
GET: 协议名:服务器域名/文件路径资源路径? 后面是参数格式
接口测试实战 :POST方法
根据不同的Content-Type设置参数的格式
POST:from data 是放置在body进行请求的
请求体与Content-Type头域 (Request-Header)
postman | Request-Header:content-type | 作用 |
---|---|---|
x-www-form-urlencoded | x-www-form-urlencoded | 以键值对形式发送的表单参数,同时参数会携带在url中 |
form-data | multipart/form-data | 既可以发送键值对也可以进行文件参数传递。 |
raw | 原始格式编辑各Content-Type类型对应的参数格式 | 直接按请求体的格式来进行内容发送。 |
binary | 选项用于发送文件内容请求 |
-
x-www-form-urlencoded
1)会自动添加一个 header
2)会将填写的内容携带到url中,可以手动添加到url中去不影响,不用专门选择选中body中的x-www-form-urlencoded
查看响应的信息,可以看到编码的转换工具,获取登录状态信息 -
form-data
文件上传实例:http://www.testingedu.com.cn:8000/index.php/home/Uploadify/imageUp/savepath/head_pic/pictitle/banner/dir/images.html
如果不勾选文件:则会发生错误
一定要注意传递参数的格式,content-type选择方式的使用。 -
raw:使用原始的格式 不同的格式
Json格式的请求发包
Json格式请求发包实战 接口地址 :https://b.zhulogic.com/designer_api/account/login_quick_pc
网站访问地址:添加链接描述
选中传参格式为 raw中的json 格式
四、使用Postman的进阶功能:断言
1、环境变量与全局变量
接口测试过程中,经常需要使用已经设定好的参数或从其他接口的返回中获取变化的参数。
Postman:变量 实现该场景
环境变量:根据具体的接口进行使用
全局变量:供所有请求使用
变量的添加
全局变量的添加和使用
选中:Globals 填写对应的变量名称和初始值
在需要使用的地方用“{
{“选中即可:带G开头的均为全局变量,E开头为组环境变量
环境变量添加
点击Add:填写环境变量的名称 填写改组环境变量的变量名称以及值
在使用的地方选中E开头的即可,环境变量的优先级高于同名的全局变量
2、测试沙箱实战
测试沙箱常用的功能
Postman测试沙箱:结合JS脚本完成测试中的功能,在请求发起前实现部分测试操作
常用功能:
··· 请求前脚本(pre-request scripts)设置请求前置操作如设置变量等
···请求后对状态码、响应头、响应正文等信息进行断言操作
请求前脚本:
点击get an environment variable
通过Pre-request Script:进行js脚本的设置
请求前的脚本:一般是设置环境变量
var city= pm.environment.get(“cityname”);
console.log(city);
pm.environment.set(“cityname”,“长沙”);
通过控制台查看对应的信息 可以看到环境变量发生了更改,显示的信息也是
请求后的验证 断言函数
Test菜单
1)状态码
点击右侧的这个,就会自动添加测试用例来到TEST中
进行校验:测试用例需要做的事情function 进行断言
获取结果查看
验证失败的情况,测试用例的名称可以自定义
2)body信息文本
以下针对响应体验证内容获取的信息
pm.test("testcasename”,function(){
pm.expect(pm.response.text()).to.include(“string”);
});
});
具体操作如下:包含的文本
3)使用json格式验证
验证某一个参数对应的值应期望的值
pm.test("testcasename“,function(){
var jsonDate = pm.response.json();
pm.expect(jsonData.city).to.eql("长沙”);
});
4)等于某一个字符串
pm.test(“返回体的全部验证信息”, function () {
pm.response.to.have.body("{“status_code”:1001,“message”:“验证码错误”,“data”:null}");
});
5)校验头域中的内容
pm.test(“Content-Type is present”, function () {
pm.response.to.have.header(“Content-Type”);
});
6)响应时间的测试
pm.test(“响应时间”, function () {
pm.expect(pm.response.responseTime).to.be.below(10);
});
7)Post方法中响应码
pm.test(“Successful POST request”, function () {
pm.expect(pm.response.code).to.be.oneOf([201,202]);
});
8)html返回文本的校验
pm.test(“casename”,function(){
pm.expect(pm.response.text()).to.include(“ddd”);
});
json参数的具体编写
pm.test(“Your test name”, function () {
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
console.log(jsonData[1].varname);具体根据自己测试的过程中想要验证的信息字段
jsonData.result.items[0].first_comment:
使用 循环可以输出到后台中获取对应的返回信息进行校验
pm.test(“返回评论列表”, function () {
var jsonData = pm.response.json();
for(var i = 0; i < 10; i++){
console.log(jsonData.result.items[i].first_comment);
}
pm.expect(jsonData.result.items[0].first_comment).to.eql(“老师讲的很精彩,对自己帮助很大!”);
});
五、测试管理-测试集与数据驱动
测试集执行
点击run
测试集的配置
测试集结果
测试结果的响应信息
2、数据驱动方式
pm.test(“验证返回中city的值为武汉”, function () {
var jsonData = pm.response.json();
pm.expect(jsonData.city).to.eql(“data.cityname”);
});
pm.test(“地址是美国”, function () {
var jsonData = pm.response.json();
pm.expect(jsonData.data[0].location).to.eql(data.location);
});
这里data.cityname从文件中获取数据
测试数据如下:
ipLoc | location | cityname |
---|---|---|
3.3.3.3 | 美国 | 北京 |
1.1.1.1 | 澳大利亚 | 上海 |
.113.125.116.131 | 山东省济南市 电信 | 成都 |
在excel中编写文件并转换为相对应能够被postman接收的文件格式:json 或 CSV格式
!! 为了防止出现乱码的情况,需要使用text编辑文件转换为utf-8编码
!!文件中第一行必须是接口请求的变量名,后续每行填写本次执行使用的变量值
点击Collection Runner:显示以下的信息
其中数据预览在下面显示
数据驱动结果断言情况显示
六、进阶实战–cookie篇
在接口测试中某些接口的调用需要使用已有cookie,Postman操作cookie可以有两种方式。 Postman接口请求使用Cookie
使用Cookie的方法
- 直接在头域中添加cookie头域,适用于已知请求时的cookie头域的情况
- 使用Postman的cookie管理机制,既可以手动添加,同时Postman也会将操作流程 中获取的参数自动保存,因此可以通过调用前置接口来完成cookie获取。
案例:
使用电商项目进行测试,在登录接口完成登录之后,通过购物车接口获取购物车中的信息。 由于购物车接口需要使用登录后的cookie保持登录状态。 注意:电商网站访问地址发生了变化,
新网址:http://www.testingedu.com.cn:8000/index.php
登录接口: http://www.testingedu.com.cn:8000/index.php?m=Home&c=User&a=do_l ogin&t=0.5404187243051779
购物车接口: http://www.testingedu.com.cn:8000/index.php?m=Home&c=Cart&a=head er_cart_list
1)已知cookies信息,将其复制到头部即可,基于cookies的值是固定的
在Headers添加Cookies即可
2)使用postman的cookie管理机制添加cookie
在开发者工具中可以看到对应的cookies值,获取得到
对应在postman中添加cookies值如下
填写url中的域名:www.testingedu.com.cn
然后根据模板,填写对应的name值和value即可
以下即为postman的cookies管理机制
尝试cookies,确定某一个是需要的
正常的流程
1)登录操作(获取Cookies值)+发起请求获取购物车的信息
2)采用测试集的将两个接口结合在一起进行(Collections),测试结果,pm.response.text()
3)先调用前置的接口保留下来的cookies,再进行调用直接就可以运行。
七、进阶实战–token篇
- 接口测试项目实例
获取token值,保存到环境变量供给其他接口调用
数据驱动测试+获取信息验证信息 - 接口测试项目实例 使用接口测试项目实例,注册、登录、获取用户信息、登出接口均需要获取auth接口获取 到的token进行使用,因此通过auth接口返回信息获取token之后,存为变量供后续接口 调用。
接口 | url | 说明 |
---|---|---|
鉴权接口 | http://testingedu.com.cn:8081/inter/HTTP/auth | 该接口返回一个token值,之后的所有接口请求均需添加token头域使用该token |
注册接口 | http://www.testingedu.com.cn:8081/inter/HTTP/register | |
登录接口 | http://testingedu.com.cn:8081/inter/HTTP/login | 说明:该接口返回一个userid,在请求用户信息时使用,因此保存为变量。 |
获取用户信息接口 | http://www.testingedu.com.cn:8081/inter/HTTP/getUserInfo | 说明该接口需要使用登录获取的userid,因此使用保存的userid变量值。 |
注销接口 | http://testingedu.com.cn:8081/inter/HTTP/logout |
数据驱动方式同上面内容相似这里只是要注意headers要添加token进行验证
八、持续集成信息
首先安装nodejs,用来支持newman,安装newman工具
newman官方文档:添加链接描述
关于newman的介绍:添加链接描述
1)将postman中的测试集导出成newman能够支持的文件
2)在postman中导出测试集文件
导出测试集的.json文件
导出环境变量.json文件
newman run 测试集脚本文件
参数选项如下(全部的参数选项命令:newman run -h)
- -e,–environment 环境变量脚本
案例:newman run C:\Users\Administrator\Desktop\postman\环境变量.postman_collection.json -e C:\Users\Administrator\Desktop\postman\环境变量.postman_environment.json
- -g,–global 全局变量脚本
- -d,–iteration-data 指定使用的数据驱动文件
newman run C:\Users\Administrator\Desktop\postman\Http接口信息(token).postman_collection.json -e C:\Users\Administrator\Desktop\postman\环境变量.postman_environment.json -d C:\Users\Administrator\Desktop\postman\testDDT.csv
- -n 指定测试集循环次数iterations
测试报告的获取
如果想要持续集成,让脚本自动执行,可以获取以下的测试报告格式
-
cli格式为在cmd客户端呈现的报告模板,newman默认使用该格式。
newman测试报告.cli格式
-
json格式可以导出json格式的报告,通过-r json --reporter-json-export 参数指定报告生成的文件路径
案例:
newman run C:\Users\Administrator\Desktop\postman\Http接口信息(token).postman_collection.json -e C:\Users\Administrator\Desktop\postman\环境变量.postman_environment.json -d C:\Users\Administrator\Desktop\postman\testDDT.csv -r cli,json --reporter-json-export C:\Users\Administrator\Desktop\postman\testreporter.json
以下为报告文件
- html格式可以导出html格式的报告,通过-r html进行设置, 并加上–reporter-html-export参数指定报告生成的路径。
命令:npm install -g newman-reporter-html
完成导出html测试报告插件
案例:C:\Users\Administrator>newman run C:\Users\Administrator\Desktop\postman\Http接口信息(token).postman_collection.json -e C:\Users\Administrator\Desktop\postman\环境变量.postman_environment.json -d C:\Users\Administrator\Desktop\postman\testDDT.csv -r cli,html --reporter-html-export C:\Users\Administrator\Desktop\postman\testreporter.html
可以看到如下的测试报告文件
定时任务执行脚本
在实现了newman对测试集的命令行运行之后,可以通过编写bat脚本,将其设 置为windows定时任务,以完成测试脚本的定时运行。
1、编写bat脚本 (批处理运行脚本)
将newman运行测试集的命令编写为bat脚本保存
2、设置定时任务 在计算机上右键->管理,在弹出菜单里的任务计划程序里创建定时任务配置执行。
Jenkins持续集成
每天每月每星期凌晨3点
执行批处理命令
九、不常用功能
-
抓包工具
对接口进行测试的第一步是获取接口信息,最好通过接口文档获取,并且通过抓包确认。 抓包工具: fiddler、charles、chrome浏览器开发者工具,也可使用postman进行抓包。
设置浏览器使用postman配置的 127.0.0.1:5555代理进行访问,抓包信 息就能在指定的文件夹中显示。
抓包设置代理+在postman中进行抓包
-
测试脚本
-
鉴权方式
-
之前有token、cookies