換個角度思考性能測試問題和學(xué)習(xí)性能測試實踐
性能測試對于大部分測試人員都是一個神秘地帶,因為在很多公司,性能測試都是由一個性能測試團隊來做,所以普通測試人員沒有機會接觸到真實的性能測試,因而很難學(xué)習(xí)到很多新的測試實踐知識。
市面上現(xiàn)在有非常多關(guān)于性能測試的書籍,其中不少書籍都能夠系統(tǒng)地介紹性能測試。今天我想通過另一種方式來介紹性能測試,那就是通過提出一些關(guān)于性能測試的問題,然后針對問題進行思考。希望通過不一樣的方式讓讀者以另外一種視角來思考和學(xué)習(xí)性能測試實踐。
1. 如何在敏捷開發(fā)中做性能測試?
敏捷開發(fā),由于其持續(xù)集成、快速反饋等特點,需要性能測試工具支持輕量化、集成CI服務(wù)器、全代碼化等特性,所以傳統(tǒng)的性能測試工具比如JMeter和LoadRunner等已經(jīng)很難適用于敏捷開發(fā)。在敏捷開發(fā)中,性能測試應(yīng)該需要具有以下特點:
(1) 性能測試是持續(xù)集成和持續(xù)發(fā)布的一部分,盡可能早的發(fā)現(xiàn)性能問題,從而降低修復(fù)成本。這樣可以使得很多性能問題在開發(fā)過程中被持續(xù)的盡快發(fā)現(xiàn)。建議將性能測試寫成故事放到每個迭代里面去,見下圖:
(2) 性能測試腳本易讀,易維護。比如代碼化的腳本Gatling,Locust等。下面是Gatling的DSL示例代碼:
(3) 可視化,報表易讀,每個人都能及時了解狀況 。下圖為Jenkins集成了一個Gatling插件后所展現(xiàn)的Gatling持續(xù)測試報表。
通過在敏捷開發(fā)中做持續(xù)的性能測試,使得性能測試也可以:小步快跑->快速反饋->持續(xù)改進->持續(xù)交付。
2. 如何通過數(shù)據(jù)分析更有效的做性能測試?
大部分情況下大型項目的性能測試需要的時間和人力都非常高,因為:
- 用戶并發(fā)要求高,測試硬件成本高
- 測試功能點多,測試量大
- 耐久性測試,測試時間長
其次是測試的有效性差,因為測試人員在測試環(huán)境中很難模擬真實用戶的操作,比如訪問的順序分布,訪問的強度分布以及用戶端的各種訪問參數(shù)。
為了解決這兩個問題,應(yīng)該通過用戶數(shù)據(jù)分析來獲得真實的用戶行為數(shù)據(jù),并用其來構(gòu)造性能測試用例,其中可以用下面這個漏斗模型來進行思考:
通過這個漏斗模型可以知道,為了快速得到真實有效的性能測試數(shù)據(jù)模型,需要通過篩選并整合真實的用戶數(shù)據(jù),而并不是靠測試人員在實驗室中想象出來的數(shù)據(jù)。
那如何進行用戶行為分析呢?下面嘗試用三個例子來進行說明。
***個例子是一個用戶注冊流程,通過用戶行為的數(shù)據(jù)分析可以得到每個功能點上用戶的訪問量。見下圖:
圖中展示了用戶注冊流程的6個步驟,分別是:
- Getting Started
- Account Information
- Personal Information
- Financial Information
- Review Information
- Thank You Page
其中***個步驟有18606次訪問,然后有71%的訪問用戶選擇繼續(xù),但是只有13131(70.6%)到達了第二個步驟。最終只有925(5%)的用戶完成了注冊。由此可以知道不同步驟的真實訪問比例,從而得到性能測試的數(shù)據(jù)模型和策略。
第二個例子是用戶使用的瀏覽器的數(shù)據(jù)統(tǒng)計,如果性能測試需要模擬不同的瀏覽器,那么這些數(shù)據(jù)分析結(jié)果也可以用以確定瀏覽器在性能測試中的權(quán)重。
通過這個統(tǒng)計表可以知道使用IE瀏覽器的用戶最多,所以在生成性能測試數(shù)據(jù)的時候應(yīng)該多生成一些基于IE瀏覽器的數(shù)據(jù),比如User-Agent等。
第三個例子是統(tǒng)計的用戶訪問地區(qū),對于有些大型的互聯(lián)網(wǎng)應(yīng)用是需要進行多地區(qū)模擬來測試不同地區(qū)互相訪問時的性能。這個數(shù)據(jù)統(tǒng)計結(jié)果可以幫助其設(shè)計更有效的這類性能測試用例。
通過這個統(tǒng)計表可以知道英國的用戶訪問量最多,而美國的訪問量第二。如果應(yīng)用服務(wù)器部署在美國,那么就應(yīng)該盡可能的在英國架設(shè)測試服務(wù)器,通過在英國的測試服務(wù)器來測試美國的應(yīng)用服務(wù)器,從而測試跨國網(wǎng)絡(luò)的性能,并且還需要在產(chǎn)品環(huán)境檢測英國到美國的網(wǎng)絡(luò)性能,從而及時發(fā)現(xiàn)性能問題。
通過對這些真實用戶數(shù)據(jù)的分析,可以設(shè)計更有效的性能測試模板,下面是一個性能測試模板的樣例,其中每個功能點上圓圈中的數(shù)字代表這個功能點在真實環(huán)境中的用戶訪問權(quán)重。權(quán)重越大的功能點在整個性能測試模板中應(yīng)該測試量更大,所花費的成本更高。
常見的Web系統(tǒng)用戶數(shù)據(jù)跟蹤與分析工具有:
- Adobe SiteCatalyst:功能強大,使用繁瑣,收費(貴)
- Google Analytics: 功能較強,使用方便,免費和收費
- 百度統(tǒng)計/騰訊分析:功能一般,免費
使用數(shù)據(jù)分析來生成數(shù)據(jù)模型的流程如下:收集數(shù)據(jù)->分析數(shù)據(jù)->生成測試數(shù)據(jù)模板->使用數(shù)據(jù)模板。
3. 對大規(guī)模集群系統(tǒng)做性能測試應(yīng)該注意什么?
通常中小型公司的IT系統(tǒng)都不使用大規(guī)模的集群,而只有大型公司才會大規(guī)模使用集群,導(dǎo)致很多測試人員沒有機會實踐和了解基于集群的性能測試。如果想學(xué)習(xí)基于集群的性能測試,除了常規(guī)的測試集群系統(tǒng)性能以外,還可以從以下幾個方面進行思考,從而學(xué)習(xí)基于集群系統(tǒng)的性能測試:
- 測試環(huán)境的真實性,由于大規(guī)模集群包含很多節(jié)點和服務(wù),所以搭建和產(chǎn)品環(huán)境一樣的測試環(huán)境的成本很高,導(dǎo)致測試環(huán)境的規(guī)模一般都比產(chǎn)品環(huán)境小很多。那測試這樣的測試環(huán)境還有什么意義?
- 一般集群都會使用負(fù)載均衡,但是由于存在多種負(fù)載均衡算法和配置,那么怎么才能保證負(fù)載均衡功能是按照設(shè)計和配置的進行工作?
- 除了對集群系統(tǒng)進行整體的性能測試外,還需要單獨對不同的服務(wù)和節(jié)點進行性能測試嗎?
所以針對集群系統(tǒng)做性能測試不僅僅能測試系統(tǒng)的性能,還可以解決以上三個問題:性能規(guī)劃,配置測試,隔離測試。
(1) 性能規(guī)劃
對于一個大型的服務(wù)器應(yīng)用系統(tǒng),一般情況下都是由規(guī)?;募航M建而成的。所以測試這類基于集群的服務(wù)器系統(tǒng)的時候,也需要將測試環(huán)境配置成和產(chǎn)品環(huán)境類似的集群系統(tǒng)。不過因為成本的原因,測試環(huán)境中的集群規(guī)模大都要小很多??梢酝ㄟ^測試小規(guī)模的集群,然后使用其測試結(jié)果,并通過數(shù)學(xué)建模推算產(chǎn)品環(huán)境的性能或者對產(chǎn)品環(huán)境進行性能規(guī)劃。由于每個集群系統(tǒng)擁有各自不同的架構(gòu),配置和服務(wù),所以其數(shù)學(xué)模型也是不同的。
(2) 配置測試
通過更改集群系統(tǒng)的各種配置,并在不同的配置下對集群系統(tǒng)進行性能測試,從而獲得***配置。比如輔助開發(fā)人員完成集群功能的開發(fā)與驗證,比如負(fù)載均衡算法,熱備等;以及輔助運維團隊配置和調(diào)試產(chǎn)品環(huán)境的集群配置等。
(3) 隔離測試
對于集群系統(tǒng)的服務(wù)或者節(jié)點,開發(fā)這些服務(wù)的團隊?wèi)?yīng)該在隔離(stub)第三方依賴的環(huán)境下,各自對自己團隊開發(fā)的服務(wù)進行獨立的性能測試。從而盡早發(fā)現(xiàn)性能問題,盡早修復(fù),避免在集群環(huán)境下發(fā)現(xiàn)同樣的問題,增加調(diào)試和時間成本。
大規(guī)模集群系統(tǒng)基本都是復(fù)雜架構(gòu),環(huán)境也都是較為復(fù)雜的組織結(jié)構(gòu),而只有深入理解整個業(yè)務(wù)流程,系統(tǒng)架構(gòu)以及環(huán)境結(jié)構(gòu)才能有效地設(shè)計測試方案。
4. 性能測試中的測試數(shù)據(jù)有幾種類型?
測試數(shù)據(jù)一直是軟件測試中的一個頭疼的問題,特別是在性能測試中測試數(shù)據(jù)尤為重要,因為越真實的數(shù)據(jù)越能獲得更好的結(jié)果。對于測試數(shù)據(jù)的類型可以分為以下四種:單一型,隨機型,模板型,真實型。
(1) 單一型
它是通過錄制或者觀察,使用一個或者一類單一的測試數(shù)據(jù)來進行性能測試。這種數(shù)據(jù)的構(gòu)建簡單,但是數(shù)據(jù)過于單一,無法模擬真實用戶。由于其數(shù)據(jù)構(gòu)建簡單,所以可以用于敏捷開發(fā)中的早期性能測試。
(2) 隨機型
它是通過一些簡單的數(shù)據(jù)規(guī)則,并結(jié)合隨機算法生成的測試數(shù)據(jù)。這種數(shù)據(jù)和單一型比較,雖然增加了隨機性,但是仍然缺乏真實性,并且其構(gòu)建成本和性能問題的分析成本也相對較高。它可以用于上線前的大規(guī)模的多樣化的綜合性能測試。
(3) 模板型
它主要是通過數(shù)據(jù)分析并生成模板來構(gòu)建測試數(shù)據(jù)。雖然它較隨機型在一定程度上增加了用戶真實性,但是準(zhǔn)備數(shù)據(jù)的成本很高。在項目成本和資源允許范圍內(nèi),可以結(jié)合模板型和隨機型的方法,從而更為有效的進行性能測試。
(4) 真實型
它是通過直接導(dǎo)出或者重定向產(chǎn)品數(shù)據(jù)來做性能測試數(shù)據(jù)。它完全是真實的用戶數(shù)據(jù),構(gòu)建成本較低,但是存在數(shù)據(jù)安全性的問題,比如數(shù)據(jù)泄露。在數(shù)據(jù)安全性可以得到有效保護的情況下是可以使用真實型數(shù)據(jù)來進行性能測試。
測試數(shù)據(jù)生成和管理對于一個大型項目的性能測試是十分重要的,所以如何高效的生成有效的測試數(shù)據(jù)成為了首要的任務(wù)。通過這四種測試數(shù)據(jù)類型,可以快速的判斷在項目當(dāng)前階段適合使用那種類型的數(shù)據(jù),從而避免一些彎路。
5. 其他問題
除了以上問題和思考,我還準(zhǔn)備了一些其他的基本問題給讀者自己去思考,從而通過思考問題來學(xué)習(xí)性能測試。
- 性能測試主要包含哪些類型以及分別的作用是什么?
- 前臺頁面的性能測試應(yīng)該注意哪些問題?
- 對于并發(fā)用戶很少但是穩(wěn)定性要求很高的系統(tǒng)需不需要做性能測試?為什么?
- 對于后臺有大量異步批處理需求的系統(tǒng)應(yīng)該怎樣進行性能測試?
- Profiling是不是性能測試?什么時候應(yīng)該做它?
- 常見的性能測試工具有哪些?怎么選擇性能測試工具?
- 如果測試環(huán)境和產(chǎn)品環(huán)境的硬件配置不同,如何通過測試環(huán)境的測試結(jié)果評估產(chǎn)品環(huán)境的性能?
- 在設(shè)計性能測試用例時需不需要考慮Think Time?
- 中小型項目的性能測試都需要注意些什么?
- 性能需求的來源有哪些?
- 如何使用云服務(wù)進行超大規(guī)模性能測試?
【本文是51CTO專欄作者“ThoughtWorks”的原創(chuàng)稿件,微信公眾號:思特沃克,轉(zhuǎn)載請聯(lián)系原作者】