postman自动化实战总结

news2024/11/28 0:46:21

Postman实战总结

简介

本次实战内容主要包括如下几点:

l 背景介绍

l Postman使用,侧重于自动化实现,基础使用不做介绍

l 可视化Newman介绍

l 框架特色

l 实战中的坑

背景

随着国内软件技术的高速发展,越来越多的手工测试逐渐被自动化所替代,如UI测试,接口测试,单元测试等均可被自动化所替代,国内的大型互联网公司早已将自动化测试做的很成熟,大大提升了产品的交付效率和交付质量。

在it行业的大趋势下,产品组面临着如下四个挑战:

1. dubbo+cloudt2.X底层的老接口亟待升级;

2. 产品基本实现双周迭代,回归测试无法覆盖全部模块,偶尔出现关联影响考虑不周,导致泄露bug出现;

3. 测试资源不足,出现泄露bug后,影响产品质量;

4. 陆续尝试过使用python、doclever、eolinker、postman等做过接口测试,效果不是太理想。

在此背景下,最终通过研究,结合产品组内对postman有使用经验,且测试人员自动化能力欠缺,postman封装好,学习成本低,可快速产出自动化脚本,确立使用Postman+newman作为接口自动化测试方案。

如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以关注我一起讨论。

给大家推荐一个软件测试技术交流群:1079636098 群友福利免费领取

Postman

Json用例

Json****格式的自动化测试用例,其实保存的是数组,数组元素均为对象,而一个对象则对应了一条用例,如下图;

用例包含了用例名称(caseName),用例描述(description),期望调用结果(expectation),自动化业务类型(requestType),入参(queryData),预期结果(checkData)****,结果校验字段(checkKey);可根据自动化框架需要,灵活设置自己的用例参数

Postman****中访问用例数据的几种方式,为了便于后面查看,特准备如下格式用例:

{

"url":"requestUrl",

"params":"params"

"body":0,

"script":{

"consoleInfo":"helloWorld"

}

}

1. 接口地址,只能访问用例对象中最外层属性,使用方式**{{variableName}}**

2. Params**,使用方式和规则同地址**

3. Body**,使用方式和规则同地址**

4. Pre-request-Script& Tests**(下文均称前置脚本和后置脚本),data指向用例对象,想要获取对象的属性,通过****data.**属性名的方式获取,如下图:

环境变量

Postman****支持环境变量,其中可设置一些不同环境的变量,如域名,登录账号密码等。

环境变量也可以在脚本中使用,使用方式如下:

1. 接口地址,paramsbody中的使用方式同用例属性的调用方式,{{variableName}},如果出现变量冲突时,优先取用例中的属性,比如环境变量中设置了url=www.baidu.com,用例对象最外层属性中也有一个url=www.google.com属性,那么优先使用****www.google.com

2. 前置和后置脚本中使用环境变量会有所不同,可使用postman封装的方法**,**具体使用如下:

全局变量

Postman支持设置全局变量,顾名思义,全局变量在任何环境下均可以使用,这也就限制了其只能设置一些公用的变量。接口地址,paramsbody中对于全局变量的使用同环境变量,这里不再赘述;前置/后置脚本中的使用方式大体与环境变量相同,只不过postman****封装的方法名有差异:

**获取全局变量:**pm.globals.get(“variable_key”);

**设置全局变量:**pm.globals.set(“variable_key”,”variable_value”);

**清空环境变量:**pm.globals.unset(“variable_key”);

在此次自动化实战中,博主提炼了公用方法作为全局变量,比如获取时间戳,对比数据,处理cookie,查询数据字典等等,下图是获获取时间戳方法,getTime是方法名,右侧是方法体:

全局变量中的公用方法使用不同于变量,需要特殊处理;如果想要在脚本中使用获取时间戳方法,需要使用eval()方法引用,如同java中的import

注意:

1. 使用eval引用方法时,方法名后面不需要增加**(),而调用方法时需要增加()****;**

2. 环境变量中也可以设置方法,不过一般不这样使用,使用方式类似于全局变量,eval(environment.functionName)

3. 方法中可以调用其他方法,用法同12

脚本

前置脚本在调用接口前执行,一般对接口参数进行前置处理,如对入参进行赋值;后置脚本在接口调用后执行,一般对接口响应结果进行校验。对于环境变量、全局变量、json外部数据访问上文中已经涉及,此处不再赘述。

这两部分是postman支持脚本编写的部分,博主习惯使用JavaScript语言进行编写;而且postman列举了一些常用的方法,这里就不再对其一一介绍,主要介绍几个postman未列举,但是在后置脚本编写过程中很实用的点:

1. postman.setNextRequest()****:跳转

collection****中有多个接口,一条用例会涉及多个接口的调用,如果不加跳转语句,自动化运行时会默认执行下一个接口,会使用例执行流程不易控制,如果增加跳转语句后,跳转就会灵活,结束执行流程也变得更方便;

结束当前用例执行:postman.setNextRequest(null)

跳转执行另一个接口:postman.setNextRequest(“接口名称”)

2. return**:返回**

Tests脚本可看做一个方法的方法体,上图中的return也就意味着方法返回了,不再执行后续脚本

3. responseCode**:接口调用状态**

一般只需要使用其中的code(接口响应码),使用方式:responseCode.code,整个responseCode内容如下:

{
"name": "OK",
"detail": "Standard response for successful HTTP requests. The actual response will depend on the request method used. In a GET request, the response will contain an entity corresponding to the requested resource. In a POST request the response will contain an entity describing or containing the result of the action.",
"code": 200,
"standardName": "OK"
}

4. responseBody**:响应结果**

这里要注意的是,responseBody的值是字符串类型的响应结果,如接口返回应该是对象,则需要对responseBody进行转换(JSON.parse(responseBody))

5. request**:当前调用接口信息,内容如下:**

6. tests[“响应断言输出内容”] = true:响应断言,任何一个脚本都要有响应断言

等号后面可使用判断语句,如果是true,则断言通过,如果是false,断言失败。如判断tests[“接口调用成功,状态码为200”] = responseCode.code == 200,判断接口是否调用成功。

自动化测试

使用postman可以在本地进行单个collection进行自动化测试,collection runner窗口即可进行执行自动化脚本。

1. environment****可选择执行环境变量;

2. Iterations设置执行用例数,如果设置用例数少于json外部文件中的用例数,那么只执行设置的用例数;如果设置用例数多于json外部文件中的用例数,那么执行完全部用例后,会将最后一条用例重复执行,直到执行完设置的Iterations****次数为止。

3. Delay****设置执行间隔时间;

4. Data可选择外部json用例,这里注意文件中json****数据格式如果有问题会报错。

运行结果如下:

Newman

Newman 是 Postman 推出的一个 nodejs 库,直接来说就是 Postman 的json文件可以在命令行执行的插件。Newman 可以方便地运行和测试集合,并用之构造接口自动化测试和持续集成。

Newman的安装在这里不进行赘述,网上有很多安装教程。

因newman需要使用bat命令运行,自动化脚本量大,且编写命令形式不利于管理;为了解决这个问题,特开发newman可视化页面,可选择环境变量和全局变量,批量选择脚本,自动生成bat命令并执行,提高效率,降低使用难度。可视化页面如下图

Newman执行脚本,每套脚本会生成三种格式的报告(xml,json和html),可读性很差,为了解决这个问题,进行了如下研究:

1. 现过程中发现json文件大,读取效率低;

2. 通过查询资料,确定从newman安装文件中生成报告的js脚本下手(路径:C:\Users\账号 \AppData\Roaming\npm\node_modules\newman\lib\reporters\json),缩减json报告大小,只保留部分有用的内容

3. 生成excel格式的自动化报告

4. 邮件发送,通过nodejs脚本自动将处理后的报告,以邮件形式发送到干系人。

框架特点

按业务模块存放

此次实战主要针对web api,接口自动化冒烟测试从业务维度进行拆分collection,不仅测试单接口异常情况,也支持关联接口之间配合测试;

数据驱动模式

1. 自动化用例全部提取到外部json文件;

2. 同一个collection中,不存在相同接口;

3. 任何一个接口中入参或出参,都只有一个变量保存在用例中,后续接口维护后,仅需要更新用例,脚本无需再做修改;如入参或出参需要处理,则在前置脚本中进行处理;示例见下图,body中只传入一个变量值;

4. 预期结果保存在用例中,同一套脚本,适用不同的业务场景。

公用方法提炼

为了减少自动化脚本中的冗余脚本,提高脚本的编写效率,特提炼公用方法到全局变量中,不仅减少代码复杂度,提高脚本编写效率,也能够降低此套自动化框架的上手难度;公用方法的使用方式在postman介绍中已经描述,此处不再赘述。

多环境执行

在多套环境的基础上,基础数据的主键有所不同;面临越来越多的自动化脚本,维护的工作量不断加大。

为了减少这部分的工作,通过研究,确立数据字典模式:

1. 将环境下的数据字典维护到环境变量中

2. 自动化用例中需要使用基础数据主键的部分,增加变量标识

3. 编写公用方法,用来识别变量并在数据字典中匹配并替换成匹配结果。

优势:脚本和用例有且只有一套,适用于任何环境,进一步降低维护成本

劣势:用例的可读性降低,不能直观看出数据

实战中的坑

1. 如body中使用的变量需要是对象或数组,则需要将对象或数组通过JSON.stringify()转换成字符串后,赋值给变量才能成功调用接口;

Json外部用例格式,body参数要传入bodyInfo属性:

前置脚本处理:

Body中调用:

2. 前置或后置脚本中定义变量时,如果不写标识符,定义的变量可在其他接口执行时使用,但其生命周期仅限于本条用例执行完毕。

查询1中定义变量:

查询2中输出test的内容:

Collection runner运行后输出结果

3. 前置脚本中不支持接口间跳转:postman.setNextRequest();

4. Collection可增加前置脚本,后置脚本和变量定义;前置脚本和后置脚本,没调用一个接口后,均执行一次;

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

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

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

相关文章

Qgis2threejs

three.js是JavaScript编写的一个开源的3D图形库,它可以用于创建各种各样的交互式3D应用程序和动画。该库提供了一系列的工具和功能,使得在Web浏览器中创建高质量的3D图形变得更加容易。 使用three.js,您可以轻松地创建3D场景,包括…

GoogleNet

Introduction 得益于深度学习的优势和更强大的卷积神经网络的出现,图像分类和目标检测的准确率发生了令人意想不到的进步。在2014年的ILSVRC比赛中,GoogLeNet取得了第一名的成绩,所用模型参数不足AlexNet(2012年冠军)…

基于Java医院住院管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

记录使用gswin64.exe合并多个pdf为一个pdf

目录 下载gs920w64.exe 安装 配置相关信息 验证是否安装配置成功 合并多个pdf文件 下载gs920w64.exe https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/tag/gs920 ​ 安装 正常安装,记住自己的安装目录: ​ 配置相关信息 安装…

限流与令牌桶

一、概述 令牌桶是一种常用的流量控制技术。令牌桶本身没有丢弃和优先级策略。 原理 1.令牌以一定的速率放入桶中。 2.每个令牌允许源发送一定数量的比特。 3.发送一个包,流量调节器就要从桶中删除与包大小相等的令牌数。 4…

跟着《代码随想录刷题》(六)—— 二叉树

6.1 二叉树的前、中、后序遍历 144.、二叉树的前序遍历&#xff08;中左右&#xff09; LeetCode&#xff1a;114、二叉树的前序遍历 &#xff08;1&#xff09;递归法 class Solution { public:void traversal(TreeNode* cur, vector<int>& vec) {if (cur N…

eslint + prettier如何搭配使用

简介 eslintprettier写代码爽到飞起&#xff0c;既规范了代码的格式&#xff0c;同时也让你的代码美观易读。本文介绍如何在项目中使用eslint搭配prettier来规范你的代码 1.eslint 和 prettier区别 先来回答一个问题&#xff0c;eslint和prettier这二者有啥区别&#xff0c;es…

【后端面经-数据库】MySQL的事务隔离级别简介

【后端面经-数据库】MySQL的事务隔离级别简介 0. 事务的概念1. 三类问题2. 事务隔离级别3. 操作指令4. 总结5. 参考博文 0. 事务的概念 事务指的是一连串的集中操作指令&#xff0c;一个事务的执行必须执行完所有的动作才能算作执行结束。事务具有四个特点&#xff0c;简记作A…

表示学习(Representation Learning) Part2--Auto-Encoders、VAEs、GANs

文章目录 Compression:Auto-EncodersCapture parameter distribution (variance): Variational Auto-Encoders原理介绍数学推导生成数据diffusion modelsPros&Cons Train using a second network: GANs 来自Manolis Kellis教授&#xff08;MIT计算生物学主任&#xff09;的…

spark_idea

spark_idea 3、打jar包运行2、code1、pom_xml0、创建数据、模型、预测表0、Windows配置scala环境 3、打jar包运行 ./bin/spark-submit \--class spark02 \--master spark://hadoop102:7077 \--deploy-mode client \/home/gpb/scala_spark2.jar打jar包、存储到虚拟机中 编写执行…

什么是布隆过滤器?如何解决高并发缓存穿透问题?

日常开发中&#xff0c;大家经常使用缓存&#xff0c;但是你知道大型的互联网公司面对高并发流量&#xff0c;要注意缓存穿透问题吗!!! 本文会介绍布隆过滤器&#xff0c;空间换时间&#xff0c;以较低的内存空间、高效解决这个问题。 本篇文章的目录&#xff1a; 1、性能不…

IMX6ULL裸机篇之SPI实验-ICM20608代码实现

一. SPI 实验 SPI实验&#xff1a;学习如何使用 I.MX6U 的 SPI 接口来驱动 ICM-20608&#xff0c;读取 ICM-20608 的六轴数据。 本文学习 SPI通信实验中&#xff0c;涉及从设备的 SPI代码编写。 之前学习了 SPI 主控芯片代码的编写&#xff0c;如下所示&#xff1a; IMX6ULL…

【ROS】RViz使用详解

1、安装 1.1 ROS1-RVIZ RVIZ的ROS1各个ubuntu版本中的安装命令 ubuntu14.04&#xff1a; sudo apt install ros-indigo-rvizubuntu16.04&#xff1a; sudo apt install ros-kinetic-rvizubuntu18.04&#xff1a; sudo apt install ros-melodic-rvizubuntu20.04&#xff1a…

Java厘米级高精准定位系统源码(支持UWB、蓝牙、WIFI定位)

高精准定位系统支持10厘米工业级高精准定位&#xff0c;同时支持UWB&#xff0c;蓝牙&#xff0c;WIFI定位。 ♦高精准定位系统首页为数据统计页面&#xff0c;统计的信息可以分为数量统计、区域告警人数统计、工牌使用量的统计、区域报警率统计以及告警消息的展示。 系统首页…

Pytest教程__常用执行参数详解(3)

前面讲了测试用例的执行方式&#xff0c;也认识了 -v -s 这些参数&#xff0c;那么还有没有其它参数呢&#xff1f;答案肯定是有的&#xff0c;我们可以通过 pytest -h来查看所有可用参数。 从图中可以看出&#xff0c;pytest的参数有很多&#xff0c;但并不是每一个参数都需要…

fiddler高级工具栏中的statistics数据分析工具

Fiddler statistics 板块会统计一个请求开始发出到最终接收并转发的数据&#xff0c;统计和响应的一些信息&#xff1a; 可以使用statistics分页&#xff0c;完成简单的性能测试&#xff0c;查看其接口的响应时间 如图展示&#xff1a; 如图详细解释下每一项的含义&#xff…

grep(General Regular Expression Parser)命令

基本用法 本篇介绍非常有用的命令是grep&#xff0c;这个不寻常的名字代表的是通用正则表达式解析器&#xff08;General Regular Expression Parser&#xff0c;简写为grep&#xff09;。你使用find命令在系统中搜索文件&#xff0c;而使用grep命令在文件中搜索字符串。事实上…

磁盘坏道:sd 2:0:0:0: [sda] Sense Key : Medium Error [current] [descriptor]

现网问题 从log来看磁盘可能存在问题&#xff0c;进一步实锤。 问题定位 通过badblocks扫描磁盘&#xff0c;发现sda磁盘有磁道损坏&#xff0c;建议更换磁盘。 badblocks命令详解 Linux badblocks命令用于检查磁盘装置中损坏的区块,执行指令时须指定所要检查的磁盘装置&…

postman高级使用

概念&#xff1a;让程序代替人判断测试用例执行的结果是否符合预期的一个过程 特点&#xff1a; postman断言使用js编写&#xff0c;断言写在postman的tests中 tests脚本在发送请求之后执行&#xff0c;会把断言的结果最终在testresult中进行展示 常用的postman提供的断言片…

在Django项目中的各个应用中分别编写路由配置文件urls.py

目录 01-通过命令建立三个应用02-配置路由 /index/、/app1/index/、/app2/index/02-1-配置路由 /index/ 并将各个应用的urls.py文件包含进主路由目录中02-02-配置路由/app1/index/02-03-配置路由/app2/index/ 03-编写各个应用的视图views.py 文件04-注册模板文件所在目录05 创建…