1. 程式人生 > >Jmeter進行http介面測試(對原文補充)

Jmeter進行http介面測試(對原文補充)

原文參考 http://blog.csdn.net/wt081216/article/details/51306201 

一、測試需求描述

  1本次測試的介面為http服務端介面

  2介面的主要分成兩類,一類提供給查詢功能介面,一類提供儲存資料功能介面,這裡我們舉例2個儲存資料的介面,因為這兩個介面有關聯性,比較有代表性;

  3、介面描述:

儲存信用卡賬戶資訊介面

傳入引數:

args={

           "clientNo":"434343556",

           "alias": "**信用卡2",

           "cardName": "長城*****2",

            "cardNo":"25622356788251",

           }

傳出引數:

儲存成功:{"returnCode":"0","returnMsg":"儲存成功"}

儲存失敗:{"returnCode":"1","returnMsg":"儲存失敗"}

儲存邏輯:資料傳入進來,驗證通過,儲存到信用卡賬戶表中

儲存信用卡賬單介面:

傳入引數:

               args={

                   "clientNo":"434343556",

                   "accountName": "測試",

                   "billDate": "08",

                   "billMonth": "201509",

                    "cardNo":"25622356788251",

                   "currentPayment": "欠款459.80",

                   "paymentDate": "2015-09-2509:00:00", 

                   }

傳出引數:

儲存成功:{"returnCode":"0","returnMsg":"儲存成功"}

儲存失敗:{"returnCode":"1","returnMsg":"儲存失敗"}

儲存邏輯:儲存時先去信用卡資訊表檢視clientNo對應的表是否存在,如存在則資料校驗通過,

將資料儲存進入信用卡賬單表

:這個儲存邏輯在介面開發設計文件中可能沒有寫或寫的不詳細,這時要與開發介面人員或產品人員多多溝通去熟悉介面邏輯

二、測試分析

    1邏輯分析

     1)、從儲存邏輯上來看,這兩個介面明顯是有依賴關係的,所以我們先測試信用卡賬戶資訊介面,再測試儲存信用卡賬單介面

        2)、介面傳入的資料,最終是儲存到資料庫中,所以當介面返回儲存成功的時候,我們也要去對應的資料庫表中核對相應的資料(這裡可以用jmeter連結資料庫進行操作代理手工)

       3)、當出現儲存失敗的情況時,我們需要檢視系統的日誌,所以我們也要準備好檢視日誌的許可權和地址

    2、測試工具的準備

       1)、單個介面測試,我們使用火狐的外掛poster

       2)、多個介面測試,我們使用Jmeter進行測試

三、使用工具測試

    1Poster工具的使用方法見

    2、使用Jmeter對介面測試

首先我們說一下為什麼用Poster測試後我們還要用Jmeter做介面測試,在用poster測試時候會發現的是一個介面一個介面的測試,我們每次測試成功後的資料,在工具中是無法儲存的,再次測試的時候我們還要重新輸入測試的資料,當我們測試一個介面的時候可能感覺不明顯,但是當你測試幾十個介面的時候,你就會發現使用Jmeter的好處,如果按測試階段來說冒煙測試我們用poster,整合測試我們用Jmeter。

四、使用Jmeter介面測試

        1、首先郵件新增一個執行緒組,這裡我們重新命名InterfaceTest   

        


    2、線上程組上新增一個Http預設請求,並配置伺服器的IP地址和傳輸編碼

        


        3、線上程組中新增一個HTTP請求,這裡我們重新命名增加信用卡賬戶資訊介面

     

        4、配置介面請求資訊,這配置示例如下:


對於Parameters的配置模式如下(GETPOST請求都可用這種模式,如args為名稱、Json資料為值),如下樣例:


以上是URL編碼過的資料,如果是沒有URL編碼過的JSON,需要勾選編碼:

Json編碼前最後做下格式壓縮(去掉空格和換行符),對於URL編碼和解碼工具參見:http://tool.chinaz.com/tools/urlencode.aspx

 

說明:至於為什麼Parameters傳值要URL編碼,那是因為本質上用的是javamaplists物件,最後傳送請求時全轉換成&連線引數的URL請求。

        5,在儲存信用卡賬單介面請求,示例如下:


:由於Jmeter請求執行緒組內的請求時從第一個開始執行,所以我們將需要最先執行的請求放在前面

        6、線上程組上新增監聽器,察看結果樹和聚合報告


        7、點選啟動,執行結束後檢視,結果樹和聚合報告




        8、去資料庫中核對資料

        9、大批量資料製造

思路:

        1)、可引數化的引數,儲存信用卡賬戶資訊介面(clientNo,cardNo),儲存信用卡賬單介面(clientNo,cardNo,billMonthpaymentDate

        2)、兩個介面的依賴關係,儲存信用卡賬單介面(clientNo,cardNo)要和信用卡賬戶資訊介面(clientNo,cardNo)的兩個相同,也就是說這兩個要用一個引數,且還不能重複

根據上面兩個特點,(clientNo,cardNo)我們選取使用計數器,每迴圈一次計數器加1,那麼我們將執行緒組設定迴圈執行1萬次;billMonthpaymentDate,這兩個日期我們是使用隨機函式${__Random(1,9,)},將月份引數化;

        3)、線上程組上建立計數器,配置如下:



        4)、引用計數器和隨機函式

信用卡賬戶介面傳入引數

        args={

                  "clientNo":"${add}434343556",

                   "alias": "**信用卡2",

                   "cardName": "長城*****2",

                    "cardNo":"${add}25622356788251",

                   }

賬單介面傳入引數

        args={

                  "clientNo":"${add}434343556",

                   "accountName": "測試",

                   "billDate": "08",

                   "billMonth":"20150${__Random(1,9,)}",

                    "cardNo":"${add}25622356788251",

                   "currentPayment": "欠款459.80",

                   "paymentDate":"2015-0${__Random(1,9,)}-25 09:00:00", 

                   }

5)、設定執行緒組迴圈測試,點選執行,檢視執行結果,再去資料庫看看,大批量資料就這樣產生了