0x00:简介

Postman是一款接口测试工具,用于做接口请求测试,无论是前端,后台还是测试人员,都可以用postman来测试接口,用起来非常方便。

0x01:安装

Postman有两种形式的产品:一种是本地应用程序,还有一种是Chrome浏览器的插件。官方推荐大家使用本地应用程序,我们也以本地应用程序Posman进行讲解。Postman的Window应用程序安装包,可以到Posman官方网站下载 https://www.getpostman.com/downloads/

从chrome的扩展程序中安装(需要翻墙), https://chrome.google.com/webstore/search/Postman?hl=zh-CN

我们这里选用软件。

0x02:postman基础功能介绍

首先看一下它的基础功能,借用别人的一张图

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

首先创建一个项目,取名为test

添加一个请求

输入一个接口,params里会自动显示参数

该请求是聚合数据提供的一个查询天气的接口:

http://apis.juhe.cn/simpleWeather/query?city=南京&key=a4c2bd5cbc35bc5267f40b9a46df353d

点击send,查询成功

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

0x03:请求区域介绍


  • Authorization:身份验证,主要用来填写用户名密码,以及一些验签字段,postman有一个helpers可以帮助我们简化一些重复和复杂的任务。当前的一套helpers可以帮助你解决一些authentication protocols的问题。;
  • Headers:请求的头部信息
  • Body:post请求时必须要带的参数,里面放一些key-value键值对
  • Pre-requerst Script:可以让你在 请求之前自定义请求数据,这个运行在请求之前,语法使用JavaScript语句。
  • tests:tests标签功能比较强大,通常用来写测试,它是运行在请求之后。支持JavaScript语法。postman每次执行request的时候,会执行tests。测试结果会在tests的tab上面显示一个通过的数量以及对错情况。这个后面会进行详解,它也可以用来设计用例,比如要测试返回结果是否含有某一字符串
  • form-data:,它将表单数据处理为一条消息,以标签为单元,用分隔符分开。既可以单独上传键值对,也可以直接上传文件(当上传字段是文件时,会有Content-Type来说明文件类型,但该文件不会作为历史保存,只能在每次需要发送请求的时候,重新添加文件。);post请求里较常用的一种
  • x-www-form-urlencoded:对应信息头-application/x-www-from-urlencoded,会将表单内的数据转换为键值对;
  • raw:可以上传任意类型的文本,比如text、json、xml等,所有填写的text都会随着请求发送;
  • binary:对应信息头-Content-Type:application/octet-stream,只能上传二进制文件,且没有键值对,一次只能上传一个文件, 也不能保存历史,每次选择文件,提交;

0x04:导出和导入接口集

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

导出

即可导出至本地

导出:

0x05:关于设置环境变量

  1. Global---全局
  2. Enviroment --- 环境变量
  3. Local --- 局部
  4. Data ---- 数据

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

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

添加一个测试环境demo

值和value分别为“ user”和“laowang”

0x06:常用tests方法

tests提供js语法,用于使用正则匹配返回数据是否包含规则中存在的数据。

下面是一些常用的tests方法:

测试response Headers中的某个元素是否存在 tests["元素Content-Type是否存在"] = postman.getResponseHeader("Content-Type");

//getResponseHeader()方法会返回header的值;

定义一个xxx,获取headers值 var.xxx = postman.getResponseHeader("key");

将Headers中的值设置为一个环境变量 postman.setEnvironmentVariable("key",xxx);或者pm.environment.set("key",xxx);

检查response的code值是否为200 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。

检查response的body中是否包含字符串 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,只要匹配就可以。多个类型可用“,”分割。

检查Response Body是否等于字符串 tests["测试点"] = responseBody === "Response Body返回的内容";

//这个可以用在接口返回内容为纯字符串时,直接检查整个返回结果的正确性

检查Response time 是否小于200ms tests["Response time 小于200毫秒"] = responseTime < 200;

检查Response time 是否大于200ms tests["Response time 大于200毫秒"] = responseTime > 200;

postman.setNextRequest('Request 4')

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

 var jsonObject = xml2Json(responseBody);

//转换XML body为JSON对象

设置一个随机数变量 pm.globals.set("type",parseInt(4*Math.random())+1);

//针对不同类型的课程类型,设置一个1到4的随机整数,字段名是type,parselnt 是强制转换为整数

校验接口返回是否有数据 tests["获取第一个结果"] = xxx.content.jieguo[0];

//我的程序设置的是如果当前没有数据,则只返回content[],所以这句断言可以校验,如果content里还有数据,则视为返回不为空

0x07:使用postman进行接口自动化测试

使用postman也可以进行接口自动化

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

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

接下来我们看看如何利用 Postman 来解决上述的问题

首先在每个请求的Tests中添加规则: tests["Status code is 200"] = responseCode.code === 200;

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

执行后成功返回200

0x08:参考

https://www.jianshu.com/p/97ba64888894

https://www.jianshu.com/p/556a7700004d

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注