重磅出擊!介面測試利器,為解決你的煩惱而生

Cheryl是小仙女發表於2020-05-17

一個強大的工具,基於 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: #斷言成功儲存tokenuid資料
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 #獲取喜茶GoCanteenId
通過商品名字搜尋商品:
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
.......

  • 指令碼轉換
  • 使用git或者瀏覽器下載本專案,再用pycharm開啟。
  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啦

相關文章