淺談web介面測試
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
相關文章
- [原創]淺談Web UI自動化測試WebUI
- 淺談效能測試
- 淺談前端測試前端
- 淺談pytest+HttpRunner如何展開介面測試HTTP
- Web介面測試-HttpClientWebHTTPclient
- 淺談效能測試分析
- 淺談並行測試並行
- 淺談軟體測試
- Web介面測試工具--JmeterWebJMeter
- 淺談自動化測試
- JMH Benchmark 效能測試淺談
- 淺談ddos的測試方式
- 淺談前端單元測試前端
- [原創]淺談網際網路金融介面測試平臺搭建
- App測試、Web測試和介面測試一般測試流程APPWeb
- 效能測試工作流程淺談
- 淺談軟體測試規範
- 工具篇 | 淺談測試那些恩怨情仇
- AI演算法測試之淺談AI演算法
- [原創]淺談大資料測試大資料
- 淺談 Web 安全Web
- 淺談測試生涯如何轉型升級
- 淺談自動化測試框架開發框架
- 淺談.Net Core後端單元測試後端
- [原創]淺談移動App安全測試APP
- 淺談工作中的軟體測試
- 淺談Web快取Web快取
- JB測試之旅-淺談自動化知識
- 淺談移動網際網路App測試APP
- [原創]淺談測試環境管理方式
- 淺談自動化測試功能模組的分解
- 淺談JavaScript中的介面JavaScript
- 一文洞悉DAST、SAST、IAST ——Web應用安全測試技術對比淺談ASTWeb
- 介面測試測試流程
- 淺談 Web 影象優化Web優化
- 淺談php web安全 【轉】PHPWeb
- .NET專案開發—淺談面向介面程式設計、可測試性、單元測試、迭代重構(專案小結)程式設計
- jmeter介面測試教程以及介面測試流程JMeter