一个强大的工具,基于 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 的脚本。 .......

项目地址: 码云

项目地址: github

先来看看效果图

如何上手

使用 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. 在 Postman 中选择你已经准备好的 api 文档 collection 然后导出。这里导出为 demo.postman_collection.json

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

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

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

  1. 最后可以开始 Run collection 啦


↙↙↙阅读原文可查看相关链接,并与作者交流