淺談web介面測試

icesword發表於2018-05-11

1.(web)介面的本質是什麼?

在談介面測試之前,想先問一下,介面是什麼?

很多人可能使用過postman一類的工具,填上url和訪問方法等等,然後工具會訪問這個url並把返回值呈現給你,那麼,是否這個url就是“介面”?

答案是,不一定。

(web)介面的本質,其實就是部署在伺服器上的程式。

訪問url,這個url可能只是一個靜態資源,那麼我認為不能算是介面,介面是有一定屬性的、協商過的滿足一定協議的服務,類似於www.baidu.com/pic/1.jpg這種靜態檔案的url,其實只是讓你訪問,但沒有任何的處理。(但是並不是說靜態資源就不用測了,是兩回事,靜態檔案的url不能算介面, 但是cdn統一向外提供靜態資源的服務可以算介面,圖片的名稱可以算傳入的引數)

介面是開發預先定義好的程式,是web服務的子集,介面名其實就是程式名,當你(可能還帶著引數)訪問這個程式名的時候,程式就會按照預定的流程進行處理;這個程式可能會處理sql可能不會,可能會把資料做處理也可能只是簡單返回一個ok,這不重要,重要的是,他一定是一段具有邏輯的程式。

2.如何進行(web)介面測試?

如果把問題從如何進行(web)介面測試,等價的換為,如何對一個程式進行測試,那麼我想,對大家而言會輕鬆很多,因為一直以來,我們都在做這樣的測試。

如何對一個程式如何進行測試?

很簡單,先分類,首先是基本的功能邏輯驗證,然後可能還會有安全性測試,程式健壯性測試,效能測試等等。

具體來說,我建議按照以下的順序循序漸進的完善我們的介面用例case。

首先,做到迴歸可用,也就是說,將介面組合,串起一整條業務線,這個時候每個介面的引數可能是固定的,但是跑起來已經可以覆蓋基礎業務場景;

其次,完善介面測試的業務邏輯,達到業務邏輯的全覆蓋,這個時候可能每個介面會有不同的入參以實現不同的業務場景(舉例而言,金牌的業務場景和普通認證的就有不同)

然後,在該基礎上,查驗是否已經實現了介面文件所有的入參型別和返回值型別,如果沒有實現,那麼加上,最終實現對文件內引數的覆蓋;

最後,有針對性的對介面增加邊界值,異常值,安全測試資料等等非文件內的引數進行補充測試。

3.介面從哪兒來?

如果有介面文件,肯定是看文件最好了,但是一個文件應該要包含介面的所有資訊(所有可能的入參包含是否必選,所有可能的返回值,返回值型別),目前而言,可能還不夠能作為參考;

如果沒有文件或者文件缺失嚴重,可以自己根據業務流程抓包(fiddler)。

4.介面測試的工具

自己寫的話,可以用py+request庫,結合測試框架比如testng等等進行設計;此外現成的工具比較著名的還有soapui,test studio for apis,以及我們今天要說的jmeter。

5.使用jmeter訪問一個介面

jmeter的安裝我就不說了,官網直接下載就行,需要說明的是,最新的jmeter3.2需要java8的支援。

首先我們需要在測試計劃裡新建一個執行緒組,所有的訪問都會在該執行緒組下進行;

以我司登入介面舉例,線上程組內,增加一個http取樣器並填寫好我們要訪問的地址(xxxxx.xxxx.com),協議(https),方法(POST),路徑(/passport/api/auth/app-login);

開始跑,發現已經跑完了,但是並不知道跑的結果;

要知道結果,我們需要新增一個監聽器(聚合報告&檢視結果樹),

發現返回的是沒登入的資訊,這時候我們加上post引數,userName,password,tenantCode,

檢視返回值,發現登入成功了,那麼我們現在把引數改一下,把密碼改為錯誤的密碼。

檢視結果,發現對於jmeter來說,這個訪問依然算成功的,那麼如何讓正確的登入和錯誤的登入有區別呢?

我們需要增加斷言,也就是,判斷標準。

在取樣器後加上斷言。

現在我們斷言登入正確的情況。

然後切回錯誤的密碼,可以看到這時候jmeter已經算他是失敗的了。

這樣我們一個基本的訪問-斷言-檢視報告的流程就形成了。

但是具體到業務場景,我們可能會遇到一些問題。

6.jmeter裡的引數化

舉個最簡單的例子,我們很多介面都是有依賴的或者頻繁用到某個引數,比如說,登入賬號,那麼如果哪天登入的賬號出問題了,難道要一個介面一個介面改嗎?

當然不是,我們可以對登入賬戶進行引數化。

這裡先介紹一下量級比較少的話,我們可以用使用者自定義的變數,右鍵新增一個配置元件,使用者自定義的變數,在這裡我們可以自定義變數名和變數值,使用${}的語法進行引用。

如果量級比較大,我們可以把資料放到excel裡,然後使用csv data set config,同樣式右鍵新增一個配置元件,這個暫時不細說了,有興趣的可以百度或者之後直接問我。

7.jmeter裡的取參傳參

我們的可能會遇到很多情況是,一個介面,需要用到上一個介面裡返回的引數,這時候,我們需要用到提取器來進行引數提取,此外,有登入依賴的介面,可以使用http cookies管理器,如果你登入成功了,會自動替你管理cookies。

在取樣器右鍵選擇後置處理器-正規表示式提取器,進行引數的提取。

8.jmeter裡獲取資料庫的資料

我們有可能會遇到需要校驗或者使用資料庫裡的引數,比如說,驗證碼登入,我們就需要去資料庫裡查詢驗證碼,這時候需要用到jdbc connection configuration,線上程組下右鍵-新增-配置元件-選擇jdbc connection configuration

9.把jmeter放進持續整合

首先我們需要安裝一個ant,然後把jmeter extras目錄下的ant-jmeter-1.1.1.jar這個包扔到ant的lib目錄,再把jmeter下的build.xml修改一下,這時候就可以用ant啟動jmeter,並把測試報告轉化為html了。
然後配置一下jenkins,使用ant外掛構建build.xml就可以了
這個比較麻煩,所以不單獨寫了,附上我之前參考的文件:
Jmeter+Ant+Jenkins搭建持續整合的介面測試框架https://my.oschina.net/hellotest/blog/516079


相關文章