postman实践与运用

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值