怎樣才能測試WEB系統(tǒng)支持多少用戶
1 怎樣的性能測試結(jié)果才是有效的
1.1 錯誤觀點
性能測試工具運行一定用戶數(shù)都成功,則表示該服務(wù)器能支持這么多用戶數(shù)。這是錯誤的。
解答:
A. 因為一次有效的測試結(jié)果,不只用戶都運行成功,同時需要保證訪問一個頁面或一次交易的響應(yīng)時間在合理范圍。“2-5-8原則”,簡單說,就是當用戶訪問一個頁面或一次交易能夠在2秒以內(nèi)得到響應(yīng)時,會感覺系統(tǒng)的響應(yīng)很快;當用戶在2-5秒之間得到響應(yīng)時,會感覺系統(tǒng)的響應(yīng)速度還可以;當用戶在5-8秒以內(nèi)得到響應(yīng)時,會感覺系統(tǒng)的響應(yīng)速度很慢,但是還可以接受;而當用戶在超過8秒后仍然無法得到響應(yīng)時,會感覺系統(tǒng)糟透了,或者認為 系統(tǒng)已經(jīng)失去響應(yīng),而選擇離開這個Web站點,或者發(fā)起第二次請求。
B. 測試場景不一定模擬了真實業(yè)務(wù)場景,因為瀏覽器是并發(fā)多線程多TCP完成一個頁面的,而測試工具基本都是1,2個線程;對服務(wù)器的壓力是不一樣的,真實環(huán)境的TCP壓力是性能測試工具虛擬環(huán)境的幾倍。
2 影響WEB服務(wù)器性能指標的因素有哪些
為什么性能測試工具,需要提供事務(wù)(頁面或交易、全腳本)指標、TCP連接、吞吐量、服務(wù)器資源監(jiān)控、請求數(shù)/響應(yīng)數(shù)。
- 硬件資源:如CPU、內(nèi)存、網(wǎng)卡吞吐量、I/O能力、SWAP交換能力
- 線程數(shù):這里介紹JAVA的WEB服務(wù)器,默認每線程占用的內(nèi)存為2M,而32為系統(tǒng)JAVA進程(如tomcat、JBoss)占得空間只有2G(一般比這個?。?,因此線程數(shù)有限制;64為無限制線程,但CPU要跟得上
- TCP連接數(shù):操作系統(tǒng)的TCP連接數(shù)理論值一般很大,操作系統(tǒng)對TCP連接設(shè)置有默認值(怎么配置,可以網(wǎng)上搜索,這里不介紹);但實際測試中TCP連接在幾百,就出現(xiàn)測試的響應(yīng)時間很長。抓包分析,原來是三次握手的SYN包服務(wù)器不及時響應(yīng),導(dǎo)致SYN重傳(3秒后,9秒后)。
- 如果SYN丟了,則會重發(fā),但是第一次是3秒后,第2次是在9秒后,如果重發(fā)才收到的SYN_ACK,則導(dǎo)致TCP連接超長,從而導(dǎo)致業(yè)務(wù)響應(yīng)時間延長。
- 響應(yīng)時間:服務(wù)器響應(yīng)時間小,用戶體驗才好,在大量用戶并發(fā)的情況下,HTTP響應(yīng)時間在用戶忍受度下才是有效的,一般采用“2-5-8原則”。
- 軟件本身代碼性能算法:這個不做介紹,如差的算法、查詢數(shù)據(jù)庫時間長等等。
3 測試人員經(jīng)常遇到的一些常見問題及解答
3.1為什么使用瀏覽器訪問頁面響應(yīng)很快,1-2秒就完成;而使用測試工具卻需要10幾秒,甚至幾十秒才完成腳本
解答:
A. 這是由于瀏覽器訪問頁面響應(yīng)是并發(fā)的,同時并發(fā)多個線程(多個Socket),而性能測試工具基本是串行發(fā)送請求的。如果一個頁面有100個資源(CSS、HTML、JS、圖片),需要發(fā)送100個HTTP請求,如果使用6個線程(瀏覽器),則每個大概請求14個HTTP;如果使用一個線程(測試工具),則需要請求100個,時間當然大很多。下圖為chrome瀏覽器調(diào)試工具顯示的并發(fā)情況
B. 另外瀏覽器具有緩存功能,如果之前訪問了www.qq.com,會把一些圖片緩存在瀏覽器臨時目錄,下次請求時發(fā)送的HTTP請求會帶上If-Match或Etag等頭域,WEB服務(wù)器判斷資源沒改變則會304響應(yīng),而不是回200 OK,這樣減少資源的傳輸,所以時間就小。而有些測試工具是不攜帶這些頭域(包括Loadrunner),因此回的響應(yīng)是200 OK。所以測試人員默認真實測試時,可以考慮部分有緩存,部分沒緩存。
3.2性能測試工具是怎么模擬WEB虛擬用戶
A. 錄制
使用瀏覽器進行正常業(yè)務(wù)操作,性能測試工具錄制下HTTP請求信息。一般需要記錄URL與頭域、內(nèi)容、響應(yīng)碼。雖然不同的性能測試工具錄制方式不一樣(如loadrunner采用Hook,JMeter采用代理或badbody,kylinPET采用網(wǎng)卡抓包與代理),但都能實現(xiàn)錄制正常業(yè)務(wù)的 HTTP請求。
測試工具最好能錄制出緩存頭域,即If-Match或Etag,loadrunner好像不支持錄制緩存頭域。
B.模擬用戶
根據(jù)錄制的腳本發(fā)送HTTP請求與接收響應(yīng),發(fā)送前替換參數(shù)(實現(xiàn)多用戶不同參數(shù)值)、接收時關(guān)聯(lián)參數(shù)(從接收的響應(yīng)消息獲取參數(shù)值,如Cookie、JSessionID)
下面簡單列舉使用過的性能測試工具是如何模擬的(工具運行一個用戶,然后使用wireshark抓包分析得到的結(jié)論):
- Loadrunner:根據(jù)錄制腳本發(fā)送HTTP請求,如果HTTP請求包括內(nèi)嵌資源(如圖片、CSS、JS),會啟動第二個線程執(zhí)行內(nèi)嵌資源,即Loadrunner支持同時兩個線程兩個TCP連接。
- kylinPET(國產(chǎn)):可通過配置設(shè)置一個線程或者多個線程并發(fā)發(fā)送HTTP請求,多個線程并發(fā)及TCP連接數(shù)跟瀏覽器行為一樣。
- JMeter:只有一個線程,一個TCP連接
- 其他工具:本人沒用過,請用過的兄弟姐妹可以補充下。通過wireshark抓包分析。
3.3怎樣才能測試出WEB服務(wù)器能支持多少真實用戶,怎樣的服務(wù)器調(diào)優(yōu)參數(shù)才合理
解答:
這需要性能測試工具可以模擬出真實用戶的行為,包括HTTP請求數(shù)、每用戶并發(fā)線程與TCP連接數(shù)、思考時間、有無緩存。
為什么需要模擬真實用戶的線程數(shù)與TCP連接數(shù)呢,上面提到過,WEB服務(wù)器的線程數(shù)與TCP連接數(shù)往往很低,這不是提高硬件就能輕松解決的,這也是服務(wù)器調(diào)優(yōu)比較復(fù)雜的配置。
因此,只有盡最大能力模擬真實用戶(瀏覽器或其它WEB客戶端,可能不同瀏覽器的并發(fā)線程與TCP數(shù)都不一樣)的行為的測試場景,測試結(jié)果才最真實,服務(wù)器調(diào)優(yōu)才最有意義。
4 怎樣才能測試系統(tǒng)支持多少用戶
4.1 模擬真實用戶的行為
只有模擬用戶一樣的行為才可以系統(tǒng)支持的測試用戶數(shù)有效,因此需要模擬一樣的并發(fā)數(shù)、TCP連接數(shù)、甚至可以是HTTP請求的時間間隔。用戶可以是瀏覽器、智能手機、智能機頂盒,測試工具模擬他們一樣的行為才是最有效的測試。
4.2 測試結(jié)果數(shù)據(jù)在合理范圍
4.2.1 用戶統(tǒng)計
成功數(shù)、失敗數(shù)、每秒在線數(shù)、最大在線數(shù),通過這些指標分析此次測試結(jié)果支持的用戶數(shù)、用戶最大數(shù)
4.2.2 點擊率
每秒平均HTTP請求數(shù)、響應(yīng)數(shù)。分析系統(tǒng)的處理能力
4.2.3 事務(wù)
事務(wù)成功、失敗、時間,事務(wù)一般是整個腳本運行時間、或者一個頁面或一個交易,通過結(jié)果分析,得出每個事物的時間是否合理,符合“2-5-8”原則,如果測試結(jié)果顯示事物時間非常大,則表示系統(tǒng)支持不了此次測試的用戶,因為用戶的響應(yīng)時間太大(像火車訂票一樣,太多用戶導(dǎo)致響應(yīng)時間長,用戶無法忍受,則認為這個系統(tǒng)爛)。
當然,還需要查看事務(wù)的百分比,分析90%、80%、70%、60%的事務(wù)時間是否在合理范圍。
4.2.4 TCP連接信息
TCP連接成功數(shù)、失敗數(shù)、TCP三次握手時間。因為此次測試結(jié)果可能是由于服務(wù)器系統(tǒng)或網(wǎng)絡(luò)的TCP的丟包與重傳才導(dǎo)致延時大的。如果是服務(wù)器的原因,服務(wù)器收到TCP的SYN而不處理,可以通過調(diào)試服務(wù)器的TCP配置來優(yōu)化。
怎么才知道是服務(wù)器的問題呢,這個需要性能測試工具能給出TCP連接時間(當前了解只有kylinPET可以支持),如果顯示超過3秒,這時需要檢查是網(wǎng)絡(luò)還是服務(wù)器問題,可以在服務(wù)器端抓包(tcpdump或wireshark)然后分析TCP的SYN信息(個數(shù)、時間)
4.2.5 資源占用
服務(wù)器的CPU、內(nèi)存、帶寬、I/O是不是已經(jīng)不足,導(dǎo)致系統(tǒng)上不去是哪個原因,根據(jù)原因進行調(diào)優(yōu)或升級。
測試時需要考慮性能測試工具的CPU占用率,如果性能測試工具占用CPU很高,此次測試可能瓶頸是在工具,而導(dǎo)致測試結(jié)果是無效的。