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