輕量級API測試工具Pandaria

背景

最近參與了一個項目,團隊有自動化測試訴求,但是測試人員沒有編程能力,開發人員也沒有精力幫忙,探索了已有的自動化測試工具,滿足不了團隊需求后,決定自己造個輪子。

  • Postman

Postman是一個不需要編碼能力,且十分方便的自動化測試工具,由于項目中很多測試的驗證點需要驗證數據庫里面數據的正確性,如果用Postman的話需要為測試創建一些沒有必要的HTTP API。很遺憾, 這個輪子不滿足我們的要求。

  • Rest-assured

我們探索的第二個工具是Rest-assured. 雖然他對API測試相關操作封裝了很簡潔美觀的DSL, 由于其直接是Java代碼,像數據庫校驗什么的毫無困難。但是要編寫基于Rest-assured的自動化測試,還得有一定的編碼基礎,很遺憾,這個輪子我們用不來。

  • Cucumber

Cucumber支持自然語言形式編寫自動化測試,自然語言調用的是代碼,如果對cucumber做了足夠好的封裝,編寫測試的人不需要編寫代碼也能寫自動化測試。那就需要做足夠通用的封裝,所以Pandaria就是基于cucumber jvm封裝的HTTP(S) API自動化測試的DSL。Cucumber本身功能非常實用,使用pandaria依然能夠直接使用cucumber jvm的所有功能。

Pandaria

在測試團隊缺乏編碼能力,以及需要驗證數據庫的需求背景下,我們嘗試著基于cucumber做封裝,使不會寫代碼的測試人員也能編寫自動化測試。之后我們很驚訝的發現這種方式非常有效,所以將這個工具分享出來,希望能對有相同訴求的團隊有所幫助。

測試HTTP API

  Scenario: simple get
    * uri: /users/me
    * send: GET
    * status: 200
    * verify: '$.username'='jakim'
    * verify: '$.age'=18

使用pandaria寫API自動化測試,就像上面這樣,只需要使用抽象好的關鍵字,描述發送請求的過程,以及編寫你的驗證條件即可。

上述代碼解讀: 往相對路徑uri為/users/me的地址發送GET請求,并驗證返回狀態為200,且返回體里面json path為$.username的值為'jakim',json path $.age處的值為18。

驗證數據庫

* query:
"""
SELECT NAME, AGE FROM USERS
"""
* verify: '$[0].name'='jakim'
* verify: '$[0].age'=18

或者

* query: select.sql
* verify: '$[0].name'='jakim'
* verify: '$[0].age'=18

select.sql

SELECT NAME, AGE FROM USERS

測試人員只用寫SQL就能像校驗json一樣校驗數據庫內容。上述代碼會使用SQL語句SELECT NAME, AGE FROM USERS到數據庫中查詢,并驗證返回結果的第1行的nameage屬性。

準備測試數據可以直接執行SQL文件:

* execute sql: prepare_users.sql
* execute sql:
"""
insert into users(name) values('test');
"""

等待功能

自動化測試經常需要等待一件事情完成,特別是異步操作時,這時候通常的做法是等待一定的時間,驗證結果,如果不通過,則重試一定的次數,直到驗證成功,或者超過最大次數失敗。使用Pandaria可以這么寫:

* wait: 1000ms times: 3
* uri: /sequence
* send: GET
* response body:
"""
3
"""

上述代碼會往/sequence發請求,并驗證返回消息體是否等于3,如果等于則繼續往下執行,如果失敗則等待1000ms,然后重試,如果重試超過最大3次,則測試失敗。

也可以等待數據庫中數據滿足某個條件

* wait: 1000ms times: 3
* query: select.sql
* verify: '$[0].name'='jakim'
* verify: '$[0].age'=18

變量

很多時候restful api的uri的路徑中包含數據庫自增長的ID, 其可能是一個異步操作生成,導致我們不能直接從API返回結果中拿到,只能從數據庫中根據測試數據的條件查找,并在后續API測試中使用,使用pandaria我們可以這么寫:

* query:
"""
select id from users where name='test-user-name';
"""
* var: 'auto_generated_id'<-'$[0].id'

* uri: /users/${auto_generated_id}
* send: GET
* verify: '$.id'=${auto_generated_id}
* verify: '$.name'='test-user-name'

上述代碼首先從數據庫查出自增長的id,然后使用<-操作符將結果中的id定義為名為auto_generated_id的變量,并在后續的操作中使用這個變量。

總結

Pandaria目前還在持續開發中,我們發現其已經能對我們團隊帶來切實的效率提升,故借此機會分享出來,希望能幫助到類似的團隊。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,321評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,559評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,442評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,835評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,581評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,922評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,096評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,639評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,374評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,591評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,789評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,196評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,524評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,322評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,554評論 2 379

推薦閱讀更多精彩內容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網絡請求組件 FMDB本地數據庫組件 SD...
    陽明AGI閱讀 16,003評論 3 119
  • 1∥ 晚上,正在電腦前敲字,只聽“啪嗒”一聲,電腦屏幕一下黑了。 “咝——”我倒吸了一口涼氣,尼瑪我還沒有存盤呢?...
    打折的楊過閱讀 1,131評論 2 1
  • 今天是6月7日,又一年的高考開始了。到中午下班打開各報紙的公眾號,發布了今天的廣東高考新聞,全是關于高考題目...
    JudyMiss朱閱讀 259評論 0 1
  • 去愛一個遠方的人 愛她在日暮黃昏中拉長的倩影 以從未愛過的決絕 奔赴生命里注定壯烈的犧牲 你依然要做一個晴朗的微笑...
    晚樹閱讀 763評論 7 8