postman学习历程(从入门到精通)

学习目录:(主要讲解发送json请求)

1.postman简介

2.postman安装

3.页面介绍

4.举例,做一个简单的API(post/get)请求

5.response响应

6.断言设置

7.变量设置

8.获取cookies并应用

9.鉴权(获取token并应用)

10.Pre-request Script 详解

11.collection运行(参数化)

12.在命令行运行postman脚本

一:postman简介

Postman可以发送几乎所有类型的HTTP请求。适用于不同的操作系统,Mac、WindowsX32、Windows X64、Linux系统等。可以进行接口自动化测试,可用postman代替人工接口测试,面向所有测试从业人员。

使用场景:

(1)开发接口时快速调用接口,调试接口

(2)测试时方便调用接口,通过不同参数测试接口输出

(3)接口可保存下来且反复运行

(4)支持断言

postman相关资料:

(1)官网及下载地址:https://www.getpostman.com/

(2)官方文档:https://www.getpostman.com/docs/

二:postman安装

Postman最早是作用在Chrome浏览器插件存在的,可以到Chrome商店搜索下载安装,也可以找别人共享的Postman插件文件进行安装,2018年初Chrome停止了对Postman应用程序的支持。目前Chrome应用商店能使用的就是Chrome扩展程序和主题背景。

目前Postman提供了独立安装包,可以不再依赖于Chrome浏览器,推荐使用这种方式安装。本地安装下载地址:https://www.getpostman.com/apps,下载后直接点击下一步进行安装。

三:页面介绍

postman界面分为左右两部分,左侧为接口集,右侧为请求和响应。

postman学习历程(从入门到精通)_第1张图片

http请求包括4部分:url,method,headers,body

(1)method:get/post....

(2)RequestBody:根据body类型有不同的控制

postman学习历程(从入门到精通)_第2张图片

——form-data:是表单用来传递的默认格式,可以模拟填写表单并提交表单。既可以填写key-value健值,也可以上传file作为key的value传递,但是file不会被保存

——x-www-form-urlencoded:会将表单内的数据转换为健值

——raw:可上传任意格式的文本,包括:text、json、xml、html等

——binary:只上传二进制数据,一次只能上传一个文件且不能保存历史

(3)headers:Content-Type的值根据body类型有不同的控制

——如果发送表单请求,则Content-Type=application/x-www-form-urlencoded

——如果发送json请求,则Content-Type=application/json

——如果发送二进制请求:则Content-Type=application/octet-stream

四:举例,做一个简单的API(post/get)请求

我们以v2ex的api地址为例:https://www.v2ex.com/api/topics/hot.json,选择method为get,点send,显示返回结果及相应状态。

postman学习历程(从入门到精通)_第3张图片

响应结果可以以多种类型展示,如:json、xml、html、text等,查看展现方式可以在headers中Content-Type查看

postman学习历程(从入门到精通)_第4张图片

send请求后,可在左侧History中查看,方便再次调试

postman学习历程(从入门到精通)_第5张图片

以下是http状态码以及对应的含义,可以作为测试过程中的参考:

postman学习历程(从入门到精通)_第6张图片

status总结:相应status为2xx、3xx开头表示ok,4xx表示没有鉴权或参数错误,5xx表示bug。

body总结:一般get请求没有body,post请求才有body;而响应的结果不一定有body(一般201和204响应不会有body)。

五:response响应

http://www.manongjc.com/detail/8-latesalslqgqsey.html

responseHeaders {Object}:获取response的头部信息,使用postman.getResponseHeader(key) 或 responseHeaders[key]获取对应key的value值;

responseCookies {Array}:返回一个数组,可以通过postman.getResponseCookie(cookieName) 获取cookie信息;

responseBody {string}:返回响应正文文本的字符串,可以用JSON.parse()转成数组;

responseTime {number}:返回响应时间,单位ms;

responseCode[String] {Object}:返回的状态码,不带参数会返回4个属性。 常用的属性是 code 就是状态码;

postman学习历程(从入门到精通)_第7张图片

六:断言设置

断言就是实际结果和预期对比,如果一致,则用例通过,如果不一致,断言失败,用例失败。断言在Tests中编写,用到postman tests 这个模块。

postman学习历程(从入门到精通)_第8张图片

// 检查响应body是否包含字符串

pm.test("Body matches string", function () {

    pm.expect(pm.response.text()).to.include("string");

});

// 检查响应body是否等于一个字符串

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

    pm.response.to.have.body("response_body_string");

});

// 检查响应body中某个字段值

pm.test("Your test name", function () {

    var res= pm.response.json();

    pm.expect(res.key).to.eql(value);      // res.key根据实际情况获取

});

// 检查headers中某个key存在

pm.test("XXX is present", function(){

    pm.response.to.have.header("Content-Type");

});

// 检查响应时间<200ms

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

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

});

// 检查状态码status=200(三种方法)

pm.test("Status code is 200",function(){

    pm.response.to.have.status(200);

    pm.expect(pm.response).to.have.status(200);

    pm.expect(pm.response).to.be.success;

    pm.expect(pm.response.code).to.be.eql(200);

});

// 成功的post请求状态码

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

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

});

七:变量设置 

为什么在代码中会使用变量呢?

原因:变量允许我们在多个地方重复使用,以便保持代码的可读性、可维护性等。另外,如果想改变这个值,我们只需要改变变量的值即可,其它引用该变量的地方会自动变动,减少了代码修改。

Global全局变量,Environment环境变量(可设置多个)

postman学习历程(从入门到精通)_第9张图片
变量的作用域

变量的引用:{{ 变量名 }}

变量优先级:数据变量 > 环境变量 > 全局变量

在postman右上角点击小眼睛,里面可设置全部变量和环境变量

postman学习历程(从入门到精通)_第10张图片

我们将鼠标移到变量上,会显示变量的值

postman学习历程(从入门到精通)_第11张图片
没有定义这个变量
postman学习历程(从入门到精通)_第12张图片
变量有定义,显示变量值

设置变量(在Tests中编写脚本)

设置环境变量:pm.environment.set("key","value");   // 执行后在当前环境变量中保存

设置全局变量:pm.globals.set("key","value");   // 执行后在全部变量中保存

获取变量

获取环境变量:pm.environment.get("key");   或 postman.getEnvironmentVariable("key");

获取全局变量:pm.globals.get("key");    或 postman.getGlobalVariable("key");

从环境变量和全局变量中搜索变量,优先从环境变量中搜索获取变量: pm.variables.get("key");

清除变量

清除环境变量:pm.environment.unset("key");

清除全局变量:pm.globals.unset("key");

验证responseBody中某key—>value与环境变量一致,var res = JSON.parse(responseBody) = {"name":"yanan"}

举例1:设置了环境变量为 namecode=yanan

var value = postman.getEnvironmentVariable("namecode");      // value===yanan

tests["响应结果的值正确"]=res.name===value;

举例2:未设置环境变量,从文件中取值。文件名:test.json,文件内容:["namecode":"yanan","namecode":"gansu","namecode":"chifeng"]

tests["响应结果的值正确"]=res.name===data.namecode;    // 注意:读取json文件中的值用data.key

八:获取cookies并应用

一般登录API执行后,postman会自动保存cookies。点击下图Cookies,查看测试环境下的cookie

postman学习历程(从入门到精通)_第13张图片

在下一个API运行时,postman可自动拿到cookie的值,并在requestHeaders中传递。

postman学习历程(从入门到精通)_第14张图片

调试cookies,脚本代码实现:

(1)如果响应的headers中有set-cookie,则使用:

console.log(responseHeaders);    // 打印响应的Headers

 //打印响应的Headers中的set-cookie值

console.log(responseHeaders["set-cookie"]);

console.log(postman.getResponseHeader("set-cookie"));

(2)如果响应的cookie在Cookies里显示,则获取脚本:

var coo = postman.getResponseCookie("JSESSIONID"); 

或   var coo = pm.cookies.get("JSESSIONID") ;       // JSESSIONID 为cookie的key

console.log(coo["value"]);

九:鉴权(获取token并应用)

postman的鉴权,就是鉴定你有没有访问权限。一般测到需要登录的接口,如果没有保持登录状态就没法访问。

方法一:在Authorization下选择“Basic Auth”,填写Username和Password就可以啦

postman学习历程(从入门到精通)_第15张图片
Authorization下选择“Basic Auth”

这种方法的优缺点:

——优点:操作方便,只要输入一次账号密码,postman会自动记住它;

——缺点:如果登录用户名变了,该方法就不适用了;

方法二:保存登录接口返回的token值,在requestHeaders中添加参数,key=‘Authorization’,value=‘TOKEN’+空格+‘token值’

postman学习历程(从入门到精通)_第16张图片
headers中设置Authorization

这种方法的缺点是:每个接口都需要在Headers下添加key 和 values值

方法三:保存登录接口返回的token值,并添加到环境变量中,请求时作为参数传递

postman学习历程(从入门到精通)_第17张图片
token作为参数传递

这种方法适用于token加在url后面的情况,且随着登录用户不同,参数随之变化

十:Pre-request Script 详解

Pre-request Script是集合中请求发送之前需要执行的代码片段。如:请求参数中包含一个随机数,或者请求header中包括一个时间戳,或者你的请求参数需要加密时,可以在Pre-request Script中处理代码。

(1)请求参数为随机数,使用Math.floor(Math.random()*3)获取一个0-3之间的随机数,并将该值加入环境变量中

pm.environment.set("tmp_relationDictId", Math.floor(Math.random()*3));

(2)根据身份证号判断性别,将性别值加入环境变量中

var idNo='230700199412209188';

var sexInt='';

if (parseInt(idNo.substr(16, 1)) % 2 == 1) {

    sexInt=1;

    } else {

    sexInt=0;

}

pm.environment.set("tem_sexInt",sexInt);

根据具体情况具体实现脚本代码,且右侧有提供一些常用代码可作为参考

postman学习历程(从入门到精通)_第18张图片

十一:collection运行(参数化)

collections是多个测试用例的集合,我们可以将一个项目创建一个集合,也可以一个功能一个集合,根据实际情况确定。将request请求放在Collection中,把测试用例进行工程化管理,则运行collection时会一次性运行collection中的所有用例。点击下图的“Run”,打开“Collection Runner”

postman学习历程(从入门到精通)_第19张图片
postman学习历程(从入门到精通)_第20张图片
Collection Runner

参数化

postman提供了非常便利的数据驱动测试,支持用data File导入数据。在Iterations重复运行时,如果每个用例需要每次运行时使用不同的数据,应满足以下两个条件:

(1)脚本中要用到数据的地方参数化,即用一个变量来代替,每次运行时,重新获取当前的运行数据;

(2)需要有一个数据池,这个数据池里的数据条数,要与重复运行的次数相同;

例如:我们要对test02用例做数据驱动测试,涉及参数:{{name_code}},则我们首先要构造一个data file,定义为test.json

data file

在collection Runner中设置No Environment,Iterations=3(与数据池中的数据条数相同),data选择test.json文件,然后选择Data File Type,支持json和csv格式(csv相当于Excel),这里我们选择json格式。

postman学习历程(从入门到精通)_第21张图片
select data file

设置完运行项后,我们可以点击‘Preview’预览,查看preview中的数据循环次数与设置的Iterations相同

postman学习历程(从入门到精通)_第22张图片
preview

这时我们运行用例,运行结果如下

postman学习历程(从入门到精通)_第23张图片
run results(tests错误)

我们看到responseCode=200运行成功,但是有一个断言运行失败,我们查看Tests断言,发现变量值是从环境变量中取的,而运行的用例中使用的是data file中的变量

postman学习历程(从入门到精通)_第24张图片

修改方法:从data file中取值

// 从test_data文件中获取值,用data.key值

tests["返回值中的name必须与断言中的name相等"] = res.name === data.name_code;

postman学习历程(从入门到精通)_第25张图片
run results

十二: 在命令行运行postman脚本

有时我们的程序可能需要在无UI界面的服务器运行(如:linux或mac)或在CI持续集成上运行,这就需要使用命令行运行脚本啦。运行脚本需要安装:nodejs、cnpm、newman

(1)安装cnpm(需要依赖npm)

cmd中运行:npm install -g cnpm -registry=https://registry.npm.taobao.org 安装cnpm,再用cnpm -v命令查看是否安装成功。

postman学习历程(从入门到精通)_第26张图片
cnpm安装

(2)安装Newman(依赖nodejs)

Newman是命令行的postman接口集运行器,它允许你通过命令行的方式去运行一个用例集,它的构建具有可扩展性,因此可以轻松将其与持续集成服务器集成并构建系统。Newman保持了与Postman相同的功能。

在安装Newman之前需要先安装nodejs,这里不介绍nodejs的安装,可自行通过node官网(https://nodejs.org/en/)下载需要的安装包(https://nodejs.org/download/)进行安装即可。

Nodejs安装成功以后,打开cmd命令行,输入npm install –g newman  或者  cnpm install newman --global 回车即可自动安装,如果遇到错误,可以尝试使用npm --registry https://registry.npm.taobao.org install –gnewman,安装完成后,输入newman即可看到命令选项,如下图:

postman学习历程(从入门到精通)_第27张图片

(3)导出collection

将collection集导出为json格式,与之前构造的data file文件test.json放在同一目录下。

postman学习历程(从入门到精通)_第28张图片
export collection

(4)执行脚本

cmd进入文件所在目录下

postman学习历程(从入门到精通)_第29张图片

运行命令:newman run v2ex.postman_collection.json -d test.json -r html,cli,json,junit

命令解析

获取的cli格式报告如下:

postman学习历程(从入门到精通)_第30张图片
cli报告

其他格式的报告在哪呢?? 运行完成后,当前目录下会生成一个newman文件夹,json、html、xml等报告在这里显示

(5)导出为其他脚本运行(如:python、java等)

postman右侧点击‘Code’,选择脚本语言,我们这里选择python-Requests,copy to clipboard,复制到在.py文件中

postman学习历程(从入门到精通)_第31张图片
postman学习历程(从入门到精通)_第32张图片
导出的原python脚本

修改代码:删除headers,用for..in..循环做数据驱动,导入unittest做自动化测试,将response.json()转换为json格式,并添加断言

postman学习历程(从入门到精通)_第33张图片
修改后的代码

运行python脚本,在python项目编辑器中右键->Run,或者在命令行中执行python test.py

postman学习历程(从入门到精通)_第34张图片

你可能感兴趣的:(postman学习历程(从入门到精通))