文章目录
- 1 Postman介绍
- 2 postman基础功能介绍
- 2.1 postman基础页面
- 2.2 postman基础页面介绍
- 2.2 接口测试流程和原理
- 2.3 请求区域介绍
- 3 导出和导入接口集
- 3.1 导出
- 3.2 导入
- 4 设置环境变量
- 4.1 环境变量优先级
- 4.2 新建环境变量
- 4.3 将返回值的某个数据设置为环境变量
- 4.4 将其他的常用tests方法
- 5 使用postman进行接口自动化测试
- 6 附录
1 Postman介绍
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。简单来说,四个词,简单实用大方美观!
Postman官网下载地址:https://www.postman.com/downloads/
2 postman基础功能介绍
2.1 postman基础页面
2.2 postman基础页面介绍
Collection
在postman里面相当于一个文件夹,可以把同一个项目的请求放在一个Collection
里方便管理和分享,Collection
里面也可以再建文件夹。
这里我们做一个普通接口的简单的示例:
Step1:新建一个文件夹
Step2:文件夹创建完毕,新建一个请求
Step3:输入请求URL和请求参数,点击“Send”
在此给大家推荐几个数据接口网站,注册就有免费调用机会:
-
点击进入APILINK
-
点击进入聚合数据中心
-
控制台-天气API
2.2 接口测试流程和原理
接收包理解:
2.3 请求区域介绍
请求部分介绍:
请求区域介绍:
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请求里较常用的一种
7 x-www-form-urlencoded:对应信息头
-application/x-www-from-urlencoded,
会将表单内的数据转换为键值对;
8 raw:可以上传任意类型的文本,比如
text、json、xml
等,所有填写的text都会随着请求发送;
9 binary:对应信息头
-Content-Type:application/octet-stream
,只能上传二进制文件,且没有键值对,一次只能上传一个文件, 也不能保存历史,每次选择文件,提交;
3 导出和导入接口集
postman支持非常方便的导入和导出接口集,继续操作如下:
3.1 导出
3.2 导入
0 error,0 wainning
,如此即简单的导入导出collection
集合
4 设置环境变量
4.1 环境变量优先级
Globa | 全局 |
---|---|
Enviroment | 环境变量 |
Loca | 局部 |
Data | 数据 |
优先级从高到底: Data ---- > Local ---- > Enviroment ---- > Global
postman支持很方便的设置环境变量以及全局变量,并可以一键切换不同环境
-
可以一键切换环境,选择No Environment则不使用环境变量,仅适用全局变量
-
可以查看当前环境中的变量和全局变量(Globals)的值
-
进入设置页面
4.2 新建环境变量
新建一套环境变量名为test
创建环境变量意义:能够很方便的调取我们所需的数据
4.3 将返回值的某个数据设置为环境变量
应用场景:在某些时候,我们需要获取到一个变量,并保存下来,因为在后面我们会使用到。比如
token
信息;
这时候就需要用到tests
区域了,使用其强大的js语法
下面是一个简单的将返回值的某个数据设置为环境变量或者全局变量的介绍:
//定义一个xxx,获取body中返回的所有参数,并转化为JSON格式var xxx = JSON.parse(responseBody);//检查json中某个数组元素的个数(这里检测programs的长度)
tests["program's lenght"] = data.programs.length === 5;//将返回中的值设置为一个环境变量pm.environment.set("key",xxx.data.value);或者:postman.setEnvironmentVariable("key", "value");//将返回中的值设置为一个全局变量,
pm.globals.set("key",xxx.data.value);
或者postman.setGlobalVariable("key", "value");//注意:Global后面不能加S,value值一定要指定到某个具体节点
4.4 将其他的常用tests方法
在postman里,内置了一些常用的方法,可以很方便的调用:
下面是一些常用的tests方法:
1./*测试response Headers中的某个元素是否存在 */
tests["元素Content-Type是否存在"] = postman.getResponseHeader("Content-Type");
//getResponseHeader()方法会返回header的值;2./*定义一个xxx,获取headers值*/var.xxx = postman.getResponseHeader("key");3./*将Headers中的值设置为一个环境变量*/postman.setEnvironmentVariable("key",xxx);或者pm.environment.set("key",xxx);4./*检查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。*/5./*检查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,只要匹配就可以。多个类型可用“,”分割。*/6./*检查response的body中是否包含字符串 */
检查Response Body是否等于字符串 tests["测试点"] = responseBody === "Response Body返回的内容";//这个可以用在接口返回内容为纯字符串时,直接检查整个返回结果的正确性7./*检查Response time 是否小于200ms */tests["Response time 小于200毫秒"] = responseTime < 200;8./*检查Response time 是否大于200ms */tests["Response time 大于200毫秒"] = responseTime > 200;9./*检查response的body中是否包含字符串 */
postman.setNextRequest('Request 4')
// postman.setNextRequest()是一个带有一个参数的函数,它是接下来要运行的请求的名称或ID。往往用来跳转至某个接口,只在运行该集合时有用,单独运行无效10./*转换XML body为JSON对象 */var jsonObject = xml2Json(responseBody);11./*设置一个随机数变量 */pm.globals.set("type",parseInt(4*Math.random())+1);
//针对不同类型的课程类型,设置一个1到4的随机整数,字段名是type,parselnt 是强制转换为整数12./*校验接口返回是否有数据 */tests["获取第一个结果"] = xxx.content.jieguo[0];//程序设置的是如果当前没有数据,则只返回content[],所以这句断言可以校验,如果content里还有数据,则视为返回不为空
5 使用postman进行接口自动化测试
首先,既然是自动化测试,那么我们肯定需要工具 (Postman) 或者代码能帮我们直接判断结果是否符合预期。那么在接口测试上,大体就两个思路:
-
判断请求返回的 code 是否符合预期
-
判断请求返回的内容中是否包含预期的内容(关键字)
接下来我们看看如何利用 Postman 来解决上述的问题:
step1. 这是两个模拟天气的接口集合,点击扩展按钮,找到RUN
,进入
step2. 先简单运行一次:
运行成功!
6 附录
在此推荐一款很好的谷歌浏览器插件Talend API Teste
直接通过谷歌网上商店搜索安装即可!
安装完毕就可以进行接口测试啦!如下图:
操作与Postman大同小异,赶快试试吧!