聽了破冰的分享后种吸,對性能測試有了初步的了解,今天補(bǔ)了下空白區(qū)域
性能測試概述
一提到性能測試呀非,就會涉及到另外兩個(gè)密切相關(guān)的概念——壓力測試骨稿、負(fù)載測試。這三者有密切的關(guān)系姜钳,又有區(qū)別坦冠。三者的測試目的是不一樣的,但使用的手段和方法在一定程度哥桥,通常會使用相同的測試環(huán)境和測試工具辙浑,而且都會監(jiān)控系統(tǒng)所占用資源的情況以及其他相應(yīng)的性能指標(biāo),這也造成了很多人容易產(chǎn)生概念混淆的主要原因拟糕。
性能測試是為了獲得系統(tǒng)在某種特定條件下(包括特定的負(fù)載條件下)的性能指標(biāo)數(shù)據(jù)判呕,致力于提供系統(tǒng)性能指標(biāo)方面的數(shù)據(jù)。對加載有非常嚴(yán)格送滞、明確的要求侠草,而且事先所定義的性能指標(biāo)也很明確。
如果系統(tǒng)性能測試的實(shí)際結(jié)果不符合指標(biāo)要求犁嗅,那么就需要進(jìn)一步分析边涕、優(yōu)化,最終使系統(tǒng)的性能指標(biāo)達(dá)到要求褂微。
而負(fù)載測試功蜓、壓力測試是為了發(fā)現(xiàn)軟件系統(tǒng)中所存在的問題,包括性能瓶頸宠蚂、內(nèi)存泄漏等式撼。
定義
(1)負(fù)載測試 是通過模擬實(shí)際軟件系統(tǒng)所承受的負(fù)載條件、改變系統(tǒng)負(fù)載大小和負(fù)載方式來發(fā)現(xiàn)系統(tǒng)中所存在的問題求厕。
例如:逐漸增加模擬用戶的數(shù)量來觀察系統(tǒng)的響應(yīng)時(shí)間和數(shù)據(jù)吞吐量著隆、系統(tǒng)占用的資源(CPU扰楼、內(nèi)存等),以檢驗(yàn)系統(tǒng)的行為和特性美浦,發(fā)現(xiàn)系統(tǒng)可能存在的性能瓶頸弦赖、內(nèi)存泄漏、不能實(shí)時(shí)同步等問題抵代。
負(fù)載測試 更多地體現(xiàn)了一種方法或一種技術(shù),可以為性能測試忘嫉、壓力測試所采用荤牍。
(2)壓力測試(強(qiáng)度測試) 是在強(qiáng)負(fù)載情況下(如大數(shù)據(jù)量、大量并發(fā)用戶連接)對穩(wěn)定性進(jìn)行測試庆冕,查看應(yīng)用系統(tǒng)在峰值(瞬間使用高峰)使用情況下的行為表現(xiàn)康吵,更有效的發(fā)現(xiàn)系統(tǒng)穩(wěn)定性的隱患和系統(tǒng)在負(fù)載峰值的條件下的功能隱患,確認(rèn)系統(tǒng)是否具有良好的容錯(cuò)能力和可恢復(fù)能力访递。
可分為 高負(fù)載下的長時(shí)間(如24小時(shí)以上)的穩(wěn)定性壓力測試 和極限負(fù)載情況導(dǎo)致系統(tǒng)崩潰的破壞性壓力測試
如12306網(wǎng)站晦嵌,8月30日可購買國慶10月1日的票,購買時(shí)間一到可能有上億用戶與系統(tǒng)在同一時(shí)間產(chǎn)生交互
CPU內(nèi)存100%使用拷姿,系統(tǒng)在處理新的會話時(shí)會不會出現(xiàn)新的錯(cuò)誤
針對上述負(fù)載測試惭载、壓力測試舉個(gè)例子:一個(gè)人背X斤
負(fù)載測試:200斤情況下,是否能堅(jiān)持5分鐘响巢。
壓力測試:200,300,400斤... 情況下描滔,他的表現(xiàn),什么時(shí)候失敗踪古,失敗之后什么表現(xiàn)含长,重新扛200是否正常。
容量測試:在堅(jiān)持5分鐘的情況下伏穆,他一次最多能扛多少斤
Web前端性能
取決于瀏覽器的實(shí)現(xiàn)機(jī)制拘泞,Web頁面上的JS文件的執(zhí)行等,它與服務(wù)端的負(fù)載和壓力無關(guān)枕扫。比如圖片陪腌、CSS、JS等資源的下載
Web服務(wù)端性能
在確保功能實(shí)現(xiàn)正確的前提下烟瞧,考察服務(wù)端應(yīng)用程序的各項(xiàng)性能指標(biāo)偷厦,以及服務(wù)器硬件資源的使用情況。
做性能測試基礎(chǔ)知識
- HTML 語言基礎(chǔ):用來顯示數(shù)據(jù)
參考教程:http://www.w3school.com.cn/html/index.asp
(元素燕刻、屬性只泼、表單、鏈接卵洗、URL) - C 語言基礎(chǔ)知識
了解分支循環(huán)请唱、變量弥咪、函數(shù)定義 - HTTP 協(xié)議
接口性能會涉及到;請求(post十绑、get聚至、delete、put)本橙;狀態(tài)碼含義(200扳躬、302、404甚亭、500等) - XML:用來傳輸和存儲數(shù)據(jù)
參考教程:http://www.runoob.com/xml/xml-tutorial.html
與html類似贷币,樹形結(jié)構(gòu) - JSON:輕量級的文本數(shù)據(jù)交換格式
1)全拼:JavaScript Object Notation(JavaScript 對象表示法)
2)存儲和交換文本信息的語法,類似 XML亏狰,比 XML 更小役纹、更快,更易解析
3)現(xiàn)在很多http的post請求都在用 Json 格式傳輸數(shù)據(jù)暇唾,最常見的用法之一是從 web 服務(wù)器上讀取 JSON 數(shù)據(jù)(作為文件或作為 HttpRequest)促脉,將 JSON 數(shù)據(jù)轉(zhuǎn)換為 JavaScript 對象,然后在網(wǎng)頁中使用該數(shù)據(jù)策州。
參考教程:http://www.runoob.com/json/json-tutorial.html - 數(shù)據(jù)庫
主要是數(shù)據(jù)的增刪改查操作
多角度看待性能測試
- 用戶角度
軟件對用戶操作所產(chǎn)生的響應(yīng)時(shí)間瘸味,用戶不關(guān)注是什么原因引起的性能問題 - 運(yùn)維角度
系統(tǒng)是否能夠提供給用戶一個(gè)可靠可持續(xù)的服務(wù),必須關(guān)注系統(tǒng)資源使用的情況 - 開發(fā)角度
如何調(diào)整設(shè)計(jì)代碼的實(shí)現(xiàn)
比如銀行軟件够挂,并不要求多快的速度硫戈,只要求系統(tǒng)的穩(wěn)定運(yùn)行,要保證數(shù)據(jù)不出錯(cuò)
性能測試主要術(shù)語
1下硕、并發(fā)數(shù):同一時(shí)間點(diǎn)內(nèi)跟系統(tǒng)交互操作的數(shù)量
狹義并發(fā)
用戶在同一時(shí)刻做同一件事情或操作丁逝。
例如:首頁并發(fā)、加入購物車等廣義并發(fā)
用戶在同一時(shí)間點(diǎn)內(nèi)發(fā)出的請求或操作梭姓,這些請求或操作可以是相同的霜幼,也可以是不同的。
例如:首頁誉尖、促銷頁罪既、商品列表、商品詳情等同時(shí)訪問
一般來說铡恕,廣義并發(fā)更接近用戶的實(shí)際使用情況琢感。
對性能測試而言,兩種并發(fā)都需要測試(先狹義后廣義)探熔。
狹義并發(fā)發(fā)生在使用較為頻繁的模塊中驹针,一旦有問題通常都是程序問題。
一般通過測試工具模擬虛擬用戶(Virtual User)來體現(xiàn)
比如:12306網(wǎng)站诀艰,100個(gè)人8點(diǎn)都登錄網(wǎng)頁搶票柬甥,那并發(fā)數(shù)就是100
在這里饮六,我們要解除兩種誤區(qū)
1)認(rèn)為系統(tǒng)所有的用戶都是并發(fā)用戶
注冊用戶數(shù)(系統(tǒng)所有用戶):當(dāng)前系統(tǒng)中全部注冊的用戶數(shù)量
如公司員工2000人,每個(gè)人都會用到OA系統(tǒng)苛蒲,但并不代表這2000人都同時(shí)在使用OA系統(tǒng)
2)認(rèn)為所有在線的用戶都是并發(fā)用戶
在線用戶數(shù):當(dāng)前時(shí)間段內(nèi)有多少用戶登錄了卤橄,并不一定與系統(tǒng)產(chǎn)生交互,有些用戶只是登錄了而已 或者查看網(wǎng)上上的一些信息
如何計(jì)算并發(fā)用戶數(shù)臂外?
很大程度上市根據(jù)經(jīng)驗(yàn)和行業(yè)的一些標(biāo)準(zhǔn)來計(jì)算的窟扑,像12306網(wǎng)站并發(fā)用戶數(shù)量就會比較多,而OA系統(tǒng)一般是在線用戶的5%-20%
2漏健、事務(wù)
比如登錄網(wǎng)站嚎货,輸入用戶名密碼,點(diǎn)擊登錄漾肮,這三個(gè)操作我們就可以稱為登錄事務(wù)
TPS:服務(wù)器每秒處理的事務(wù)數(shù)厂抖,衡量系統(tǒng)處理能力的重要指標(biāo)
3茎毁、吞吐量:被測系統(tǒng)產(chǎn)生的數(shù)據(jù)流量
直接體現(xiàn)服務(wù)器的承載能力克懊,衡量服務(wù)器處理能力的重要指標(biāo),在分析時(shí)一定要注意分析吞吐量
比如說點(diǎn)擊網(wǎng)頁(10M)七蜘,打開谭溉,100個(gè)人同時(shí)點(diǎn)擊網(wǎng)頁,100*10M就是吞吐量
4橡卤、吞吐率:單位時(shí)間內(nèi)服務(wù)器處理用戶提交的請求數(shù)
吞吐率=吞吐量/測試時(shí)間
5扮念、點(diǎn)擊率(每秒點(diǎn)擊率):客戶端每秒真正發(fā)給服務(wù)端后端請求的數(shù)量
比如每秒向接口發(fā)送多少次請求,這不能反映系統(tǒng)的性能碧库,只能反映出客戶端向服務(wù)端發(fā)送的請求數(shù)量
注意點(diǎn):用戶點(diǎn)擊一次柜与,并不代表客戶端只向服務(wù)器端發(fā)送一個(gè)HTTP請求,可能會發(fā)出多個(gè)請求嵌灰。
6弄匕、思考時(shí)間:用戶在進(jìn)行操作時(shí),每個(gè)請求之間的時(shí)間間隔
如:輸入用戶名和密碼后沽瞭,看下輸入的對不對迁匠,這個(gè)等待時(shí)間就是思考時(shí)間
7、資源利用率:服務(wù)器系統(tǒng)不同硬件資源被使用的程度
分析服務(wù)器出現(xiàn)瓶頸和對服務(wù)器進(jìn)行調(diào)優(yōu)的主要依據(jù)
主要包括CPU占有率驹溃、內(nèi)存使用率城丧、IO使用率和時(shí)間(需要后臺監(jiān)控)
8、響應(yīng)時(shí)間(Time to laster byte)
從客戶端發(fā)送一個(gè)請求開始豌鹤,到客戶端接收到從服務(wù)端返回的響應(yīng)結(jié)果結(jié)束時(shí)所經(jīng)歷的時(shí)間亡哄,它是影響用戶體驗(yàn)的及其重要的一個(gè)指標(biāo)。
從用戶角度來說布疙,當(dāng)用戶單擊一個(gè)按鈕磺平,發(fā)出一條指令或在web頁面上單擊一個(gè)鏈接魂仍,從用戶單擊開始到應(yīng)用系統(tǒng)把本次操作的結(jié)果以用戶能察覺的方式展示出來,這個(gè)過程所消耗的時(shí)間就是用戶對軟件性能的直觀印象拣挪。
響應(yīng)時(shí)間=網(wǎng)絡(luò)傳輸時(shí)間+服務(wù)器處理時(shí)間+瀏覽器顯示時(shí)間(呈現(xiàn)給用戶的時(shí)間)
響應(yīng)時(shí)間的標(biāo)準(zhǔn)
- 在3秒鐘之內(nèi)擦酌,頁面給予用戶響應(yīng)并有所顯示---“很不錯(cuò)的”;
- 在3~5秒鐘內(nèi)菠劝,頁面給予用戶響應(yīng)并有所顯示---“好的”赊舶;
- 在5~10秒鐘內(nèi),頁面給予用戶響應(yīng)并有所顯示---“勉強(qiáng)接受”赶诊;
- 超過10秒就讓人有點(diǎn)不耐煩了笼平,很可能不會繼續(xù)等待下去---“差評”;
寫性能測試腳本步驟
1舔痪、需求分析
2寓调、測試點(diǎn)提取:對哪些功能進(jìn)行測試(指標(biāo)評估)
參考?xì)v史數(shù)據(jù)
客戶方提出
參與同行業(yè)同項(xiàng)目性能指標(biāo)
業(yè)界通用規(guī)則
自己測試決定
3锄码、制定測試計(jì)劃
4夺英、測試計(jì)劃評審
5、測試設(shè)計(jì)(搭建環(huán)境滋捶、準(zhǔn)備數(shù)據(jù)痛悯、編寫用例)
6、執(zhí)行用例(一次加載和逐步加載)
如:一個(gè)加載30個(gè)并發(fā)數(shù) 和 每次加載10個(gè)重窟,逐步加載到30個(gè)
7载萌、分析測試結(jié)果
8、提交性能測試報(bào)告
如何選擇性能測試工具
web service:SOUPUI巡扇,不用編寫代碼
http接口:Jmeter
界面功能性能測試(打開扭仁、下載圖片):LR
常見的性能問題
1、資源泄漏
包括內(nèi)存泄漏厅翔,系統(tǒng)占用的資源(如內(nèi)存乖坠、CPU等)隨著運(yùn)行時(shí)間不斷增長,從而降低系統(tǒng)性能知给。系統(tǒng)響應(yīng)越來越慢瓤帚,甚至出現(xiàn)混亂。只有重啟系統(tǒng)才能恢復(fù)到最初水平涩赢。
這類問題 產(chǎn)生的主要原因 是 有些對象(如GDI使用戈次、JDBC連接)沒有及時(shí)被銷毀、內(nèi)存沒有釋放干凈筒扒、緩存區(qū)回收等怯邪。
內(nèi)存泄漏
在進(jìn)程執(zhí)行過程中,如果一塊內(nèi)存區(qū)域花墩,進(jìn)程失去了對其的引用悬秉,也就是所該塊內(nèi)存區(qū)域永遠(yuǎn)都不會被進(jìn)程使用到了澄步,而操作系統(tǒng)又不知道進(jìn)程失去了對其的引用,所以不能進(jìn)行回收和泌,這就會導(dǎo)致操作系統(tǒng)認(rèn)為進(jìn)程保留了很多內(nèi)存空間村缸,但進(jìn)程本身卻沒辦法去使用這些內(nèi)存空間。
2武氓、資源瓶頸
內(nèi)部資源(線程梯皿、放入池的對象)變得稀缺,隨著負(fù)載越來越慢县恕,甚至系統(tǒng)掛起或出現(xiàn)異常錯(cuò)誤东羹。
這類問題產(chǎn)生的主要原因是線程過度使用或資源分配不足等造成的
3、CPU使用率達(dá)到100%忠烛,系統(tǒng)被鎖定
代碼中可能存在無限循環(huán)属提、缺乏保護(hù)(如對失敗請求不斷的重試)、頻繁對數(shù)據(jù)庫存取美尸、沒有使用數(shù)據(jù)高速緩存等
4冤议、線程死鎖、阻塞
可能因?yàn)槌绦驅(qū)κ挛锊l(fā)處理上的錯(cuò)誤火惊、資源爭用引起鎖阻塞和死鎖等
如:線程獲得順序的算法不對求类,造成死鎖奔垦、線程同步點(diǎn)上備份過多而造成通信阻塞
5屹耐、數(shù)據(jù)庫連接成為性能瓶頸
可能是因?yàn)閿?shù)據(jù)庫存取交互過多、未使用連接池 或 連接池配置參數(shù)不當(dāng)椿猎、單個(gè)SQL請求的數(shù)據(jù)量過多等問題
6蒲拉、查詢速度慢 或 列表效率低
主要原因是列表查詢未使用索引暖哨、過于復(fù)雜的SQL語句、分頁算法效率低
也可能是查詢結(jié)果集過大或不規(guī)范的查詢,如返回全部數(shù)據(jù)鼓拧,查詢?nèi)孔侄味皇撬枳侄?/p>
7、受外部系統(tǒng)影響越來越大
主要原因有 向后端系統(tǒng)發(fā)出太多的請求济欢、頁面內(nèi)容過多脆贵、經(jīng)第三方系統(tǒng)認(rèn)證比較復(fù)雜、網(wǎng)絡(luò)連接不穩(wěn)定或延遲