Postman实战总结

简介

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

l  背景介绍

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

l  可视化Newman介绍

l  框架特色

l  实战中的坑

背景

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

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

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

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

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

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

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

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=,用例对象最外层属性中也有一个url=属性,那么优先使用

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

全局变量

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

获取全局变量:(“variable_key”);

设置全局变量:(“variable_key”,”variable_value”);

清空环境变量:(“variable_key”);

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

 

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

 

注意:

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

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

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

脚本

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

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

1. ():跳转

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

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

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

2.  return:返回

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

3.  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进行转换((responseBody))

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

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

等号后面可使用判断语句,如果是true,则断言通过,如果是false,断言失败。如判断tests[“接口调用成功,状态码为200”] = == 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外部用例格式,body参数要传入bodyInfo属性:

前置脚本处理:

Body中调用:

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

查询1中定义变量:

查询2中输出test的内容:

Collection runner运行后输出结果

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

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

postman python request_postman自动化实战总结相关推荐

  1. python 自动化-Python API 自动化实战详解(纯代码)

    主要讲如何在公司利用Python 搞API自动化. 1.分层设计思路 dataPool :数据池层,里面有我们需要的各种数据,包括一些公共数据等 config :基础配置 tools : 工具层 co ...

  2. python ui自动化配置文件,python UI自动化实战记录八:添加配置

    添加配置文件写入测试地址等,当环境切换时只需修改配置文件即可. 1 在项目目录下添加文件 config.ini 写入: [Domain] domain = http://test.domain.cn ...

  3. Curl+Postman+Python,自动化构造测试数据

    背景: 测试的时候经常会遇到一个耗时的问题,那就是准备测试数据,比如某个场景,需要准备100条数据,如果我们提供手动的去创建,耗时不说,而且也没有技术含量,所以给大家安利一个创建测试数据的办法,可以快 ...

  4. php selenium模拟登陆,python+selenium自动化实战携带cookies模拟登陆微博

    首先获取cookies,使用手机扫码登录斗鱼,然后利用网页cookies保存在本地 有些同学可能会问,这不是相当于自己登录了吗,还模拟什么呢,其实来说这是一次获取cookies可以使用很久 #!/us ...

  5. 一个 Python 报表自动化实战案例

    本篇文章将带你了解报表自动化的流程,并教你用Python实现工作中的一个报表自动化实战,篇幅较长,建议先收藏,文章具体的目录为: 1.Excel的基本组成 2.一份报表自动化的流程 3.报表自动化实战 ...

  6. python接口自动化实战(框架)_python接口自动化框架实战

    python接口测试的原理,就不解释了,百度一大堆. 先看目录,可能这个框架比较简单,但是麻雀虽小五脏俱全. 各个文件夹下的文件如下: 一.理清思路 我这个自动化框架要实现什么 1.从excel里面提 ...

  7. 对比Excel,轻松学习 Python 报表自动化实战!

    来自小z 欢迎关注 ,专注Python.数据分析.数据挖掘.好玩工具! 这篇文章将带你了解报表自动化的流程,并教你用 Python 实现工作中的一个报表自动化实战,篇幅较长,建议先收藏,喜欢点赞支持, ...

  8. 对比Excel,学习Python报表自动化实战

    本篇目录: Excel的基本组成 一份报表自动化的流程 报表自动化实战 将不同的文件进行合并 Excel的基本组成 下图是Excel的中各个部分的组成关系,我们工作中每天会处理很多Excel文件,一个 ...

  9. python接口自动化实战(框架)

    python接口测试的原理,就不解释了,百度一大堆. 先看目录,可能这个框架比较简单,但是麻雀虽小五脏俱全. 各个文件夹下的文件如下: 一.理清思路 我这个自动化框架要实现什么 1.从excel里面提 ...

最新文章

  1. Linux查看进程的线程信息
  2. 一致性算法 - Raft
  3. 智慧交通day02-车流量检测实现06:目标估计模型-卡尔曼滤波
  4. python xml.dom模块解析xml
  5. DeepMind开源了强化学习库“松露”,团队自身也严重依赖它
  6. python upd接收数据+动态折线图+线程间通信+字节计算
  7. 三位数的水仙花数有哪些?
  8. SQLserver管道的另一端无任何进程
  9. H3BPM实例分享——金额规则大写
  10. python画venn图
  11. 自比毕加索,揭秘神秘的“苹果大学”
  12. 趣商宝微信招生方案 ,线上招生难,十大绝招帮您搞定微信吸粉!
  13. 华硕x580nv拆机_华硕x580nv拆机_做工扎实用料足 华硕S56超极本拆解图
  14. linux磁盘阵列教程,RAID 磁盘阵列简述
  15. 32岁的程序员被裁,java宿舍管理系统源码jsp
  16. 计算机硬件评分,用于电脑硬件性能参考的Win8.1系统体验评分找回方法
  17. MailRaider Pro for Mac(Outlook邮件格式转换工具) v3.5.0永久激活
  18. Keil MDK 又更新了啥子嘛?
  19. 时序数据库与传统数据库的优势
  20. Uniapp离线打包使用高德地图教程及常见问题

热门文章

  1. R语言Logistic回归模型案例基于AER包的affair数据分析
  2. 深度学习时间序列预测:GRU算法构建多变量时间序列预测模型+代码实战
  3. 什么是奇异值?奇异值分解是什么?SVD分解详解及实战
  4. html辅助方法引入验证类后怎么写,Html辅助方法
  5. php bc函数库,PHP高精确度运算BC函数库实例详解
  6. Eclipse JDBC SQLServer2008 R2
  7. 详解编辑距离(Edit Distance)及其代码实现
  8. linux POSIX 信号集,读书笔记:第10章 Posix信号量 (6)
  9. 统计学习导论 Chapter2--What Is Statistical Learning?
  10. 批量修改文件夹下图片名称(Python)