1. 程式人生 > >jmeter怎麼做介面測試、概念及常用方法小結

jmeter怎麼做介面測試、概念及常用方法小結

1.介面的概念從IT的角度出發,主要是子模組或者子系統間互動並相互作用的部分。從形式上來看各種應用程式的API(最著名的Windows 系統的API),硬體的驅動程式,資料庫系統的訪問介面,再到後來的Webservice介面,http rest介面。雖然介面的形式各有不同,但是從測試角度來說,需要測試的內容大致是相同的,功能,效能,安全。   我們常說的api就是介面的意思,現在常用的web專案,app專案的介面都是基於http請求的,有些系統內部之間呼叫的介面一般不需要我們測試,這些很多是基於jar包那種型別的介面,只瞭解到這就差不多了。   介面型別常見的有get,post,put...型別。get型別的介面一般是指獲取資訊的介面,比如列表查詢的功能,點選查詢按鈕就呼叫一個get介面,然後把資訊返回出來。就是指把內容從伺服器拉下來。   post型別一般是提交表單的功能,比如註冊、上傳、釋出帖子之類的就是post介面。就是指把內容推到伺服器上去。   介面測試
的策略:介面測試屬於功能測試,也可以看做是需要了解部分程式碼的灰盒測試。測試流程是:1測試介面文件。2.根據介面文件編寫測試用例(用例編寫方法完全可以按照黑盒測試的用例編寫規則來編寫,如:邊界值、正交表等等設計方法)。3.執行測試,檢視介面返回的介面資料是否正確,主要檢查返回的介面是否和介面文件中定義的一樣,還有要檢查返回的資料是否和資料庫中的保持一致。   eg1.https://api.douban.com/v2/book/search?q='', 這是一個豆瓣的查詢書籍資訊的開放的api,是一個get型介面。q='',單引號裡就是查詢的引數,這裡給引數為《百年孤獨》,然後在瀏覽器中訪問下面地址:https://api.douban.com/v2/book/search?q='百年孤獨', 返回的就是介面資訊。返回資訊如下:
內容很多,是一個json字串。可以把所有東西複製下來,用線上解析的站點:json.cn這個網站中解析出來就很好看了。如圖: 右邊就是解析出來的格式,就是一個json字串中嵌套了一個名叫books的陣列。我們測試的時候就是根據介面文件,檢視返回的這些資料是否是我們預期,判斷這些資料是否是預期一般還需要了解專案的資料庫,然後根據條件查詢資料庫,看介面返回的資料和資料庫中查出來的是否一致。   eg2.get型的介面可以直接通過瀏覽器訪問,引數就帶在地址的後面以‘?’連線。但是post的就不行了,要用專門的工具來測試,常用的推薦jmeter和soapUI。
首先檢視介面文件:   根據介面文件可知,該介面實現一個更新使用者暱稱的功能,由此可以開始設計測試用例。userId和ickName均不為空,測試輸入型別,測試更新成功後再資料庫中是否同步更新。jemter中操作如下圖:
  圖一    圖二   第一張圖片的設定content-type為application/json是因為介面文件中要求如此。如果沒要求,可以不用新增HTTP資訊頭管理器。因為要求的是json格式的傳參,所以post的引數要在(圖二)body Data中以json格式書寫。   eg3複雜格式的post介面:實際專案中,經常會遇到上傳檔案,釋出圖片等介面,測這種介面時上傳的引數往往是一個檔案或者圖片,所以在jmeter中傳參就要用另一種方式。如下圖所示:   圖三   由圖三的介面文件檢視需要請求的引數,在定義介面文件時開發人員會給出該介面的請求格式是什麼,即content-type。此處為content-type:multipart/form-data。 這種格式的不用在HTTP資訊頭中單獨定義content-type。直接把引數放在Parameters中,要上傳的引數放在下面“通請求一起傳送檔案”裡面瀏覽上傳符合格式要求的檔案。   eg3.還有一些需要特殊處理得介面,比如一個增加積分的介面,由於業務需要,每次請求都要生成不同的簽名作為請求引數。這種介面可以用beanshell來處理生成簽名的邏輯,將生成的簽名定義成一個變數,然後在http請求中呼叫這個變數,如下圖,具體實現在《引數不斷變化的介面做效能測試》一文會提到。 之前工作中測效能時遇到一個介面,其引數之一是需要每次生成一個不重複的簽名,最後是用jmeter+java實現的,記錄一下:   前提:介面型別是post,實現功能是增加積分。由於功能的特殊性,肯定不能隨意增加積分,所以後臺製定了一套規則,每次增加積分都會要求生成一個不重複唯一的簽名。在測這個功能的效能時就需要模仿大量不同的使用者集中去增加積分,於是需要構造非常多的不重複的簽名去發起請求。   實現:利用後臺提供的生成簽名的jar包和演算法,用java程式碼實現生成簽名,返回到一個變數中。所用到的jar包要放在jmeter的安裝目錄的/lib/ext中    圖一    圖二    圖三   如圖3,在增加積分的這個http請求下新增前置處理器---》beanshellProprocessor。beanshell中寫入java程式碼,將返回的字串定義到變數json中,vars.put("json",jsonStr)。另外在beanshell中勾選中reset interpreter,表示在每次請求前重新執行beanshell中的程式碼; 在圖一中定義好json變數,方便後面http請求中去找這個變數。圖二中body data中引用這個變數就行了${json}。   接下來就是常規的設計測試場景,開始效能測試