Postman教程

一、Postman下载安装

官网下载地址

UfRE2F.png

记得选择下载的版本

这里我选择的是windows64位系统

下载完成后双击安装吧,安装过程极其简单,无需任何操作

二、postman基础功能介绍

首先,看一下它的基础功能:

UfWSzD.png

collection在postman里面相当于一个文件夹,可以把同一个项目的请求放在一个Collection里方便管理和分享,Collection里面也可以再建文件夹。这里我们做一个普通接口的简单的示例:

新建一个文件夹:

UfW40A.png

创建一个文件集:

UfWTtP.png

新建一个请求:

UffPpT.png

给这接口命名为查询上海天气并保存:

UffZ7R.png

点击该请求,现在是空白的:

Uffuh6.png

输入一个get请求,params里会自动显示参数:

UffQ1O.png

点击send,查询成功:

UfftAI.png

成功查询到上海天气

这样就完成了一次简单的天气查询接口的请求

三、请求区域介绍

1、Authorization:

身份验证,主要用来填写用户名密码,以及一些验签字段,postman有一个helpers可以帮助我们简化一些重复和复杂的任务。当前的一套helpers可以帮助你解决一些authentication protocols的问题。

2 、 Headers:

请求的头部信息

3、Body:

post请求时必须要带的参数,里面放一些key-value键值对

4、Pre-requerst Script:

可以让你在 请求之前自定义请求数据,这个运行在请求之前,语法使用JavaScript语句。

5、tests:

tests标签功能比较强大,通常用来写测试,它是运行在请求之后。支持JavaScript语法。postman每次执行request的时候,会执行tests。测试结果会在tests的tab上面显示一个通过的数量以及对错情况。这个后面会进行详解,它也可以用来设计用例,比如要测试返回结果是否含有某一字符串

6、form-data:

它将表单数据处理为一条消息,以标签为单元,用分隔符分开。既可以单独上传键值对,也可以直接上传文件(当上传字段是文件时,会有Content-Type来说明文件类型,但该文件不会作为历史保存,只能在每次需要发送请求的时候,重新添加文件。);post请求里较常用的一种

上传文件:

aEcho6.png

7、x-www-form-urlencoded:

对应信息头-application/x-www-from-urlencoded,会将表单内的数据转换为键值对;

8 、 raw:

可以上传任意类型的文本,比如text、json、xml等,所有填写的text都会随着请求发送;

9 、 binary:

对应信息头-Content-Type:application/octet-stream,只能上传二进制文件,且没有键值对,一次只能上传一个文件, 也不能保存历史,每次选择文件,提交;

四、导出和导入接口集

postman支持非常方便的导入和导出接口集,继续操作如下:

1、导出:

aEg6tf.png

数据一般以postman_collection.json结尾

2、导入:

aEgTA0.png

为了区分,我把他们名称改了

ok,这样就是简单的导入导出collection集合

五、关于设置环境变量

1、Global—全局

2、 Enviroment — 环境变量

3、 Local — 局部

4、Data —- 数据

优先级从高到底 Data —- > Local —- > Enviroment —- > Global

postman支持很方便的设置环境变量以及全局变量,并可以一键切换不同环境

aE2xxg.png

①:可以一键切换环境,选择No Environment则不使用环境变量,仅适用全局变量

②:可以查看当前环境中的变量和全局变量(Globals)的值

aER8JK.png

③:进入设置页面

aERULd.png

比如新建一套环境dome

aEf5xU.png

选择我们刚才创建的环境,点击眼睛可以看到我们设置的变量值

aEf7qJ.png

创建环境变量能够很方便的调取我们所需的数据

5、将返回值的某个数据设置为环境变量

在某些时候,我们需要获取到一个变量,并保存下来,因为在后面我们会使用到。比如token,sign等信息

这时候就需要用到tests区域了,使用其强大的js语法

下面是一个简单的将返回值的某个数据设置为环境变量或者全局变量的介绍:

定义一个xxx,获取body中返回的所有参数,并转化为JSON格式

1
2
3
4
5
var xxx = JSON.parse(responseBody);

//把json字符串转化为对象。parse()会进行json格式的检查是一个安全的函数, 如:检查json中某个数组元素的个数(这里检测programs的长度)
var data = JSON.parse(responseBody);
tests["program's lenght"] = data.programs.length === 5;

将返回中的值设置为一个环境变量:

1
2
pm.environment.set("key",xxx.data.value);
或者postman.setEnvironmentVariable("key", "value");

将返回中的值设置为一个全局变量:

1
2
3
4
pm.globals.set("key",xxx.data.value);

或者postman.setGlobalVariable("key", "value");
//注意:Global后面不能加S,value值一定要指定到某个具体节点

六、其他的常用tests方法

1、postman内置了一些常用的方法

aEh6SK.png

2、另外整理了一些常用的tests方法

2.1、测试response Headers中的某个元素是否存在

1
2
tests["元素Content-Type是否存在"] = postman.getResponseHeader("Content-Type");
//getResponseHeader()方法会返回header的值;

2.2、定义一个xxx,获取headers值

1
2
3
4
5
var.xxx = postman.getResponseHeader("key");
将Headers中的值设置为一个环境变量

postman.setEnvironmentVariable("key",xxx);
或者pm.environment.set("key",xxx);

2.3、检查response的code值是否为200

1
2
3
4
5
6
7
8
tests["Status code is 200"] = responseCode.code === 200;
// tests["Status code is 200"]中的tests是一个内置对象

tests["Status code is 200"]是指为这个断言起个名称叫”Status code is 200”,这个名称可以自行修改。

responseCode.code === 200中的responseCode是内置对象,responseCode对象中有个属性是code,是指HTTP状态码的code,判断code是否为200.

综合起来,这句代码的意思是:名称为”Status code is 200”的断言中,判断responseCode对象的code属性值(HTTP状态码)是否为200

2.4、检查response的body中是否包含某字符串

1
2
3
4
5
6
tests["Body matches string"] = responseBody.has("type");
// tests["Body matches string"]中的tests是一个内置对象

tests["Body matches string"]是指为这个断言起个名称叫”Body matches string”,这个名称可以自行修改

这句代码的意思是:名称为”Body matches string”的断言中判断响应正文中是否包含:type这个字段。type无论是key或者value,只要匹配就可以。多个类型可用“,”分割。

2.5、检查Response Body是否等于字符串

1
2
tests["测试点"] = responseBody === "Response Body返回的内容";
//这个可以用在接口返回内容为纯字符串时,直接检查整个返回结果的正确性

2.6、检查Response time 是否小于200ms

1
tests["Response time 小于200毫秒"] = responseTime < 200;

2.7、检查Response time 是否大于200ms

1
tests["Response time 大于200毫秒"] = responseTime > 200;

2.8、postman.setNextRequest(‘Request 4’)

1
2
postman.setNextRequest('Request 4')
// postman.setNextRequest()是一个带有一个参数的函数,它是接下来要运行的请求的名称或ID。往往用来跳转至某个接口,只在运行该集合时有用,单独运行无效

2.9、 var jsonObject = xml2Json(responseBody);

1
2
var jsonObject = xml2Json(responseBody);
//转换XML body为JSON对象

2.10、设置一个随机数变量

1
2
pm.globals.set("type",parseInt(4*Math.random())+1);
//针对不同类型的课程类型,设置一个1到4的随机整数,字段名是type,parselnt 是强制转换为整数

2.11、校验接口返回是否有数据

1
2
tests["获取第一个结果"] = xxx.content.jieguo[0];
//我的程序设置的是如果当前没有数据,则只返回content[],所以这句断言可以校验,如果content里还有数据,则视为返回不为空

2.12、 在当前环境下添加一个新的环境变量

1
pm.environment.set("aaa","010101001")

2.13、添加一个全局变量

1
pm.globals.set("bbb","020202002020")

2.14、返回的报文转化为json格式

1
var ccc = JSON.parse(responseBody)

2.15、 将指定的value值设置成环境变量

1
2
3
pm.environment.set("状态",ccc.reason)

pm.environment.set("城市",ccc.result[0].city)

2.16、测试是否是json报文格式

1
tests["content-type中是否包含json字符"] = postman.getResponseHeader("Content-Type").includes("json") === true

七、使用postman进行接口自动化测试(批跑)

首先,既然是自动化测试,那么我们肯定需要工具 (Postman) 或者代码能帮我们直接判断结果是否符合预期。那么在接口测试上,大体就两个思路:

  • 判断请求返回的 code 是否符合预期

  • 判断请求返回的内容中是否包含预期的内容(关键字)

这是三个模拟天气的接口集合,点击扩展按钮,找到RUN,进入

aE5K5n.png

这里我们先简单运行一次:

aE512V.png

发现,运行成功。里面我每个接口都写了两个tests进行校验字段,所以上面一共有6条tests测试点被测试到,并且是成功的

每个接口里的tests数据如下:

aE53vT.png

当然,如果想要每次运行不一样的数据,我们需要其他的方法,比如,使用pre-requestScprit功能,导入或者生成随机数据进行测试。

八、postman参数化

首先我们针对于某一个接口,有大量的的测试数据需要批量验证,此时一个一个的更改请求参数肯定不太现实,能否有一种方式可以批量的来处理数据。这就要用到数据的参数化了。

首先针对于这样一个查询接口(百度免费提供的)

1
http://mobsec-dianhua.baidu.com/dianhua_api/open/location?tel=电话

现在,我们有批量的手机号需要查询

1、创建一个data.txt格式的文件

首先创建一个data.txt格式的文件(文件名可以随便取,不要是汉字就可以,最好字母)

里面放置的第一行是变量名,后面每一行都是该变量的一个数据(如果有多个变量和数据使用“,”分割)

aE5qaj.png

2、在postman里面创建一个环境变量

在postman里面创建一个环境变量,名字和上面那个变量名保持一致即可,postman里面的环境变量的值,可以随便填(因为,等会我们调用的时候会调用那个txt文本里面的数据,而不会用到postman里面设置的数据)

aE5jGq.png

3、在tests里面写一个检测脚本

在tests里面写一个检测脚本,检测该手机号是否为联通手机号

aEIAiR.png

4、以集合的形式运行该接口

aEIMee.png

5、查看运行结果,完成参数化设置

文本中的10个电话,有6个电话是联通的,1个不是联通的

aEI3FA.png

并且,每个接口的访问地址都一样,只不过是里面的请求参数一栏不同。举例如下:

aEoMcV.png

后面不一一列举了

点击查看

本文标题:Postman教程

文章作者:Mango

发布时间:2020年07月28日 - 21:36:00

最后更新:2020年07月29日 - 08:41:18

原始链接:https://mango185.github.io/post/7143649.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------------本文结束 感谢您的阅读-------------------