Postman接口测试
一、Postman介绍
1.1 Postman简介
一般简单的接口测试我们可以直接在浏览器里面进行调试,但是涉及到一些权限设置的就无法操作了,因此我们需要接口测试的相关工具;Postman 是一个接口测试和 http 请求的工具。
官网地址:https://www.getpostman.com
Postman 的优点:
- 支持各种的请求类型: get、post、put、patch、delete 等
- 支持在线存储数据,通过账号就可以进行迁移数据
- 很方便的支持请求 header 和请求参数的设置
- 支持不同的认证机制,包括 Basic Auth,Digest Auth,OAuth 1.0,OAuth 2.0 等
-
响应数据是自动按照语法格式高亮的,包括 HTML,JSON 和 XML
1.2 下载安装
Postman有windows,Mac、Liunx以及Chrome插件版本。
下载地址:https://www.getpostman.com/apps
官方文档:https://www.getpostman.com/docs/v6/
Postman Api文档:https://docs.postman-echo.com
1.3 Postman工作原理
如下图所示,当您在Postman中输入请求并单击Send按钮时,服务器将接收您的请求并返回Postman在接口中显示
1.4 发送请求
以常用的post请求为例:
HTTP POST请求方法旨在将数据传输到服务器,返回的数据取决于服务器的实现。
POST请求可以使用Query String Parameters
以及body
将参数传递给服务器。
Postman Body数据类型说明:
- form-data
multipart/form-data
是Web表单用于传输数据的默认编码。这模拟了在网站上填写表单并提交它。表单数据编辑器允许我们为数据设置键-值对。我们也可以为文件设置一个键,文件本身作为值进行设置。 - x-www-form-urlencoded 该编码与URL参数中使用的编码相同。我们只需输入键-值对,Postman会正确编码键和值。请注意,我们无法通过此编码模式上传文件。表单数据和urlencoded之间可能存在一些差异,因此请务必首先检查API的编码实现,确定是否可以使用这种方式发送请求。
- raw 请求可以包含任何内容。除了替换环境变量之外,Postman不触碰在编辑器中输入的字符串。无论你在编辑区输入什么内容,都会随请求一起发送到服务器。编辑器允许我们设置格式类型以及使用原始主体发送的正确请求头。我们也可以手动设置
Content-Type
标题,这将覆盖Postman定义的设置。 - binary 二进制数据可让我们发送Postman中无法输入的内容,例如图像,音频或视频文件。
1.5 Cookie设置
cookie是存储在浏览器中的小片段信息,每次请求后都将其发送回服务器,以便在请求之间存储有用的信息。比如很多网站登录界面都有保留账号密码,以便下次登录。
由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。
Cookie是由服务端生成,存储在响应头中,返回给客户端,客户端会将cookie存储下来,在客户端发送请求时,user-agent会自动获取本地存储的cookie,将cookie信息存储在请求头中,并发送给服务端。postman也可以设置、获取、删除Cookie。
- Set Cookies
在Send按钮下方点击
Cookies
文字菜单,弹出如下界面,然后可以设置Cookie。
1.6 Postman变量类型
Postman提供了变量设置,有4种变量类型。
- 环境变量(Environment Variable)
- 本地变量(LocalVariable )
- 全局变量(Global Variable)
- 数据变量(Data Variable)
环境变量
环境变量指在不同环境,同一个变量值随着环境不同而变化,比如我们上面举例场景就可以使用环境变量,当在测试环境时,host值为: dev.postman.com ,当切换到生产环境时,host值变为:postman-echo.com 。
环境变量设置:
在postman界面点击右上角眼睛图标,即可开始设置环境变量和全局变量。环境变量设置过程如下图所示:我们可以设置两种环境 dev
和release
,dev
是开发测试环境; release
是正式的生产环境。host
环境变量,根据不同的环境值
本地变量
本地变量主要是针对单个URL请求设置的变量,作用域只是局限在请求范围内。如请求URL如下,设置两个本地变量(shopid)作为参数。
变量设置好之后需要赋值,在Pre-request-Script
里面编写如下代码:
全局变量
全局变量是指在所有的环境里面,变量值都是一样的,全局变量的作用域是所有请求。
全局变量设置有两种方式:
- 点击界面里设置
- 在脚本里设置
界面设置
点击眼睛图标后,在Global
选项菜单点击Edit
菜单即可设置全局变量,如下图所示。全局变量的引用格式和环境变量一样,
注意:当环境变量和全局变量名称一样时,切换到某个环境时,环境变量会覆盖全局变量。
脚本设置
使用如下脚本可以设置全局变量:variable_key
表示变量名称, variable_value
表示变量值。
pm.globals.set("variable_key", "variable_value");
数据变量
数据变量是通过导入外部数据文件(json文件或者csv文件),来获取变量数据。我们可以创建一个如下内容的json文件:
稍后我们会结合运行Collection来讲解如何导入该数据文件。
二、接口自动化测试
如果需要达到自动化接口测试的效果,那么我们在基本的模拟请求上还需要做哪些呢?
以下我粗略概括为 3 个问题(欢迎更多补充与建议):
- 设置断言
- 如何进行接口批量
- 如何处理依赖接口问题(比如商品下单的接口必须要求先登录)
所以,接下来就主要分为 3 个部分进行介绍,以分别解决这 3 个问题。
2.1 断言
简介
一般来说执行完测试,我们需要对测试结果来进行校验,判断结果是是否符合我们的预期,也就是断言。在接口测试中一般会根据响应状态码或者响应返回的数据来进行断言。
Postman提供一个测试沙箱(Postman Sandbox) 测试沙箱是一个JavaScript执行环境,可以通过JS脚本来编写pre-request Script和test Script。
- pre-request Script(预置脚本)可以用来修改一些默认参数,在请求发送之前执行。有点类似于unittest里面的setUp()方法。
- test Script(测试脚本)当接收到响应之后,再执行测试脚本。
断言规则
- 响应状态码:200
- 响应内容:返回的
user
参数值与定义的一致 - 响应时间:小于0.5s
接下来我们看看如何利用 Postman
来解决上述的问题
功能区:
在 Postman
中相关的功能在非常显眼的地方,Tests
功能的使用需要我们有一定的编程语言基础,目前支持的脚本语言即为 JavaScript
。 但比较好的一点是,我们不需要再去考虑上下文问题以及运行环境的问题 ,也就是说我们只需要在这边完成结果逻辑判断的代码块即可。而 Postman
还为我们提供了一些常用的代码模板,在 Tests
面板右边的 SNIPPETS
功能区中,所以对 JavaScript
不大了解问题也不大。
先看上图的代码部分,我们可以发现 status Code
、 responseBody
和 responseTime 三个变量(可直接使用) :
status Code
:包含请求的返回的状态信息(如:code)responseBody
: 为接口请求放回的数据内容(类型为字符串)responseTime
:请求所耗时长
所以上述代码应该不难理解了,而有了返回结果的数据以及表示结果成功与否的方式,那么我们“接口结果判断”的问题也就基本解决了。
另外还有几个比较常用的:
postman
:可以做的比较多,比如- 获取返回数据的头部信息:
pm.response.to.have.header();
- 设置全局变量:
pm.globals.set("variable_key", "variable_value");
- 获取返回数据的头部信息:
更多功能可以查看官方文档
2.2 批量执行
1)运行collection
当我们想批量测试某个集合里面的各个API时,可以使用Collection Runner来批量运行API,同时可以进行环境变量、迭代执行次数、延迟时间等设置。
想要进行接口的批量测试、管理,那么我们需要将待测试的接口全部都保存到同一个集合(Collections)
中,你可以认为就是保存到同一个文件夹中。先看看 Postman
中的操作步骤:
通过以上步骤,我们得到一个待测的接口集合,以上准备就绪后,我们就可以开始批量运行接口进行测试了:
点击Run
后,会新打开一个页面:
Environment
:用于切换接口运行的环境Iteration
:用于设置接口一共要运行的次数。Delay
: 设置每次运行接口之间的时间间隔,单位为毫秒。Data File
: 上传测试数据文件 (下文单独讲)
执行结果
2)数据驱动
应用背景
有时我们针对一个接口需要测试很多不同的参数,如果每次一个个的去修改参数值来进行测试这样效率肯定会比较低下。因此我们需要每次迭代执行传入不同的参数进行测试,那么需要导入外部数据文件进行参数化,也就是所谓的数据驱动。
接下来我们讲讲 Data File
, 在运行集合前的这个选项就是用来上传测试数据(文件)以赋值给相应变量的。Postman目前支持JSON和CSV两种格式的文件。
我们先以 CSV
格式的测试数据为例:在典型的CSV方式中,第一行表示所有变量名称,后续行表示每次迭代时这些变量的值。
请注意,“Collection Runner”的每一次运行只能选择一个数据文件。
如果使用 Json
文件的话,那么格式如下:
[
{"shopId":600817882},
{"shopId":600082511}
]
最后上传data file
点击Preview
按钮可以预览导入的数据。
3)构建工作流
问题思考
在使用“Collection Runner”的时候,集合中的请求执行顺序就是请求在Collection中的显示排列顺序。但是,有的时候我们不希望请求按照这样的方式去执行,可能是执行完第一个请求,再去执行第五个请求,然后再去执行第二个请求这样的方式;那么在“Collection Runner”中如何去构建不同的执行顺序呢?
最直接的方法就是直接在集合里面拖动调整顺序,但是每次去拖动也比较麻烦,特别是当请求比较多的时候。这个时候最高效的方法就是通过脚本设置
首先在第一个请求:Request1中Test
添加如下代码:表示下一个请求为执行请求名称为Request3
的请求
1
|
postman.setNextRequest('Request 3')
|
4)定期任务
Postman
提供了一个 Monitors
(监视器)功能,支持我们提交一个测试任务,按照设置的定时器进行运行,如每天测试一次,具体操作如下:
2.3 请求依赖问题
了解了接口结果判断和集合批量测试后,我们再来看看比较复杂的情况,即依赖请求问题。但大部分依赖问题其实本质上就是一个接口间数据传递的问题,比如调用接口后返回一个标识,假设为 userid ,那么我们请求下一个接口时只要一起携带 userid 参数进行请求即可。所以,问题变为:
- 保证接口调用顺序
- 将接口A返回的数据传递给后续的接口
eg:返回值
{"shop":{"shopid":600639405,"userid":1200647729,"last_active_time":1606386496,"vacation":false,"place":" - , , ","account":{"portrait":"9fb3898e4068d53fa39e3c436782d5af","username":"stonegogo"},"is_shopee_verified":true,"is_preferred_plus_seller":true,"is_official_shop":false,"item_count":13,"response_rate":0,"live_account_info":{"is_host":true,"is_banned":false}}}
posted on 2021-06-04 11:00 xingxing666 阅读(961) 评论(0) 编辑 收藏 举报