Jmeter接口自動化實踐一--如何開始做

初識jmeter是在半年前,這半年也做了不少東西是時候來個總結了。

爲什麼要做接口自動化?

1.版本迭代後,如何保證老的接口依然正常使用,通過對接口進行可用性測試,可快速對其進行驗證,但這也只是確認接口可用。

2.如何保證老接口可用,並且接口的業務功能正確?當然最簡單的辦法便是對所有可自動化的接口,進行自動化用例的編寫。

3.如何避免手工接口測試時的遺漏,以及接口文檔前後不一致的情況(實際工作中遇到不少)。通過接口的自動化測試提前設定好,不僅可以保證接口測試的穩定性,還可以節省不少時間,提升測試效率。有閒的時間喝喝茶不好嗎?哈哈

那何爲自動化?又如何去做呢?自動化用例設計又該遵循什麼原則?

我的原則是首先評估可做自動化的接口,然後按模塊進行劃分。最重要的原則是:你編寫的用例,在每次自動化執行時,用例的穩定性。這點是說每次自動化執行腳本後,不會對下一次執行腳本產生影響。

現在開始啦!

業務背景說明:這是一款直播軟件,其中有一個功能模塊名叫部落,部落中有一個神祕商店,只有加入部落的人才能夠看到此商店,我們要測試的接口就是神祕商店列表。

此接口的接口文檔:

請求url:

/tribe/queryShopList

請求方式:

POST

參數:

tribeId  必傳,long,部落id

返回示例:

{
  "code": 1000,
  "msg": "成功",
  "data": {
    "refreshNum": 8,
    "amountId": 1,
    "refreshAmount": "50",
    "shopList": [
      {
        "id": 446,
        "goodsId": 60,
        "goodsName": "魔法掃帚",
        "goodsNum": 1,
        "goodsType": 2,
        "goodsPrice": 5000,
        "goodsURL": "https://cdn-live.maopp.cn/live/gift/33.png",
        "backgroundColor": "#F9FAFC",
        "goodsStatus": 0,
        "unlockType": 0,
        "unlockValue": 1,
        "unlockDesc": "",
        "various": 1
      },
      {
        "id": 447,
        "goodsId": 116,
        "goodsName": "白龍碎片",
        "goodsNum": 1,
        "goodsType": 2,
        "goodsPrice": 800,
        "goodsURL": "https://cdn-live.maopp.cn/live/tribe/shop/[email protected]",
        "backgroundColor": "#F9FAFC",
        "goodsStatus": 0,
        "unlockType": 0,
        "unlockValue": 2,
        "unlockDesc": "",
        "various": 1
      },
      {
        "id": 448,
        "goodsId": 6,
        "goodsName": "別克碎片",
        "goodsNum": 3,
        "goodsType": 2,
        "goodsPrice": 90,
        "goodsURL": "https://cdn-live.maopp.cn/live/tribe/shop/[email protected]",
        "backgroundColor": "#F9FAFC",
        "goodsStatus": 0,
        "unlockType": 0,
        "unlockValue": 3,
        "unlockDesc": "",
        "various": 3
      },
      {
        "id": 449,
        "goodsId": 125,
        "goodsName": "幻夜靈騎碎片",
        "goodsNum": 1,
        "goodsType": 2,
        "goodsPrice": 800,
        "goodsURL": "https://cdn-live.maopp.cn/live/tribe/shop/[email protected]",
        "backgroundColor": "#E4EFFF",
        "goodsStatus": -1,
        "unlockType": 0,
        "unlockValue": 4,
        "unlockDesc": "Lv1部落可解鎖",
        "various": 1
      },
      {
        "id": 450,
        "goodsId": 63,
        "goodsName": "復活天使",
        "goodsNum": 1,
        "goodsType": 2,
        "goodsPrice": 5000,
        "goodsURL": "https://cdn-live.maopp.cn/live/gift/497.png",
        "backgroundColor": "#F9FAFC",
        "goodsStatus": -1,
        "unlockType": 0,
        "unlockValue": 5,
        "unlockDesc": "Lv2部落可解鎖",
        "various": 1
      },
      {
        "id": 451,
        "goodsId": 3,
        "goodsName": "奔馳",
        "goodsNum": 7,
        "goodsType": 2,
        "goodsPrice": 5000,
        "goodsURL": "https://cdn-live.maopp.cn/live/car/benz.png",
        "backgroundColor": "#F9FAFC",
        "goodsStatus": -1,
        "unlockType": 0,
        "unlockValue": 6,
        "unlockDesc": "Lv3部落可解鎖",
        "various": 7
      }
    ]
  }
}

錯誤碼說明:

71000:部落不存在

71002:用戶不在該部落

71038:商店初始化失敗

如何對此接口進行自動化呢?

1.巧用邏輯控制器中的簡單控制器作爲文件夾,命名規則自主定義

2.根據接口功能列出需要測試的用例

3.對列出的測試用例添加前置條件,斷言結果,後置掃尾完成自動化

如第一條case,對未加入部落的用戶,訪問神祕商店列表進行驗證,在這裏我們傳入的tribeId是已存在的部落Id,用戶userid則是未加入任何部落的用戶。

那這個tribeId怎麼獲得呢?

當然我們可以直接從mysql裏的表裏找一個tribeId填進去,但是這樣一個固定的值很容易受到影響,一旦該tribeId發生改變,那麼結果將有可能與預期不一致,這樣的用例是不穩定的。

要想讓這個tribeId變得穩定起來,我們最穩妥的方法有兩種:一種是新建一個部落,另外一個便是從數據中查詢一個現有存在的部落id。

如果採用第一種新建部落的方法,那麼我們的後置必然還需將此部落解散,涉及到後置,我們先採用最簡單的從數據庫查詢的方法。

1)首先在配置元件添加一個數據庫連接配置,網上教程非常多,這裏不詳細說明。值得注意的是需要下載一個mysql的驅動包放在jmeter的lib目錄下。

2)添加一個jdbc的請求,輸入sql語句,查詢有效的部落id,將它賦值給tid

3)通過tid獲得部落id

這時可以通過添加debug sampler 來查看下tid 的數據 tid_#代表一共查詢出多少條數據。tid_1,tide_2等等就是取出來的部落id

4)將取得的部落id,作爲部落列表的傳參

5)加一個斷言

到此爲止,就是部落列表的一個完整用例。

 

 


 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章