使用 Postman 实现 API 自动化测试

1

背景介绍       

相信大部分开发人员和测试人员对 postman 都十分熟悉,对于开发人员和测试人员而言,使用 postman 来编写和保存测试用例会是一种比较方便和熟悉的方式。但 postman 本身是一个图形化软件,相对较难或较麻烦(如使用 RPA)实现自动化测试。幸运的是,postman 还提供了一个命令行工具 newman,我们可以借助 postman + newman 来实现 API 自动化测试。

2

名词解析       

1. Collection

Collection 是一组保存的请求,postman 中发送的每个请求都会显示在侧栏的 ”历史记录“ 选项卡下。请求数量比较少的时候,通过历史记录来重用请求会比较方便。随着请求量的增长,在历史记录中查找特定请求可能会非常耗时。此时,你可以将所有请求保存为一个 collection,以便于访问。

2. Environment

Environment 是一组可以在 postman 请求中使用的变量。你可以根据不同的环境(如 dev、test、prod 等),把一组相关的变量放到不同的 environment 文件中,来对不同的环境进行 API 自动化测试。

3

使用说明       

我们以测试百度的 https://www.baidu.com/sugrec 这个 API 作为示例。

1. 创建 Collection

新建 collection:

393fc549add481c805782af51a29b170.png

新建请求:

f6c8c34938ad0a50816d4fc1e4112492.png

测试请求,状态码返回 200:

3faefb825a818de703f53a1c237a01af.png

编写测试断言并验证断言:

pm.test("Return 200", function() {pm.response.to.have.status(200)
})

5536954f3f536bfe3599885e9613e0e1.png

2. 创建 Environment

新建 environment:

e9ec7df425831574b5d0ca0c4a2f052a.png

填写参数信息,这里简单使用 host 作为参数:

0ab083f8c8f9987bb25f466b4728b7ab.png

在 collection 的请求中使用 host 参数,并进行测试:

a6ae29600e4934b7fdc9ce2fc9cc5a2d.png

3. 导出 CollectionEnvironment

导出 collection 为 collection.json:

493d3fa7909570577943ec758e90dbfd.png

3541b14b2654b58eeb25d6dae828e798.png

导出 environment 为 environment.json:

10f9ba413b518b95b9959e07aeae10ee.png

3f950242f671099960c6e029f91d1f2b.png

3. 执行 API 测试

我们只需要基于导出的 collection.json 和 environment.json 执行一条 docker 指令即可完成 API 测试:

docker run --rm -i -v /root/postman:/etc/newman \--entrypoint sh postman/newman:alpine -c \'npm i -g newman-reporter-html; \newman run collection.json \--suppress-exit-code 1 \--color off \--reporters cli,html\--reporter-html-export api_report.html \--environment=environment.json'

指令解析:

项目说明
docker run启动 docker 容器
--rm ‍
退出容器时销毁容器
-i交互模式
-v /root/postman:/etc/newman目录挂载
--entrypoint sh postman/newman:alpine -c容器执行指令
npm i -g newman-reporter-html安装 html 报告插件
newman run collection.json指定测试 collection.json
--suppress-exit-code 1 指定错误状态码为 1
--color off ‍‍关闭颜色
--reporters cli,html输出命令行和 html 报告
--reporter-html-export api_report.html‍设置输出 html 文件名
--environment=environment.json指定 environment.json 文件

执行结果:

e01d3041785ce06cabcb6b9a6057c9dd.png

a2514a5ef2029cc988aac619c10fa639.png

查看 html 报告:

076fb2dda1c81fc96fc2380eb1c1fe48.png

4. 集成 CI 实现 API 自动化测试

你只需要针对你的代码项目准备好 collection.json 和 environment.json,把它们存放到代码中的某个目录,然后在 jenkins 或 gitlab-ci 中添加执行上面介绍的 docker 指令即可。

4

参考总结       

以上就是本文希望分享的内容,如果大家有什么问题,欢迎在公众号 - 跬步之巅留言交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php json -gt;访问,【转】Php+ajax+jsonp解决ajax跨域问题

首先:jsonp是json用来跨域的一个东西。原理是通过script标签的跨域特性来绕过同源策略。发送端:$.ajax({type : "post",url : "ajax.php",dataType : "jsonp",jsonp: "callback",//传递给请求处理程序或页面的&…

《看聊天记录都学不会Python到游戏实战?太菜了吧》(1)加载Python神器!亮剑!

本系列文章将会以通俗易懂的对话方式进行教学,对话中将涵盖了新手在学习中的一般问题。此系列将会持续更新,包括别的语言以及实战都将使用对话的方式进行教学,基础编程语言教学适用于零基础小白,之后实战课程也将会逐步更新。 若…

little tricks(持续更新)【python】

python中的list有reverse方法,但是字符串却没有,怎么办呢? csdn博主有列了几个方法,我觉得第一个最简单直接,str[::-1]搞定。 当然也有一种怪异的方法,我把字符串转为序列reverse一下,再转回来不…

Codeigniter 3 拓展HMVC

2019独角兽企业重金招聘Python工程师标准>>> 在Codeiniter(以下统称CI) 2.X版本中,我们就通过拓展核心类库实现了HMVC,但是同样的代码,拿到CI 3中,就很有可能不好用了。 ###拓展核心类库方式 官…

FPGA FIFO深度计算

转自:http://comm.chinaaet.com/adi/blogdetail/37555.html 首先,一定要理解清楚FIFO的应用场景,这个会直接关系到FIFO深度的计算,如果是面试官抛出的问题,那么有不清楚的地方,就应该进行询问。如果是笔试或…

玩转ASP.NET Core 6.0框架-序言

ASP.NET Core是微软提供的强大的web框架,它有很多潜在的强大而有用的功能。本专栏的目标是帮助您把框架的隐藏能力最大限度地发挥出来,让您能够按需定制ASP NET Core框架。本专栏提供了一种具体的操作和实现方法,可以让你在短时间尽可能地提高…

从C#开始的面向对象编程经典自学教程

1、C语言的时代 在C语言时代,可以认为那时的编程过程就是表格加工过程,也就是从A表格到B表格、再到C表格…..等等,这个过程中,计算机语言如何描述一个表格,成为计算机语言的关键。 对一个表格的分析可以发现:表格是两部分组成:表头和表格: 学生表 STUDENT 在这个表格…

Java之对List里面的对象名字进行模糊查询

1 问题 对list里面的对象名字进行模糊查询 2 解决办法 //即可以进行模糊匹配matcher.find()//匹配查询matcher.matches() /*** 模糊查询*/public static ArrayList<SearchBean> search(String name, List<SearchBean> list) {ArrayList<SearchBean> results…

《看聊天记录都学不会Python到游戏实战?太菜了吧》(2)在python中加号竟然如此善变

本系列文章将会以通俗易懂的对话方式进行教学&#xff0c;对话中将涵盖了新手在学习中的一般问题。此系列将会持续更新&#xff0c;包括别的语言以及实战都将使用对话的方式进行教学&#xff0c;基础编程语言教学适用于零基础小白&#xff0c;之后实战课程也将会逐步更新。 若…

mysql数据库rp集群,使用MySQL-Cluster搭建MySQL数据库集群

1、MySQL集群的作用&#xff1a;- 解决访问节点的单点故障- 数据存储节点的单点故障- 解决数据存储节点数据备份问题2、集群&#xff1a;使用一组服务器提供相同的服务3、关于MySQL-Cluster&#xff1a;MySQL官方提供的集群版本已集成标准版MySQL程序&#xff0c;可独立安装使用…

桌面虚拟化云技术将支撑数字化医院

桌面虚拟化云技术将支撑数字化医院 2013-12-04 10:32 现今医疗行业已经从医院——患者的二元关系走向从医院——患者——政府监督——医疗保险的多元关系&#xff0c;医疗体系需要更高效的运转&#xff0c;患者需要更好的就医体验&#xff0c;这使得医疗行业信息化建设的重要性…

Blazor University (23)路由 —— 路由参数

原文链接&#xff1a;https://blazor-university.com/routing/route-parameters/路由参数源代码[1]到目前为止&#xff0c;我们已经了解了如何将静态 URL 链接到 Blazor 组件。静态 URL 只对静态内容有用&#xff0c;如果我们希望同一个组件根据 URL 中的信息&#xff08;例如客…

【经典回放】多种语言系列数据结构算法:栈(C版)

本文采用C语言实现栈结构算法并举例应用。 一 栈的基本原理分析 作为栈这种数据结构,数据是进行所谓的先进后出操作,但栈在操作中,并不需要在中间插入删除操作、一般也不需要在进栈数据中查找什么,这种情况下,恰恰是顺序表可以完成的非常好的场合,所以栈经常是用一个简单…

Android之提示android.content.res.Resources$NotFoundException: Resource ID #0x7f08010a

1 问题 在我的oppo机器上面运行一个页面没有奔溃,但是在红米安卓5.1版本运行页面奔溃,奔溃信息如下 /Timeline(11600): Timeline: Activity_launch_request time:61313216 I/WtProcessController( 3721): FOREGROUND INFO: name=com.appsinnova.android.keepshare uid=1023…

《看聊天记录都学不会C语言?太菜了吧》(14)这么神奇?我写了20行代码竟然一行就可以搞定?

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我&#xff0c;若你是真心学习可以送你书籍&#xff0c;指导你学习&#xff0c;给予你目标方向的学习路线&#xff0c;无套路&#xff0c;博客为证。 本系列文章将会以通俗易懂的对话方式进行教学&#xff0c;对话中将涵盖…

Javascript和android原生互调

最近在做原生和js端的互调的功能&#xff0c;自己改了个demo&#xff0c;给大家讲解下。 先上js代码 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>方法调用基本流程测试</title> </head> <body> &l…

ice 服务java连接,“先进的互联互通技术”–使用ice联通php和java [part 1 server]

PHP没有中间件&#xff0c;导致了对很多麻烦。比如&#xff0c;对数据库的操作必须要链接数据库&#xff0c;然后做SQL操作。WEB程序直接操作数据库的方法&#xff0c;这样会带来很多人为因素的事故隐患&#xff0c;以及管理上的麻烦&#xff0c;尤其是对大型的网站应用来说。规…

HttpCookie

参考 : http://www.cnblogs.com/fish-li/archive/2011/07/03/2096903.html 上文结尾有提到一个说法 4. HttpRequest.Cookies 与 HttpResponse.Cookies 会有关系&#xff08;很奇怪吧&#xff09;。 微软官网也是这么说的 : https://msdn.microsoft.com/en-us/library/system.we…

Android之BaseQuickAdapter.setOnItemChildClickListener点击死人也没反应的原因

1 问题 用BaseQuickAdapter设置子view点击事件 unInstalledAdapter!!.setOnItemChildClickListener(object: BaseQuickAdapter.OnItemChildClickListener {override fun onItemChildClick(adapter: BaseQuickAdapter<*, *>?, view: View?, position: Int) {var info =…

【经典回放】多种语言系列数据结构算法:栈(C#版)

本文采用C#语言实现栈结构算法并举例应用。 一、C#的栈对象使用 对C#而言,要使用栈是极其简单的事情,因为C#已经有栈对象,所以根本不需要自用再用顺序表构造栈,只需要你会说明、会应用即可。 在C#中栈对象的类型名称是Stack,这是个泛型的对象,所以,你在使用这个对象的时…