[奇異果] 免斷言自動化測試工具 (如果 HTTP 外其他基礎工具全部服務化了,可以應用所有測試場景)

張毅發表於2020-05-31

有問題歡迎討論
heygeo@163.com

外掛地址:
https://plugins.jetbrains.com/plugin/14283-actinidia
文件地址:
https://github.com/Felixlovechina/actinidia/blob/master/READM.md

一、簡介

1、解決的問題

所有測試能力服務化後,通過http協議作為基礎,書寫所有的業務用例。
用例內容採用json作為輸入輸出。
用例結果採用json結構diff+過濾的方式進行斷言。
在這個情境下,用例管理需要一個方便的互動執行介面,此工具應運而生。
另外降低研發同學執行復現的成本。

2、為什麼使用idea外掛的形式

(1)idea是一個普遍使用的ide工具平臺。
(2)集團的程式碼檢查外掛等,在idea上有了極佳的實踐
(3)idea外掛市場有很高的下載量,方便更廣泛的推廣。如,之前釋出的一個非常簡單的小工具就達到了2w+的下載量,足見其傳播力還是很驚人的。
![]

二、外掛安裝

1、若採用本地安裝

2、idea市場安裝

開啟連結:https://plugins.jetbrains.com/plugin/14283-actinidia

3、樣例資料

見附件demo.zip

三、互動使用方法

1、視訊版本

見附件:actinidia.mp4

2、截圖版本

三、用例書寫要求

1、命令檔案

(1)檔名

為“{序號}-{命令}-{用例說明等}.json”;
第一個短橫線與第二個短橫線之間的“命令”為約定的單詞,如httpj、sql、poi等,用於觸發對應的解析器;
當前版本,暫時只開放httpj命令。

(2)內容

json格式,說明當前http請求的相關資訊,包括:

{
////http方法post或get,檔案可以加註釋,四個斜線開頭
"method": "post",
////操作日常環境資料庫:使用域名poi-test.amap.test
"url": "http://poi-test.amap.test/moc/command",
////header
"header":{
"cookie": "session=zhangyi"
}
////queryString引數,json格式,可以為空
"queryString": {
"command": "sql"
},
////body體,可以為字串,或者json
"body": {
"xxxx":"xxxx"
}
}
(3)變數引用

場景:
-場景1,呼叫“A命令檔案”返回json中有x變數,希望在呼叫“B命令檔案”的時候使用到;
-場景2,A/B/C/D/E/F命令檔案希望共用一個變數,希望統一提出來配置到一個地方;
方法:
-在“xxxJSON格式的檔案”中設定一個變數
-在需要引用的檔案中配置:“@檔名jsonpath@”
如:
@0000-caseId.json$.case_id@
其中,“0000-caseId.json”為檔名(目前僅支援當前目錄下),“$.case_id”為要引用的變數的jsonpath。
可以配置在命令檔案的任務位置,包括在字串中間。程式處理的時候,通過正則進行匹配替換。

2、結果檔案

每個命令檔案在執行後生成同名的".new.json/.old.json/.diff.json"檔案;

(1)".old.json"檔案

如果已經存在此檔案,不會生成,也不會被覆蓋;
此檔案用於儲存“命令”的執行結果的對比“基線”;
檔案可以手工提前配置;

(2)".new.json"檔案

每次命令被執行,都會生成此檔案,如果存在則覆蓋;
此檔案用於跟".old.json"進行對比

3、diff結果檔案

(1)內容來源

如果之前沒有“.old.json”檔案,會跑通過,因為對比使用的是最新生成的.old.json和.new.json檔案;
如果用自己的".old.json"檔案,或者之前跑時生成的“.old.json”檔案,兩份json檔案可能會有差異,差異會當作diff報出,寫入到".diff.json"檔案中。
其中,“filter”是一個陣列,每條都是一個diff,

(2)欄位含義

operation:新json相對於老json,發生的變化,取值為update、remove、add
path:新json相對於老json,發生變化的json路徑(目前不是標準jsonpath格式,僅供參考)
value:新json中的結果
oldValue:老json中的結果

(3)快速過濾掉符合預期的diff

如果(2)中的diff結果,即filter中的diff符合預期,比如是時時變化的時間戳等,可以將此filter陣列,copy到當前報錯的“命令”json根節點下即可,下次執行變會過濾掉,copy方法,如:

四、其他計劃

1、支援模板檔案建立
2、支援更多的報表輸出

五、其他測試工具推薦

六、技術要點

1、idea的外掛開發技術
2、其他ui
所有ui控制元件中難度最大的應該是jtree,是數模分離的一個比較複雜的外掛。
核心在於對DefaultTreeModel的擴充。
3、jsondiff的能力

相關文章