基于 Postman 接口自动化场景设计

2023-10-27

一个强大的工具,基于 Postman 接口自动化场景设计

使用Xmind或者Yaml 设计 postman 自动化场景

引言

postman是一个比较轻量级的接口测试工具,在单个接口的测试表现优秀。在批量测试接口方面则提供了Runner Collections这种方式,虽然可以用来做流程测试,但在管理上不是很方便。例如:在postman建立一个collection作为接口文档,然后再建立另外一个collection作为场景测试,接着从接口文档的collection中挑选接口,并复制到场景测试的collection中,而且可能在不同的场景都共用同一个接口,这种方式是听不错的,只是当接口的版本升级之后,需要在场景中找出所有对应的接口进行修改,这样在管理上会比较麻烦。

概念

这个工具根据Xmind或Yaml所写的场景流程,从接口文档的collection中生成一个场景测试的collection,这样即使版本升级,只需要重新生成一次即可,相当方便,同时也提供了一些方便的设参方式和断言。

 

能做什么

  1. 管理方便 。只需要管理接口文档的collection和Xmind/Yaml脚本。
  2. 场景流程更直观 。在Xmind/Yaml上可以直观的看到整个流程,在细节上也可以看到每个接口的参数定义,以及断言内容。
  3. 代码编写简化 。在测试行业中,普遍都是代码能力比较差,虽然测试不需要特别强的代码编写能力,postman在Tests界面中也提供了一些快捷片段,但是还是不足够简化,而且也不全面,比如对请求的参数进行签名。
  4. 提供一些快捷的函数。postman提供的内置函数还是比较少的,比如随机生成32的UUID,md5,获取当前时间,获取前7天,前30天的日期,参数签名等等,这些都需要自己手动写代码。
  5. 无依赖性。本工具只是一个脚本转换成Postman的脚本工具,即使以后不用,完全可以自己维护Postman的脚本。 .......

先来看看效果图

 

如何上手

使用 pip 安装PostScene

pip install -U PostScene

 调用

from post_scene.post_scene import PostScene

yaml_path = './yaml/demo.yaml'  # 脚本文件的路径
xmind_path = './xmind/demo.xmind'  # 脚本文件的路径
api_document_path = './api_document/demo.postman_collection.json'  # postman json data 文件的路径
api_document_url = 'https://www.getpostman.com/collections/马赛克马赛克马赛克马赛克'  # 也可以使用Postman的share link


# PostScene.covert(yaml_path, api_document_path,scene_dirs='./scene')
# PostScene.covert(xmind_path, api_document_path,scene_dirs='./scene')
PostScene.covert(yaml_path, api_document_path,scene_dirs='./scene')

例子


  • 新建一个文件,名字叫什么不重要,但为了迭代开发的考虑,最好还是加上版本号。

demo-scenev1.0.yaml

  • 脚本编写
name: demo-scenev1.0                                         #collection 的名字
scene:
   name: 下单流程                                             #collection文件夹的名字
   scene:
     登陆:                                                   #API接口名称
       pre:                                                 #接口请求前脚本
         sign:                                              #参数签名
           secret: 1850e165f1fc19420f2ba3d3a1a5ffe4
         set:                                               #设置变量值
           userName: user
           password: user123
           time: ?times                                    #获取现在的时间
           onceToken: ?uuid32                              #生成32位的uuid
       tests:                                               #请求后脚本
         assert:                                            #请求后断言
           express:
             content: $json.data.code === '1'               #断言返回的json数据的code 是否等于1
             set:                                           #断言成功保存token和uid数据
               token: $json.data.token
               uid: $json.data.uid
     通过餐厅名字搜索餐厅:
       pre:
         sign:
           secret: 1850e165f1fc19420f2ba3d3a1a5ffe4
         set:
           canteenName: 喜茶
       tests:
         assert:
           expect:                                         #断言返回的canteenList的每一个对象的名称都包含喜茶
             content: $json.data.canteenList
             item: $it.name                                 
             include: 喜茶
             set:
               canteenId: ?find(json.data.canteenList, it.canteenName == '喜茶GO').canteenId  #获取喜茶Go的CanteenId
     通过商品名字搜索商品:
       pre:
         sign:
           secret: 1850e165f1fc19420f2ba3d3a1a5ffe4
         ref: canteenId
         set:
           goodsName: 奥利奥千层
       tests:
         assert:
           expect:
             content: $json.data.goodsList
             item: $item.name
             include: 奥利奥千层
             set:
               goodsId: ?find(json.data.goodsList, it.goodsName == '奥利奥千层').goodsId
     加入购物车:
       pre:
         sign:
           secret: 1850e165f1fc19420f2ba3d3a1a5ffe4
         ref: goodsId
         set:
           count: 1
       tests:
         assert:
           express:
             content: $json.code === '1'
             set:
               pocketId: $json.data.pocketId
.......

  • 脚本转换
  1. 使用git或者浏览器下载本项目,再用pycharm打开。

  2. 在Postman中选择你已经准备好的api文档collection 然后导出。这里导出为 demo.postman_collection.json

 

  1. 把导出的文档放入项目中的api_document 脚本放入xmind或yaml

 

4. 打开src文件中的Index.py 把xmind_path和api_document_path改成你的,右键 Run Index。

 

  1. 生成的场景文件放在src/scene文件夹中,使用postman的import 把他导入

 

6. 最后可以开始Run collection啦

 

如果你对Postman的Script很熟悉,那以下的内容对你来说绝对是无障碍的。不熟悉也没关系,只要照猫画虎,也能完成脚本的编写,设计这个初衷就是为了降低门槛。教程的讲解都是用yaml来讲解,因为用xmind讲解不是很方便,要截很多图。xmind的话,直接看demo.xmind就好啦。

学前须知 : 每一个测试用例都由两部分组成 pre(请求前) 和 tests(请求后) ,pre可以没有,但tests断言一定要有,不然没有意义。每一个测试用例的名称必须和文档中的collection的接口名称一致。这是规范。


最后,绵薄之力
感谢每一个认真阅读我文章的人,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于 Postman 接口自动化场景设计 的相关文章

随机推荐

  • Linux内核(5) - 内核学习的相关资源

    世界上最缺的不是金钱 而是资源 当我在一份报纸上看到这句大大标题时 我的第一反应是 作者一定是个自然环保主义者 然后我在羞愧得反省自身的同时油然生出一股对这样的无产主义理想者无比崇敬的情绪来 于是 我继续往下看 因此在XXX还未正式面市之时
  • sql之dml语句,语法和思路

    这些都是我自学时手打到文本文档 在复制粘贴到博客的 有一些命令格式不对 但全部百分百原创 如果有疑问或者不对的地方 欢迎评论区指正 也可以加q群592383030来探讨 我就是自学的普通人 不卖课 不涉及补习机构 我会出一整套mysql的学
  • OSS设置CORS规则以后还是报No 'Access-Control-Allow-Origin'解决方法

    OSS设置CORS规则以后还是报No Access Control Allow Origin 解决方法 在OSS控制台设置了CORS规则以后 通过JS程序去调用的时候报No Access Control Allow Origin heade
  • 合并两个数组为有序数组:

    合并两个数组为有序数组 思路 先合并再排序 数组的合并 利用 System arraycopy 方法实现数组复制 1 System中提供了一个native静态方法arraycopy 可以使用这个方法来实现数组复制 2 public stat
  • Anaconda打开Navigator报错-Navigator Error An unexpected error occurred on Navigator start-up

    问题如图 Windows下 1 使用管理员运行 conda prompt 2 执行命令 conda update anaconda navigator 3 还是不行就试试命令 anaconda navigator reset 来源 Navi
  • Opencv contours找出最大轮廓

    在处理二值图像时 常用 cv2 findContours 查找轮廓 如下所示 find all contours contours hierarchy cv2 findContours binary cv2 RETR TREE cv2 CH
  • vue前端缓存问题解决方案

    问题描述 大家用vue脚手架搭建前端工程时 常被缓存问题所困扰 具体的表现就是 当程序版本升级时 用户因为缓存访问的还是老的页面 然后很多同学很暴力的直接在index html中加入了这几行代码 升级时缓存问题倒解决了 但直接导致了用户每次
  • 用Eclipse创建第一个Spring项目(最最入门级)

    网上关于Spring的介绍资料已经数不胜数 但大多篇幅冗长 初学者不易理解记忆 这里先作一个简短的提炼 不作详细解释 主要内容是带大家创建一个Spring项目 感受一下这东西到底是什么样的 1 Spring Framework是用来干嘛的
  • 高效实现数据仓库的七个步骤

    高效实现数据仓库的七个步骤 数据仓库和我们常见的RDBMS系统有些亲缘关系 但它又有所不同 如 果你没有实施过数据仓库 那么从设定目标到给出设计 从创建数据结构到编写数据分析程序 再到面对挑剔的用户的评估 整个过程都会带给你一种与以往的项目
  • Hbase常用SQL命令

    这里写目录标题 Hbase常用SQL命令 1 启动hbase 2 进入hbase 3 hbase查看数据表 4 hbase建表语句 5 hbase禁用表 启用表 6 hbase添加单行数据 7 hbase文档添加数据 8 hbase扫描表
  • 分块矩阵求行列式

    分块矩阵求行列式 注意 第二个公式有误 将矩阵写为 P A B B A 那么det P det A det A BA 1B def A BA 1B a 1 1 A a b1 B a b2 a 0或a 1均可构造无穷多解 def A det
  • 基于Redis的原子操作优化秒杀逻辑

    对于缓存中间件Redis 相信各位小伙伴或多或少都有听说过 甚至实战过 本文我们将基于SpringBoot整合Redis中间件 并基于其优秀的 单线程 特性和原子操作实现一种 分布式锁 进而控制 高并发情况下多线程对于共享资源的访问 最终解
  • 递归法取硬币java_递归算法

    递归算法 在函数或子过程的内部 直接或者间接地调用自己的算法 特点 1 递归就是在过程或函数里调用自身 2 在使用递归策略时 必须有一个明确的递归结束条件 称为递归出口 3 递归算法解题通常显得很简洁 但递归算法解题的运行效率较低 所以一般
  • 线程池合理估算大小

    分配线程池究竟设置多大还是要看你的执行的任务 不要单方面看 线程任务分为Cpu密集型和IO密集型 混合型 主要看系统运行的任务是什么类型的 主要分为3种类型任务 CPU密集型和IO密集型 混合型任务 cpu密集型 一般分配N 1 什么是cp
  • Java 面试题(什么是分布式架构)

    Java 的分布式架构是指将应用程序分为不同的部分 这些部分可分别部署在不同的计算机上 它们相互之间通过网络进行通信和协作 从而共同完成某些任务 分布式应用程序通常需要满足以下几个特点 1 模块化 将应用程序模块化 将不同的功能放在独立的模
  • idea2022.2.2体验

    IntelliJ IDEA 2022 2 最新变化 IntelliJ IDEA 2022 2 为远程开发功能带来了多项质量改进 使其更美观 更稳定 从 v2022 2 开始 IntelliJ IDEA 使用 JetBrains Runtim
  • Java 构造方法与静态方法全解析

    构造方法 作用 一个类 可以有多个构造函数 构造函数的主要作用 一是用来实例化该类 二是 让该类实例化的时候执行哪些方法 初始化哪些属性 注意事项 如果你没写无参构造方法 系统会给你提供一个无参构造方法 如果只写了有参的构造方法 这时系统不
  • QT信号和槽参数传递

    写了一个这样的信号 void caculateReady QList
  • 异常检测专栏(三)传统的异常检测算法——上

    前言 在上一篇推文中 我们简要介绍了异常检测常用的几种数据集如ImageNet CIFAR10 CIFAR100 MNIST等 接下来 我们将基于传统的异常检测算法分为上 下两部分 逐一介绍不同类别的方法 本教程禁止转载 同时 本教程来自知
  • 基于 Postman 接口自动化场景设计

    一个强大的工具 基于 Postman 接口自动化场景设计 使用Xmind或者Yaml 设计 postman 自动化场景 引言 postman是一个比较轻量级的接口测试工具 在单个接口的测试表现优秀 在批量测试接口方面则提供了Runner C