使用 Xmind 或者 Yaml 设计 postman 自动化场景
postman 是一个比较轻量级的接口测试工具,在单个接口的测试表现优秀。在批量测试接口方面则提供了 Runner Collections 这种方式,虽然可以用来做流程测试,但在管理上不是很方便。例如:在 postman 建立一个 collection 作为接口文档,然后再建立另外一个 collection 作为场景测试,接着从接口文档的 collection 中挑选接口,并复制到场景测试的 collection 中,而且可能在不同的场景都共用同一个接口,这种方式是听不错的,只是当接口的版本升级之后,需要在场景中找出所有对应的接口进行修改,这样在管理上会比较麻烦。
这个工具根据 Xmind 或 Yaml 所写的场景流程,从接口文档的 collection 中生成一个场景测试的 collection,这样即使版本升级,只需要重新生成一次即可,相当方便,同时也提供了一些方便的设参方式和断言。
使用 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
.......