接口测试神器Postman使用教程

概述

注:本文使用的Postman版本是v8.0.6,已升级到目前最新。

官方文档:https://www.getpostman.com/docs/

Google公司研发并开源的一套基于Chrome V8引擎的API测试工具,功能丰富度是当前众多API测试工具中的翘楚。
主要功能包括:

  • 模拟各种HTTP requests,作为前后台调试工具;
  • 支持录制请求;
  • 支持JS脚本(基本支持ES6,浏览器相关对象和API和require()import等除外);
  • 将开发中测试的各种测试请求保存下来形成测试组件Collection(测试集合),可以运行测试集合进行自动化测试;
  • 内置丰富的编程接口,可以直接对环境及变量进行设置并提供多种断言模板,方便快速添加测试用例。
  • 插件newman可以在命令行下运行,并集成到Jenkins;
  • 能生成各种语言的HTTP请求代码模板;
  • 提供简易版持续集成(Monitor功能,只支持公网IP的请求);
  • 能生成比较好看的在线API文档(支持MarkDown)

实战

快捷键

在requestBody编辑区里面:
Ctrl + Shift + 上下键,对数字加减;
选中key、value,输入英文引号,可以快速将key、value变为字符串;

form-data vs x-www-form-urlencoded

前者是网页表单用来传输数据的默认格式。可以模拟填写表单,并且提交表单。可以上传一个文件作为key的value提交(如上传文件)。但该文件不会作为历史保存,只能在每次需要发送请求时,重新添加文件。否则可能会出现下面的MultipartException问题。
后者中的key-value会写入URL,form-data模式的key-value不明显写入URL,而是直接提交。

Postman interceptor

老版本的postman可以直接作为chrome插件运行,与浏览器的request、response、session、cookie同步。

新版本postman作为独立app软件运行,无法直接与浏览器进行数据同步,故而需要安装postman的插件Postman Interceptor。该插件可以用来做请求的拦截,进而实现与chrome浏览器共享数据。安装成功后,右上角有开关;进一步可以设置对哪些host:port进行拦截,默认配置.*对所有请求进行拦截,一般无需设置。

安装插件的几种方式,参考关于Chrome浏览器的一些使用技巧 extension安装部分。

导入导出测试数据包和工作环境

用Postman生成Request代码

如图
这里写图片描述
点击code,可以选择语言,比如java,可惜只有两个第三方rest client,稍加修改,可以用于其他第三方rest client:
这里写图片描述
点击copy to clipboard,即可粘帖到IDE里面,省去手动敲代码的麻烦。

尤其适合于生成cURL代码,

测试下载接口

在这里插入图片描述
根据接口返回的文件类型,指定content-type,如application/zip,否则默认下载的文件格式是:
在这里插入图片描述

https://www.cnblogs.com/yutang-wangweisong/p/14343993.html

中文文件名乱码问题

如下图,postman send and download遇到中文文件名乱码问题:
在这里插入图片描述
同样的请求URL,在Chrome执行则没有任何问题。
在这里插入图片描述

测试文件上传

在这里插入图片描述
如上图,配置Body选择form-data,key选择file类型,并输入file要与定义的接口要严格对应,点击value则打开文件上传的弹窗,下面的提示框则是方便团队合作,此处忽略。

@RequestMapping("/files-anon")
public FileInfo upload(@RequestParam("file") MultipartFile file) throws Exception {
	return fileService.upload(file, "1");
}

POST form data实现upload file + with param

大意就是:调用第三方的一个文件上传接口,需要传参文件流,同时还需要其他传参。

Postman只有在Body为form-data时,才允许上传文件。

Postman支持在POST请求类型上面添加RequestParam,虽然这可能不太符合严格的REST规范。

于是这样调用接口:
在这里插入图片描述
Body里面是文件流,Header里面是access-token。但是报错,行不通。

考虑使用脚本形式,Body里面是文件流,依然报错:
在这里插入图片描述
最后的实现方式:
在这里插入图片描述
到此,才恍然大悟,为啥之前没有想到??

org.springframework.web.multipart.MultipartException: Current request is not a multipart request

在使用postman测试文件上传接口功能时,抛错:
org.springframework.web.multipart.MultipartException: Current request is not a multipart request,如果从Java代码角度去定位问题,打死也搞不懂为什么,实际上这里是postman应用重启后的问题,需要把之前添加的文件删除,然后重新添加,解决问题。

变量与环境

{{port}}即为一个变量,变量依赖于环境。环境有全局(global)环境和局部(local)环境,全局环境里面定义的变量在任何地方地方都可以看到并使用,局部环境里面定义的变量只有在当前环境里面才可以看到。环境和变量也可以分享,导出,导入。另外创建环境时,有环境模版可以参考借鉴并使用,

如下图,在左侧面板找到Environments,点击加号创建一个环境:
在这里插入图片描述
环境名取dev,输入想要创建的变量,如host,值为localhost,表示开发环境的IP,可以添加若干个变量:
在这里插入图片描述
对刚才创建的dev环境复制一份,重命名为test,host变量值为测试环境的IP:
在这里插入图片描述
将请求略加改造,双括号引用创建的环境变量,右侧下拉框选择不同的环境即可。
在这里插入图片描述

批量执行

以v8.11.1版本为例进行演示。新建collection,然后在该collection下面新增一个接口,将希望批量执行的变量用{{}}重命名:
在这里插入图片描述
然后创建需要关联的参数化文件,如csv文件(最简单),记得该文件第一行的参数一定要和请求接口里面的参数化变量名字相同。
在这里插入图片描述
回到collection tab,点击Run,设置Iteration为csv文件的行数减1,即接口执行次数;Delay依据接口执行时间个性化设置;点击Select File,选择刚才保存的accountId.csv,文件名命名无所谓。然后点击Run。
在这里插入图片描述
如果仅仅只是Run,可能不知道运行结果如何,不知道是否成功或者失败,成功的话,是否返回需要的数据等等。

此时Tests派上用场。可以根据右侧的模版,写一个:

// 判断responseBody是否含有next字段
pm.test("Body matches string", function () {
    pm.expect(pm.response.text()).to.include("next");
});

效果:
在这里插入图片描述

newman

newman,一款命令行工具,基于Node和npm,指定registry安装:npm install newman --registry <url>,可集成到Jenkins。
newman run <用例文件> -e <环境变量文件>
newman run demo_collection.json -e global.json -k
-k关闭SSL检查,用于网站没有证书时。
newman run pmsa_web_api.postman_collection.json --reporters cli,html,junit -e globals.postman_globals.json --reporter-html-export result.html --reporter-junit-export junit-result.xml
运行测试用例并生成多种形式的结果。

Jenkins集成

构建选择Execute shell,输入newman命令。命令执行完成后得到JUnit的report,Jenkins有个Publish JUnit test result report可以用来解析JUnit的XML测试报告。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

johnny233

晚饭能不能加鸡腿就靠你了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值