postman是一个强大的接口调试工具,可打包、发送http请求,保存响应及断言等

postman是一款REST接口的客户端软件,支持所有http协议的请求方式。

支持的请求数据类型除了表单以外,还支持文件(图片、视频)等。

支持接口的全业务流程(从开发、测试、运维等):

开发:mock挡板测试

后端:接口测试

postman支持云服务、协同测试。

postman的使用

postman是采用collection-集合来管理请求的(测试用例)。

第一步:创建一个collection

第二步:创建一个request,重名名为:百度翻译

第三步:打包请求

请求方式:get

请求地址:https://fanyi-api.baidu.com/api/trans/vip/translate

query string parameters(params):

第四步:点击发送send

三、接口测试的流程(postman)

1、需求分析

分析的对象是接口API文档中对接口的描述(接口文档+抓包)。

接口实现的功能。

接口的url地址

接口的参数(query string paramters ):是可以通过?&拼接到url后面的

请求的头部:

Content-Type : get请求没有这个字段,post请求有

Cookie:保存在浏览器中的登录数据,只要在当前会话session,如果接口带了有效的cookie,其实就保持了登录的状态。

请求数据:payload(载荷)-- form data

通过接口传递给服务器的有效数据。

2、测试用例设计

主要指的是设计测试用例。

采用等价类思想、边界值思想、因果图、参数组合发等,设计form data、query string parameter中的参数(数据)的值,然后根据模板形成接口测试的用例。

3、测试脚本(请求-request)开发

使用postman工具开发一个请求,打包我们测试用例中所设计的报文参数,形成一个接口的请求,点击send即可。

4、响应结果分析

拿到了响应的结果,就可以查看响应正文、响应状态码、响应时间(发送请求到返回响应结果的时间)、查看断言结果(需要请求中添加断言)。

四、使用postman进行http接口协议的测试

1、快递查询接口-get

四个参数:

请求方式:get

请求地址:https://www.kuaidi100.com/query?type=debangwuliu&postid=DPK300327071093&temp=0.4039240061952669&phone=

请求头部:对于当前这个get请求,不需要指定

请求数据:get请求,没有请求数据

2.视频评论接口-get

请求方式:get

请求地址:https://ke.qq.com/cgi-bin/comment_new/course_comment_list?cid=302090&count=10&page=0&filter_rating=0&bkn=&r=0.9658793132640322

通过响应结果中给的提升:refer错误

refer是一个头部字段,一般用于防盗链(不是当前页面下的请求,不反回响应数据)

所以在打包请求的时候要加上一个header中的referer字段。

3、电商注册接口(Content-Type:x-www-form-urlencoded)

请求正文的数据类型表单数据,就是一键值对的形式来发送。

请求方式:post

请求地址:http://39.101.167.251/qftest/index.php

请求参数(query string parameter)- params:

c:user

a: register

step: submit

请求的头部:-- headers

Content-Type:x-www-form-urlencoded

请求的正文数据:

username: bk2105_001

email: bk2105_001@163.com

password: 123456

repassword: 123456

agree: on

4、电商个人资料更新接口

1、接口说明:Verydows电商网站登录成功后修改个人基础参数

2、接口的地址:http://39.101.167.251/qftest/user/profile.html

3、请求方式:post

4、请求参数:

参数名

参数值

参数说明

参数数据类型

必填

备注

step

update

功能

string

5、请求数据:

参数名

参数值

参数说明

参数数据类型

必填

备注

nickname

昵称

string

qq

qq

string

gender

2

性别

string

保密:0

男:1

女:2

birth_year

2020

出生年

string

birth_month

8

出生月

string

birth_day

12

出生日

string

signature

个人签名

string

6、头部信息:

参数名

参数值

参数说明

参数数据类型

必填

备注

Cookie

登录

string

Content-type

x-www-form-urlencoded

类型

string

7、响应数据:Content-Type: text/html

5、信呼系统办公系统登录(Content-Type:x-www-form-urlencoded)(请求正文有内容)

没有接口文档,获取到接口的四大要素:

Request URL: http://39.101.167.251/xinhu2/index.php?a=check&m=login&d=&ajaxbool=true&rnd=142167

Request Method: POST

Content-Type: application/x-www-form-urlencoded

form-data:

rempass: 0

jmpass: false

device:1636372043281

ltype: 0

adminuser: YWRtaW4:

adminpass: YTg5ODM5ODM:

yanzm:

6、信互图片上传接口(Content-Type:form-data)(文件上传)

form-data类型的数据,既可以是字符串键值对,也可以是文件(图片等超文本)。

Request URL: http://39.101.167.251/xinhu2/index.php?a=upfile&m=upload&d=public&maxsize=80&uptype=image&thumbnail=150x150&ajaxbool=true&rnd=399978

Request Method: POST

Content-Type: multipart/form-data

fomr-data:file: (binary)--python中的open图片需要指定rb、写入html文件指定wb

postman中cookie的使用:

在上传图片的接口的header中,postman默认给了一个cookie的字段,有了这个字段就保持了登录的状态,这个cookie是怎么来的?

在登录的时候,响应中会通过Set-Cookie将登录信息写入到浏览器的cookie管理器中。

在后续该服务器地址下的请求,都会默认从cookie管理器中带上对应的cookie值。

cookie是存储浏览器本地。

postman中也有一个cookie管理器,只要登录过,cookie管理器也会保持对应的值,后续的请求也会从管理器中获取这些值,可以先登录一次,后续接口就可以以登录状态运行了。

7、json类型数据类型

json是独立于语言(java、python等)的一种可读性好的一种数据结构。

主要用于前后端系统传递数据:

前端给后端:请求数据是json的

后端给前端:响应结果是json的(百度翻译接口、信互登录(json数据结构的字符串))

'{“name”:"aa"}'

{"success":true,"face":"http:\/\/39.101.167.251\/xinhu2\/upload\/face\/1_5076.jpg"}这是文本字符串

下面就是转化为了json的数据类型了。

{

"success": true,

"face": "http://39.101.167.251/xinhu2/upload/face/1_5076.jpg"

}

json数据结构的表示:[]或者{}来表示

[] : 表示一个组合,里面可以有多组数据

{}:表示数据,以键值对的形式来表示数据,可读性就比较好

用json数据来表示一个学生信息,会有3人:

info=[

{

"studentName":"lucy",

"studentID":["12345667","12121212"],

"gender":"女",

.....

},

{

"studentName":"petter",

"studentID":"1235667",

"gender":"男",

.....

},

{

"studentName":"李磊",

"studentID":"2323232",

"gender":"男",

.....

}

]

info[2].studentName

info[0].studentName[1]

独立于语言:

在java:[]表示数组、{}表示map集合

在python:[]表示list列表,{}表示字典

8、住逻辑登录接口(Content-Type:application/json)(请求正文json格式)

Request URL: https://b.zhulogic.com/designer_api/account/login_quick

Request Method: POST

Content-Type: application/json

request payload(json结构的请求数据):

{"phone":"18621984010","code":"12121212","messageType":3,"key":"9a95f60f-343e-45b8-bcc0-7cd5d2cbb0e1","registration_type":1,"channel":"zhulogic","unionid":""}

五、postman中的环境和变量的使用

1、postman的环境

postman中提供2种环境:globals和environment环境

globals:只有一个全局环境,在其中可以定义多个变量,不需要指定给某个请求或者集合。

environment环境:是局部环境,可以有多个局部环境,每个局部环境可以设置多个变量。

使用环境的主要的作用:

测试环境、预发布环境、线上环境的差别是什么?就是部署在不同的服务器(ip不一样)

便于测试脚本(测试环境、预发布环境、线上环境之间)的迁移。

将不同环境(测试环境、预发布环境、线上环境)的服务器ip定义在postman环境的变量中,如果需要迁移脚本,更换变量值即可。

设置environment环境

2、测试集合(collection)变量(variable)

给当前的测试集合创建能使用的变量的,当前集合下的所有请求都可以使用的变量。

六、预处理脚本(pre request script)和断言脚本(tests)-- 理解,能写即可

预处理脚本和断言脚本都是使用的js语法。

执行顺序:点了send之后

pre request script (给当前请求提供执行的条件)--> 当前的请求 --> tests中的脚本(请求发送之后,就已经返回了响应报文,就可以判断是否正确了)

1、pre request script预处理脚本

一定是在当前请求发送之前运行的脚本。

//清理collection集合的变量to
// pm.collectionVariables.unset("to");//发送请求--get请求
//场景发送一个百度翻译接口
//第一个参数是打包的请求的报文
// 如果是get请求,只给一个url地址即可// pm.sendRequest("https://fanyi-api.baidu.com/api/trans/vip/translate?q=apple2&from=auto&to=jp&appid=20190630000313415&salt=888888&sign=a9adc2d687fbacecc3b5059b9ccedc95", function (err, response) {
//     //将地址对应的get请求的响应正文打印在控制台
//     console.log(response.json());
// });//如果是post请求,需要提供一个变量,将参数打包在变量中
//场景:直接发上传图片接口,是失败的?原因是没登录
//能不能在发图片之前,在脚本发送一次登录的接口
//%3A--->改为冒号:
var loginPara = {"url":"http://39.101.167.251/xinhu/index.php?a=check&m=login&d=&ajaxbool=true&rnd=736580","method":"post","body":{"mode":"urlencoded","urlencoded":"rempass=0&jmpass=false&device=1636372043281&ltype=0&adminuser=YWRtaW4:&adminpass=YTg5ODM5ODM:&yanzm="}
}
//loginPara不要带引号
pm.sendRequest(loginPara, function (err, response) {//响应正文打印在控制台//如果正文是json的结构,可以使用response.json()//如果正文是html等字符串结构,则使用response.text()//{"success":true,"face":"http:\/\/39.101.167.251\/xinhu\/upload\/face\/1_4553.jpg"}console.log(response.text());
});

2、tests断言的使用

在接口测试中,可以对响应状态码、响应正文中的数据,还可以是响应头中的字段。

正文断言:

以字符串的形式断言(大串包小串)

以json数据的键的值断言(提取键的值)


// 1、断言响应状态码
// test:断言方法
// pm:postman的一个对象
// pm.response:当前请求的响应报文(响应状态行、头部、响应正文)
// pm.test("状态码为200吗?", function () {
//     pm.response.to.have.status(201);
// });// 2、响应正文中是否包括指定一个字符串
// pm.expect:判断的作用(需要有预期(小串)和实际(大串))
// pm.response.text():获取响应正文的字符串格式
// pm.test("Body matches string", function () {
//     var strBody = pm.response.text()
//     console.log(strBody)
//     var xiaoChuan = "apple"
//     pm.expect(strBody).to.include(xiaoChuan);
// });// 3、响应正文中的数据是json类型的,提取其中某个键的值作为判断的标准
// pm.response.json(): 将json正文转化为js中可以处理的数据结构
pm.test("json值是否符合预期?", function () {var jsonData = pm.response.json();//输出数据到控制台的一句//如果是{}定义的,就可以通过jsonData对象.键//如果看到是[],就需要通过下标来获取数据,0表示第一个索引// console.log(jsonData.trans_result[0].dst)var actualvalue = jsonData.trans_result[0].dst;var expectValue = "苹果"pm.expect(actualvalue).to.eql(expectValue);
});//4、响应时间的断言(请求从发送到返回响应结果的时间差)
// pm.response.responseTime:获取的就是响应报文的响应时间数据
//to.be.below:只要低于指定的值即可通过
pm.test("响应时间小于200ms吗?", function () {pm.expect(pm.response.responseTime).to.be.below(200);
});//5、判断请求成功的状态
// to.be.oneOf:只要其中一个符合要求即可通过
pm.test("Successful POST request", function () {pm.expect(pm.response.code).to.be.oneOf([200,201, 202]);
});// 6、响应状态信息(和响应状态码是一一对应的)
pm.test("Status code name has string", function () {pm.response.to.have.status("OK");
});// 参数化时候的断言使用

七、runner运行器的使用

辅助进行测试用例(postman中的请求)的模块,而且提供参数化、迭代次数设置和报告输出的功能。还能调整测试执行测试用例的条数和执行顺序。

runner运行器执行是测试集合collection中的测试用例(请求)。

1、启动runner

2、设置runner运行器

3、运行测试集合

点击运行run,结果为

4、runner运行器中的参数化-csv\txt文件

第一步:创建外部参数文件,改后缀名为csv

第二步:存入数据,并转码为utf-8

第三步:使用csv文件中字段名(第一行数据),参数化postman中电商注册接口的数据。

格式{{username}}

点击运行即可。

第四步:添加断言

第五步:设置参数化文件

在runner运行器中-->data,点击加载csv\text文件(手动点一下文件类型)-->预览没有乱码即可。

点击运行即可。

第六步:运行,查看执行结果

5、runner运行器中的参数化-json文件

第一步:创建外部参数文件,改后缀名为json

第二步:存入数据,并转码为utf-8

第三步:使用json文件中键,参数化postman中电商注册接口的数据。格式{{username}}

第四步:添加断言

第五步:设置参数化文件

在runner运行器中-->data,点击加载csv\text文件(手动点一下文件类型)-->预览没有乱码即可。

点击运行即可。

八、电商系统后台相关的接口(需要预处理或者关联执行)

1、分析接口的特点:

第一次登录的接口数据

第二次登录接口的数据:

区别是什么:两次发送接口的请求数据不一样。

总结技术点:

cookie技术:账号信息保存再本地浏览器(postman)中的cookie管理器中。

session技术:用户信息是在服务器端,这个区域有个编号叫sessionid,这个sessionid会发送给客户端,要求你需要带着这个sessionid来请求。这种技术的缺点就是服务器端的压力会更大些。

关联技术(解决session用法):服务器每次会给客户端一个新的sessionid,在下次发送请求的时候就要带着最新的sessionid值去发,也就是说要获取每次更新过来的sessionid,

通过上面分析,发现,在电商后台首页刷新的时候,会得到这两个变化的值(每次刷新都变):

2、如何实现

1、从首页接口中获取这两个值

先创建一个首页接口。

Request URL: http://39.101.167.251/qftest/index.php?m=backend&c=main&a=index

Request Method: GET

2、通过js脚获取值并写入一个变量中(可以是环境变量、也可以是集合变量)

在首页接口的tests模块中,以js脚本形式处理。

//定义变量,先把响应正文数据获取出来
var strData = pm.response.text();
// console.log(strData);
// 怎么提取<input type="hidden" name="NKJVp" value="445842429" />
// 可以使用正则表达式提取,想提取哪一个值,就用(.*?)来替换一下
//.表示任意字符
//.*表示任意多个字符
//.*?表示只取一组匹配到的任意字符,贪婪匹配
var regData = strData.match(new RegExp("name=\"(.*?)\" value=\"(.*?)\""))
// console.log(regData);
var nameData = regData[1];
var valueData = regData[2];
// console.log(nameData);
// console.log(valueData);
//把这两个值写入到集合变量
pm.collectionVariables.set("name", nameData);
pm.collectionVariables.set("value", valueData);

实现的效果,把两个值提取出来并保存在collection集合变量中。

3、使用变量参数化登录接口的数据({{变量名}})

4、使用runner运行按照先首页再登录的顺序执行两个接口即可

3、登录成功之后,实现商品删除接口

Request URL: http://39.101.167.251/qftest/index.php?m=backend&c=goods&a=delete&id=368

Request Method: GET

实现方式:

按照首页、登录、删除的顺序执行。(按照这种方式来)

在删除接口中添加cookie值(浏览器中抓取,会有时效性)

九、云学习平台(json类型)-- 最常见的接口类型

案例特点:

请求数据类型是json结构

响应正文数据类型也是json结构

token技术(令牌技术):把账号信息进行加密之后,作为一个响应结果传到客户端,要求后续操作都要带上这个token值,才能正常实现某些功能,token技术是可以跨平台的(web和app)。

JWT技术:json web token技术,它利用简洁且自包含的 JSON 对象形式进行信息安全传递。

头部(加密算法和token类型):eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.

载荷(用户id、签发者、过期时间等)eyJhdWQiOiJRRkVEVV9Qc1lEMkdkM3lvMFg2bGttQXJyTnRBPT0iLCJleHAiOjE2NDg3ODkzOTV9.

签名(头部+载荷进行base64的加密):8UFIFMbuARLhr2Cpz_5_zIwDnNFrFEuXnZ7kuqr3bkc

关联技术:把上一个接口的数据通过各种手段获取,之后参数化给后面的接口使用。

1、云学习平台验证码接口

Request URL: http://study.qfedu.com/student/api/capchaRestController/captcha

Request Method: POST

tests断言中添加的代码:

//获取响应正文
var jsonData = pm.response.json();
var imgToken = jsonData.data.imgAuthCodeToken;
var imgCode = jsonData.data.code;
imgToken = "\"" + imgToken + "\"";
imgCode = "\"" + imgCode + "\"";
//将这两个值写入到集合变量中
pm.collectionVariables.set("imgToken", imgToken);
pm.collectionVariables.set("imgCode", imgCode);

2、云学习平台的登录接口

Request URL: http://study.qfedu.com/student/api/login

Request Method: POST

请求数据:{"mobile":"18621984010","password":"123456","imgCode":"79365","imgToken":"a667f1e9-75bf-4dd0-a1e9-945c21d2c5c6"}

标红色的是来自有第一个验证码接口的响应正文中的数据。

tests中的脚本

//获取响应正文
var jsonData = pm.response.json();
var token = jsonData.data.token;
pm.collectionVariables.set("token", token);

3、云学习平台的在线刷题接口

Request URL: http://study.qfedu.com/student/api/question/label/list

Request Method: POST

Request Header:

Token:xxxx

Content-Type: application/json

postman实践与运用相关推荐

  1. Postman接口测试工具学习笔记(二)Postman进阶实践:获取天气预报实例

    Postman接口测试工具学习笔记(一) 入门及基本概念 https://blog.csdn.net/sevensolo/article/details/87208546 Postman进阶实践:获取 ...

  2. postman使用实践教程图文详解

    postman 使用实践教程图文详解 1.环境变量设置 1.1切换环境变量 1.2查看当前的环境变量和全局变量 1.3编辑环境变量和全局变量 2.postman前置脚本动态传参 2.1递增传参 2.1 ...

  3. Postman测试实践笔记

    Postman测试实践 文章目录 Postman测试实践 一.Postman安装与使用 1.1 Postman下载及安装 1.1.2 Postman Mac版 1.2 Postman 更新 1.2.1 ...

  4. boot jpa mysql postman spring_听说过spring-data-jdbc么?来个最佳实践

    本文的完整示例代码,见github仓库.小q只在文中介绍最关键的代码块. https://github.com/yuanluoji/purestart-springboot-data-jdbc 很多人 ...

  5. 基于postman的api自动化测试实践

    测试的好处 每个人都同意测试很重要,但并不是所有人都会去做.每当你添加新的代码,测试可以保证你的api按照预期运行.通过postman,你可以为所有api编写和运行测试脚本. postman中的测试 ...

  6. 电商项目接口测试实践-postman

    电商项目接口 #整理接口 通过登录后台(http://www.testingedu.com.cn:8000/admin)-添加商品-抓包分析登录接口&添加商品接口 #遇到的问题? fiddle ...

  7. 学会 IDEA REST Client后,postman就可以丢掉了...

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:陈凯玲 my.oschina.net/keking/blog ...

  8. 团队开发中的 Git 实践

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 本文转载自:https://segmentfault.com/a/ ...

  9. 未读消息(小红点),前端 与 RabbitMQ 实时消息推送实践,贼简单~

    前几天粉丝群里有个小伙伴问过:web 页面的未读消息(小红点)怎么实现比较简单,刚好本周手头有类似的开发任务,索性就整理出来供小伙伴们参考,没准哪天就能用得上呢. 之前在 <springboot ...

最新文章

  1. c++ 类数组_《深入java虚拟机》读书笔记类加载
  2. vba宏语言_三分钟了解Excel的程序语言VBA
  3. html 常用字符,html 常用特殊字符
  4. RabbitMQ保姆级教程
  5. (194)FPGA上电后IO的默认状态(ISE软件默认为0)
  6. 转 docker 部署 kafka
  7. linux中 查看系统属性 与 可执行文件属性 的方法
  8. verilog之状态机详细解释(一)
  9. Python并行编程(七):多进程的基本使用和与多线程的差异
  10. 几种常见的程序命名规则
  11. zblog php 二级菜单,ZblogPHP模版导航栏跟随效果
  12. W3Cschool导航条练习
  13. you are in emergency mode解决办法
  14. 华为HCNA中vlan笔记
  15. 基于元学习和自我监督的图像翻译预训练
  16. 利用c#+jquery+ichartjs生成统计图表
  17. VisualStudio App.Config自动配置
  18. TNWX-微信公众号如何使用JSSDK
  19. NSX edge命令行手册
  20. 编写程序,输出2000年到2100年的闰年

热门文章

  1. WIN10安装vc60无响应
  2. CTF实验吧-who are you?【基于sleep盲注脚本】
  3. sping boot 笔记 哎呦不错哦
  4. 田震-雨中的鸟依然在飞-LRC歌词下载
  5. gcc posix sjij for MSYS 9.2.1+
  6. 根据Spring-Security安全框架搭建问答论坛系统(更新中.....)
  7. win11任务栏图标闪烁|任务栏QQ图标闪动|新消息任务栏自动弹出|设置自动隐藏任务栏之后,QQ或微信等工具新消息自动弹出任务栏并颜色提示问题解决方案
  8. 《炬丰科技-半导体工艺》化学蚀刻的铜-ETP铜
  9. springboot整合shiro
  10. 高职计算机专业英语词汇,职高英语单词复习