【技术博客】Postman接口测试教程 - 环境、附加验证、文件上传测试
Postman接口测试教程 - 环境、附加验证、文件上传测试
v1.0
作者:ZBW
前言
继利用Postman和Jmeter进行接口性能测试之后,我们发现Postman作为一款入门容易的工具,其内置的一些高级功能足够帮助我们对网站进行全面的接口测试。本文首先将介绍两个比较关键的功能:环境(Environment)和附加代码(Pre-request Script和Tests),这两个功能能够帮助我们对接口进行更加复杂的验证,如验证接口返回的信息等。除此之外,本文还将介绍文件上传测试的运行方式。
注:本文使用Native版本的Postman,以保证功能含有尽可能少的Bug。
配置和使用环境(Environment)
介绍
设想这样的两个场景:
- 当我们的项目在开发服务器上开发基本完成,决定向发布服务器部署时,我们不仅想测试开发服务器的功能,还想将同样的测试应用到部署服务器上。当测试样例数目很多时,手动修改每个测试中的域名无疑是一件工作量很大而又浪费时间的事情。
- 我们的测试有前后依赖关系,后面的测试需要依赖前面测试返回的内容才可以继续运行。
Postman中提供了变量(Variable)的概念,专门用于解决以上的问题。特别地,Postman将一组变量成为一个环境(Environment)。具体的说,一个环境可以是一组经常被复用的键值对,也可以是将前后测试关联起来的内容。
使用
1.新建环境
打开Postman,可以看到右上角有No Environment字样,说明我们目前没有应用任何环境变量。
点击齿轮图表打开环境的管理页面:
进入后点击Add可以新建一个环境,并看到如下界面。在该界面中可以设置变量的名称、初值、当前值。点击Add保存。如果点击Globals可以配置全局的变量。

2.切换环境
回到开始的界面,点击No Environment字样可以看到刚刚新建的环境,选中即可应用。
3.应用变量
Postman中以{{}}括起来的内容即为变量。这些内容可以出现在任何地方,包括域名、请求头、请求参数以及后文叙述的脚本代码中。例如如果我们想解决以上的第一个问题,可以将每个请求的域名字段改为
{{domain}}/api/to/test
之后配置不同的环境,分别有domain变量指向不同网址即可。
配置请求前/后脚本
介绍
同样,试想如下的场景:
- 我们的请求头中需要包含当前时间戳,以方便服务器进行验证。但每次运行测试都要输入一下时间戳非常麻烦,且不够准确。
- 我们的请求无论结果正确与错误与否都会返回HTTP 200,而正确与错误由返回内容的部分字段确定,在错误时会返回一个错误码用于区别错误类型。需要测试工具有对响应内容进行验证的能力。
- 还是之前的前后测试关联问题,需要有工具帮忙记录之前请求返回的变量。
以上的场景分别可以使用Postman附带的请求前脚本和请求后测试脚本来实现。这两者本质上都是一段Javascript代码,由Postman在请求发起前后放在沙盒(Postman Sandbox)中代为执行,并可通过应用Postman对象获取及修改测试相关的一些信息。
使用
请求前/后脚本的修改均位于配置请求的页面上,如图所示。

请求前脚本(Pre-request Scripts)
以前述的获取时间为例。可以按如下方式编写脚本,并且在请求头中使用{{timestamp}}获取值。
pm.environment.set('timestamp', new Date());
该段代码中pm为Postman对象,environment可以获取当前使用的环境变量,set方法可以用于设置一个环境变量。
这样当运行测试时就会先运行这段代码获取时间并赋给timestamp变量。
请求后脚本(Tests)
我们的项目中定义了一些错误码,可以通过错误码验证服务端是否返回错误信息。
1.例如在生成报告的测试中Tests部分添加如下代码
var jsonData = pm.response.json();
pm.test("Status is right", function () {
pm.expect(jsonData.status).to.eql("success");
});
pm.test("Errorcode is right", function () {
pm.expect(jsonData.errorcode).to.eql("0000");
});
pm.test("ExperimentId is right", function () {
pm.expect(jsonData.experimentId).to.eql("2110114");
});
pm.test("Return a pdf link", function () {
pm.expect(jsonData.link).to.include(".pdf");
});
其中pm.response.json()可以获取返回的响应信息并转为JSON对象。之后使用test方法和expect等函数对结果进行验证。expect类似于断言,当在Runner中运行时如果出现检查不过则测试即使返回HTTP 200 结果也为失败(Fail)。
2.这里的代码还可以用于关联测试。以我们的测试中获取生成报告的链接为例。我们首先请求生成报告的接口,生成一个报告,之后收藏这一报告。
在生成报告的请求的Tests字段中配置
pm.environment.set("pdflink", jsonData.link);
pm.environment.set("reportId", jsonData.experimentId);
并在之后的收藏测试中请求信息为:
link={{pdflink}}&reportId={{reportId}}
这样以来便可以将之前响应结果传入后续测试中。
文件上传类测试
配置文件上传测试的方式主要分两步。
1.确定/配置工作路径
打开Postman的设置,可以看到Working Directory的设置内容。这里是Postman有权限读取的文件位置,可以将相关上传的文件放在这里。

2.在测试中添加文件
在form-data类的请求体中,可以将Key的类型设置为File,之后点击选择文件便可以增加文件了。

特别地,在该测试导出后,如果别人导入到另一台电脑进行测试,那么文件将从其电脑上设置的Postman工作目录下读取。
【技术博客】Postman接口测试教程 - 环境、附加验证、文件上传测试的更多相关文章
- Java 开源博客 Solo 1.8.0 发布 - 改进文件上传
本次发布主要是更新了编辑器,使其更好地支持文件上传.(1.8.0 版本变更记录请看这里) 我们的 Markdown 编辑器: 另外,我们对 HTTPS 的支持也更完善了,欢迎大家试用! 简介 Solo ...
- 【技术博客】 关于laravel5.1中文件上传测试的若干尝试
关于laravel5.1中文件上传测试的若干尝试 作者:ZGJ 版本:v1.0 PM注:本人这两天也正在尝试解决这一问题,如有进展将及时更新这一博客 在我们的软工第二阶段中,我开始着手进行后端控制器的 ...
- SpringBoot图文教程4—SpringBoot 实现文件上传下载
有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试更扎实 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例 ...
- [技术博客]基于动态继承类、WebDriver的浏览器兼容性测试框架搭建
问题背景 观察使用selenium进行自动化测试的过程,我们可以将它概述为: 启动测试进程,在该进程中构建WebDriver 启动浏览器进程,将它与WebDriver建立连接 使用WebDriver向 ...
- 如何使用PHP上传文件,上传图片,php上传教程,php表单文件上传教程
使用PHP进行文件上传,主要使用到表单功能和PHP内置的$_FILES函数功能.接下来我们看如何实现PHP上传功能.例子效果图,此例子是在Mac下进行调试成功的. PHP上传图片文件的功能代码如下: ...
- wex5 教程之 图文讲解 文件上传attachmentSimple(1)
视频教程地址:http://v.youku.com/v_show/id_XMTc4NDAyMTY4OA==.html 效果预览: 1 调用attchmentSimple组件,打开文件管理器,并选中,显 ...
- 微信小程序环境下将文件上传到 OSS
步骤 1: 配置 Bucket 跨域 客户端进行表单直传到 OSS 时,会从浏览器向 OSS 发送带有 Origin 的请求消息.OSS 对带有 Origin 头的请求消息会进行跨域规则(CORS)的 ...
- 在Ubuntu14.04上安装WordPress4搭建技术博客
1.安装LAMP环境 1.1 安装Apache2 1.2 安装MySQL5 1.3 安装PHP5 1.4 安装phpMyAdmin 2.初始化数据库 3.下载并配置WordPress 4.配置Apac ...
- 【技术博客】Laravel5.1文件上传单元测试
Laravel5.1文件上传单元测试 作者:ZGJ 在软工第三阶段中,我彻底解决了上一阶段一直困扰我的文件上传单元测试问题,在这里做一个总结. 注:下文介绍中,方法一方法二实现简单但有一定的限制条件( ...
随机推荐
- c#ADO.NET 执行带参数及有返回数据
直接上代码,这个过程中有个数据SqlDataReader转为 DataTable的过程,当中为什么这样,是应为我直接绑定DataSource的时候没有数据,网人家说直接绑定但是没效果,我就转换了一下. ...
- Springboot项目中pom.xml的Oracle配置错误问题
这几天刚开始学习Springboot碰见各种坑啊,这里记录一个添加Oracle引用的解决方案. 前提:开发工具IDEA2019.2,SpringBoot,maven项目:Oracle版本是Oracle ...
- es6的let与const
es6新增命令let,用于声明变量,他与var的不同主要有三点: let有块级作用域 let没有变量提升 同级作用域内,let不可以重复定义 let有块级作用域: es5 for(var i=0;i& ...
- win10桌面左下角搜索框无法搜索解决办法
方法1.首先看下window search服务是不是被禁止或者停止运行了,如果停止了,就重新启动看看. 方法2.如果上面的方法还没有解决的话:任务管理器-详细信息--结束explorer.exe进程- ...
- linux函数深入探索——open函数打开文件是否将文件内容加载到内存空间
转自:https://blog.csdn.net/qq_17019203/article/details/85051627 问题:open(2)函数打开文件是否将文件内容加载到内存空间 首先,文件打开 ...
- Linux操作系统的打包/归档工具介绍
Linux操作系统的打包/归档工具介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- 让istio中的jaeger跑起来
现在的水平,仅止于让它跑起来.:) 同样的环境,microk8s+istio. 步骤如下: 一,使用kubectl get pod -n istio-system查看所有istio的POD运行正常. ...
- 用 tomcat 部署 Jenkins
在tomcat 下面部署 Jenkins 版本 tomcat (7.0.94) + jdk (7) + jenkins (2.46.3) 前两次没有部署成功,应该是 jdk 版本的问题, 如果不成功 ...
- Comet OJ 夏季欢乐赛 分配学号
Comet OJ 夏季欢乐赛 H 分配学号 题目传送门 题目描述 今天,是JWJU给同学们分配学号的一天!为了让大家尽可能的得到自己想要的学号,鸡尾酒让大家先从 [1,10^{18}][1,1018] ...
- matlab-线性回归
1.调用函数regress(Y,X,alpha),plpha是置信度,如果直接用regress(Y,X)则默认置信度为0.05,Y是一个 的列向量,X是一个 的矩阵,其中第一列是全1向量. 2.函数返 ...