JMeter有一個很強大的功能就是可以用來做接口測試。
接口測試是測試系統組件間接口的一種測試。接口測試主要用於檢測外部系統與系統之間以及內部各個子系統之間的交互點。測試的重點是要檢查數據的交換,傳遞和控制管理過程,以及系統間的相互邏輯依賴關系等。
我們從接口測試中涉及到的一些基礎知識講起。
Java狹義接口與API的區別是什么?
首先我想解釋一下接口,因為原來這里讓我傻傻搞不懂。Java里的Interface是接口,API也是接口,但是在接口測試中我們測試的是哪一種?他們有沒有什么區別?其實,他們是有區別的。
我去找尋了一下我認為寫得比較好的標准解釋:
Java接口是狹義的接口,是借由Interface 定義的結構,接口中只對方法做定義,不做實現。具體實現由最終實現接口的類提供。Java 是強類型的語言, interface 作為一種類型,可以用於聲明變量,以接口類型聲明的變量,我們只關心它實現了接口聲明的方法,並不關心實際上引用的是哪個類的對象。編碼完成之后,通過傳入接口的不同實現類的對象,從而在不改變調用方代碼的情況向下改變程序的功能,實現多態。
而API(Application Programming Interface,應用程序編程接口):是應用程序和模塊之間相互溝通的方式。提供某些功能的應用程序或者模塊為了與其它程序相互溝通,對外公開了某些功能的調用方式方法,這一套方式方法就是 API 。
通俗的說,就是前者是編程語言中使用的,沒有具體實現的抽象的定義,后者其實是一個已經包含了邏輯的可執行的程序,供外部使用的。
而我們在接口測試中測試的對象就是所謂的API。
那什么是Token呢?
在我看來,Token就是類似暗號,令牌的一個東西,它是一個很長的一段無序的用來驗證身份的字符串。在測試接口的時候,接口文檔中首先會給出一個獲取Token的地址,這往往是一個get請求,需要獲取相應的密鑰傳入get請求的url中,這個get請求的響應數據中就包含Token,並且每次獲取到的token是不相同的,讓我們看看他到底是什么東西。
整個Token包括tokenType和value。tokenType是一個固定為bearer的數據,value是一個無序字符串。
注意:tokenType固定是‘bearer’,但是並不代表世界上每一個Token的tokenType都是這個值。這是因為每個人采取的Token生成算法不同,其實有其他的Token生成算法,本章末尾給出Token其他算法的連接。
GET/POST請求的區別深度分析,區別真的那么簡單嗎?
GET/POST的請求的差別我想每個學計算機的同學都知道,但是大家一般都只知道GET請求把參數包含在URL中,POST通過Request body傳遞參數。但是我們這里是深度分析,怎么能說這種答案呢?
GET/POST請求有一個重大區別:GET產生一個TCP數據包,POST產生兩個TCP數據包。具體的這里不做講述,文章末會給一個很有趣的文章連接。
那么怎么利用JMeter去測試請求參數中有帶有token的post請求呢?
正是因為value在每次獲取的時候都是一個無序的字符串,而Token這個是一個隨時變化的變量,並且這個變量即將做為將要測試的接口的請求參數,怎么辦呢?
因此,我們需要實時記錄token的值,將其設置為變量給Token取變量名(比如A,B等等,方便調用),實時的傳入POST接口的參數中。
怎么實時獲取變量參數呢?
我們需要用到正則表達式提取器或者josn提取器(因為返回的josn數據),也許還有其它方法。我這里用的是Josn Extractor,類似這樣。
正則表達式與josn數據的提取規則這里不做講述,可以百度學習一下。
但是,Token的值寫在POST請求的什么位置呢?Request body中嗎?不,Token屬於POST請求的頭信息,是需要在HTTP請求下添加頭信息管理器的,類似這樣。
而Debug Sampler 可以配合察看結果樹這個監聽器,可以很直觀的判斷Token的提取成功與否。(也可以沒有)
至於POST請求的請求參數則寫在Body Data里面(是Josn數據),類似這樣。
Josn數據的格式我想也不必多說。大概流程就是這樣,有疑問的朋友歡迎留言。