最近我在一個論壇上看到了一個關於效能測試和介面測試的經典問題,問題如下:
問題:後端效能測試,一個功能其實都是由後臺多個介面組成的。
例如一個單據的儲存,可能後臺需要呼叫幾個介面。用LR錄製這個功能做效能測試。和把它這個功能呼叫的幾個介面連線起來一起做介面效能測試有什麼區別呢?
相信很多開始測試自動化的測試同學的入門都是從一些培訓班或者網上課程開始的。很多培訓在講授介面測試或者效能測試的時候往往是拿LoadRunner或者jmeter去演示測試過程的。通常的課程安排一般先拿LoadRunner(或者jmeter)講介面測試,然後繼續使用LoadRunner(或者jmeter)去講效能測試。
無論是介面測試還是效能測試,貌似老溼們講的步驟好像都差不多,先錄製介面,然後配置場景,然後執行測試場景,給人感覺好像沒啥差別。感覺好暈。。那到底兩者差別在哪裡呢?我們從入門者的角度來談談差別吧!
這裡我準備從三個部分去闡述兩者的關聯和區別:
1. 至關重要的觀念:測試與工具的關係。
2. 介面測試和效能測試的側重點。
3. 在實際場景中二者的配置區別。
首先我們要正試一個理念,LoadRunner和Jmeter只是一個工具,而培訓班大力推崇的都是工具培訓,容易讓我們落入一種XXX就是效能測試的趕腳,其實不然(差別蠻多,後面會單獨去寫文章分享),效能測試包含了工具(LoadRunner和Jmeter),工具僅僅是扮演了效能測試中的一個執行環節而已。
我們可以拿LoadRunner(Jmeter)做介面測試,當然也可以拿到做效能測試。所以工具是什麼不重要,關鍵在於我們怎麼去使用它,例如下面一個生活中的例子:鐵鍬。我們可以拿鐵鍬來剷土,也可以用鐵鍬來炒大鍋飯,是不是就像LoadRunner既能做介面測試,又能做效能測試一樣?
挖土的鐵鍬
炒飯的鐵鍬
梳理清楚了第一個概念:工具和測試沒有完全對等的關係後,我們來說第二個,效能測試和介面測試的區別。
測試分很多種,如果細細羅列,從單測,介面,功能,效能,UI,至少有五層,那其實區分這些測試型別的關鍵點就在於測試的側重點不一樣,介面測試是針對後端開發的介面(不一定是http的,也有可能是tcp的),而效能測試是偏重於產品的各方面各階段效能(介面的效能,頁面的效能,app的效能),可以說效能測試的覆蓋度比介面更大一些。那我們就拿http型別的介面測試和效能測試舉例,有啥側重點區別呢?
簡單來說,它倆區別就在於效能測試有多使用者(併發)的概念,而介面測試只是單使用者場景。我們做介面測試是是用於驗證介面的請求和返回是否匹配(其實可以理解成介面測試也是一種功能測試);而效能測試則是很多人同時在做這種介面測試,更側重於真實的使用者場景。因為我們研發完的產品投入市場後,不會就專門給某一個人使用功能,肯定是會有很多人同時在用我們的產品功能。那在這裡,很多人同時在用其實就是效能的一個關鍵點。
所以總結第二點:效能測試近乎等同於很多使用者同時在做介面測試。
第三部分,也是回答本文最初丟擲的問題,在實際的應用過程中,二者是否存在什麼聯絡與區別?
我們就簡單地拿LR做介面測試和效能測試的過程為例吧,拿LR執行測試對於大多數人來說就三步:錄製介面(或者介面抓包),配置場景,執行測試場景。
錄製介面這一步是沒有區別的,因為我們剛才講到過,效能測試其實也是一種特殊的介面測試。那配置場景這一步有區別嗎?可能很多人也說沒有區別,但其實是有的,我們舉例幾個區別。如果是效能測試,首先要配置多使用者(或者說多執行緒),而介面測試不用;其次如果是效能測試,建議關掉斷言(否則可能壓不上去,因為斷言會耗費LR或者Jmeter自身的效能);最後如果是效能測試,如果壓測不上去,還可能需要做分散式(簡單來說,就是多臺機器同時執行效能測試)。
那第三步:執行測試場景的時候有什麼區別嗎?剛才說到,介面測試一般是用斷言來驗證介面的正確性,那效能測試怎麼去驗證呢?在執行效能測試場景的時候,我們拋棄斷言,要加入另外的校驗方式:
1. 最基本的三個:多使用者下介面的響應時間,qps/tps(每秒請求量),出錯率。
2.伺服器上的資源監控(cpu,記憶體,io)。
3.被測服務的資源監控(多個服務的cpu,記憶體,io)以及錯誤日誌。
以上三點都是衡量效能測試的標準,也是當執行效能測試場景出問題時候,用於定位問題的重要證據,所以我們可以知道,當介面測試出了問題,我們可以通過斷言迅速知道出了問題;而效能測試出了問題,需要從多個方面多個維度去除錯定位,效能測試對於系統架構的理解能力要求更高!
以上就是我從入門角度,對介面測試和效能測試的區別的一些知識分享,希望對一些即將入門或者剛入門的你有幫助!有任何疑問請直接在文末留言,你的留言是對我原創最大的鼓勵,謝謝!