性能測試分享

? ? 昨天,破冰分享主題是“性能測試”,對于我這個(gè)還沒有接觸過性能測試的人來說,真的是充滿了膜拜,于自己而言,一頭霧水……需要補(bǔ)充的知識有好多……

1.需要了解的基礎(chǔ)知識

HTML語言基礎(chǔ):比如post請求、元素、屬性、鏈接、表單、url等都需要了解

C語言基礎(chǔ):后期使用Loundrunner,它有些東西是基于c語言寫的,基本的知識即可

http協(xié)議:后期要對接口做性能測試,了解http請求,如get、post請求,請求返回的狀態(tài)碼,請求報(bào)頭信息等

xml:與html類似

JSON:如post請求,其中都是用json傳輸數(shù)據(jù)

數(shù)據(jù)庫:增刪改查,操作后要確認(rèn)數(shù)據(jù)是否正常

2.性能測試基礎(chǔ)介紹

(1)性能測試重要性與功能測試區(qū)別

? ? ? ? 從功能測試向性能測試轉(zhuǎn)變的時(shí)候,需要注意的是:需要把功能測試的思想去掉,往性能測試上轉(zhuǎn)換

(2)性能測試分類

? ? ? ? 負(fù)載測試:看一下系統(tǒng)指標(biāo)達(dá)到的極限,達(dá)到哪個(gè)極限的時(shí)候系統(tǒng)處于飽和的狀態(tài)

? ? ? ? 壓力測試:有時(shí)候也叫強(qiáng)度測試,cpu、內(nèi)存都在100%使用的情況下,系統(tǒng)處理各自任務(wù)的能力,是否會出現(xiàn)錯(cuò)誤

? ? ? ? 并發(fā)測試:用戶同時(shí)向一個(gè)應(yīng)用發(fā)送請求,看系統(tǒng)多久可以將并發(fā)的數(shù)據(jù)完成

? ? ? ? 配置測試

? ? ? ? 可靠性測試

(3)多角度看待性能

? ? ? ? 沒有一個(gè)準(zhǔn)確的標(biāo)準(zhǔn),從不同的角度看,解釋就不一樣.

? ? ? ? 從用戶來看,軟件性能就是軟件對于用戶操作的響應(yīng)時(shí)間;從運(yùn)維的角度看,軟件性能表現(xiàn)在系統(tǒng)是否能夠提供給用戶穩(wěn)定、可靠的服務(wù);從開發(fā)角度看,軟件性能表現(xiàn)在如何通過調(diào)整代碼的設(shè)計(jì)和實(shí)現(xiàn),使其達(dá)到最高。

? ? ? ? 角度不一樣,性能的理解是不一樣的,不一定都是提高軟件的運(yùn)行速度,如銀行軟件,并不要求速度高,需要的是穩(wěn)定運(yùn)行,保證數(shù)據(jù)不出錯(cuò)

? ? ? ? 需要站在不同的角度看

(4)性能測試主要術(shù)語

? ? ? ? 并發(fā)數(shù):也叫做虛擬用戶數(shù),在同一時(shí)間點(diǎn)向系統(tǒng)發(fā)送產(chǎn)生的交互數(shù)量,如12306搶票,八點(diǎn)開始搶,八點(diǎn)整大家一起開始搶票,如果有100個(gè)人正在搶,那這個(gè)100就是一個(gè)并發(fā)數(shù)

? ? ? ? 注冊用戶數(shù):指當(dāng)前系統(tǒng)中全部注冊的用戶數(shù)量,和并發(fā)數(shù)不一樣,并發(fā)數(shù)指和系統(tǒng)產(chǎn)生交互操作的數(shù)量,注冊數(shù)量只是注冊,并沒有產(chǎn)生交互

? ? ? ? 在線用戶數(shù):當(dāng)前系統(tǒng)時(shí)間段內(nèi),登錄系統(tǒng)的用戶數(shù)量,但在線用戶數(shù)并不一定都和系統(tǒng)產(chǎn)生了交互

? ? ? ? 事務(wù):比如登錄網(wǎng)站,輸入用戶名、密碼、點(diǎn)擊登錄,這三個(gè)操作就可以看成一個(gè)事務(wù),即登錄事務(wù)

? ? ? ? TPS:每秒通過的事務(wù)數(shù),即每秒處理的事務(wù)數(shù)量,它是衡量系統(tǒng)處理能力的重要指標(biāo)

? ? ? ? 吞吐量:比如被測系統(tǒng)所產(chǎn)生的數(shù)據(jù)流量,點(diǎn)擊網(wǎng)頁,網(wǎng)頁是10M,這10M就是產(chǎn)生的數(shù)據(jù)流量,如果有10個(gè)人點(diǎn)擊,那就是10*10的數(shù)據(jù)流量,即為網(wǎng)頁的吞吐量

? ? ? ? 每秒點(diǎn)擊率:客戶端每秒真正發(fā)給服務(wù)端請求的數(shù)量,比如有個(gè)接口,每秒向這個(gè)接口發(fā)送多少請求,這個(gè)不能反映系統(tǒng)的性能,只能反映客戶端向服務(wù)端發(fā)送請求的數(shù)量

? ? ? ? 思考時(shí)間:用戶訪問這個(gè)網(wǎng)頁的停頓時(shí)間,比如輸入用戶名和密碼,要確定用戶名和密碼是否正確,這個(gè)等待時(shí)間就叫做思考時(shí)間

? ? ? ? 資源利用率:如cpu占用率,內(nèi)存使用率,IO等使用率和時(shí)間,需要后臺監(jiān)控,才能看出來

3.性能測試流程

破冰提供流程圖

一般寫性能測試腳本時(shí),要進(jìn)行的操作:

? ? ? ? 需求分析,測試點(diǎn)提取(分析后,要對哪些功能進(jìn)行性能測試,比如是要求網(wǎng)頁的tps達(dá)到1000還是2000,還是說吞吐量達(dá)到多少;上面所說的性能指標(biāo),每一個(gè)性能指標(biāo)就是一個(gè)測試點(diǎn),究竟要測試哪一個(gè),這里就要確定;如何提取測試點(diǎn):一般參考?xì)v史數(shù)據(jù),歷史上測試點(diǎn)有哪些;客戶提出的;參考同行業(yè)、通項(xiàng)目性能測試的指標(biāo);業(yè)界通用的規(guī)則,大家都達(dá)到的一個(gè)性能指標(biāo))

? ? ? ? 指標(biāo)的評估:比如tps,要達(dá)到多大值,如果是新系統(tǒng),會以自己測試標(biāo)準(zhǔn)為準(zhǔn)或者內(nèi)部制定標(biāo)準(zhǔn),以這個(gè)標(biāo)準(zhǔn)為起點(diǎn)進(jìn)行性能測試,循序漸進(jìn),慢慢提高

? ? ? ? 制定計(jì)劃:制定好后,和其他組進(jìn)行評估,如果沒評估通過,繼續(xù)制定,如果通過了,就進(jìn)行下一步

? ? ? ? 搭建測試環(huán)境,編寫用例,執(zhí)行用例,調(diào)試用例,調(diào)試完查看是否達(dá)到要求

4.測試框架體系

(1)LoundRunner

? ? ? ? Loundrunner:分為三個(gè)小的功能點(diǎn),即三大組件:編寫代碼組件、場景組件、分析組件

? ? ? ? 編寫代碼組件、場景組件、分析組件都要使用起來,一般都是先把腳本寫好,去掉腳本中沒用的信息,再進(jìn)行場景設(shè)計(jì),如每隔多少秒添加一個(gè)用戶,登錄場景:每隔多少秒登錄多少個(gè)用戶,多長時(shí)間達(dá)到一個(gè)最大用戶數(shù),中途連續(xù)執(zhí)行多長時(shí)間,達(dá)到連續(xù)時(shí)間后每隔多少秒減少多少用戶,多長時(shí)間把最大用戶減為0,跑完后就會有個(gè)報(bào)告,然后用分析組件進(jìn)行分析,便會產(chǎn)生一些參數(shù)值或信息

? ? ? ? 不要指望軟件就會提供系統(tǒng)的性能問題,性能指標(biāo)都是人工分析出來的,軟件永遠(yuǎn)不會提供,性能測試并不是對性能測試工具的了解,而是長期的經(jīng)驗(yàn)積累。

? ? ? ? Loundrunner也可以做接口性能測試。

(2)Jmeter

? ? ? ? 主要做接口性能測試??梢詥为?dú)做接口測試,也可以做接口性能測試

? ? ? ? 資源利用率:IO利用率、內(nèi)存、cpu利用率,如果服務(wù)器是linux的,需要在linux服務(wù)器下添加插件,監(jiān)控系統(tǒng)的指標(biāo),跑性能測試腳本的時(shí)候(shell腳本或插件),會將這段時(shí)間的cpu等的指標(biāo)收集起來,Jemeter/Loundrunner生成的報(bào)告和linux監(jiān)控信息綜合起來,具體確定哪個(gè)地方會產(chǎn)生問題

? ? ? ? 常用的:Jenkins+Jmeter+Ant

(3)Soapui

(4)Linux

(5)服務(wù)器中間件調(diào)優(yōu)

? ? ? ? tomcat、appach、ant等,主要是一些配置文件的優(yōu)化,如果會appach優(yōu)化,tomcat也就會了,參數(shù)大多數(shù)是一樣的,比如請求數(shù)、最大鏈接數(shù)

? ? ? ? MaxRequestsPerChild:每個(gè)子進(jìn)程在其生存期內(nèi)允許伺候的最大請求數(shù)量,默認(rèn)為10000。到達(dá)MaxRequestsPerChild的限制后,子進(jìn)程將會結(jié)束。如果MaxRequestsPerChild為"0",子進(jìn)程將永遠(yuǎn)不會結(jié)束。

? ? ? ? 中間件配置優(yōu)化,并不是某些參數(shù)配的越高越好,講究一個(gè)平衡,各個(gè)參數(shù)平衡,才能最優(yōu)

(6)數(shù)據(jù)庫:mysql優(yōu)化

? ? ? ? 抓取大范圍,牽扯小范圍。如:mysql下,把慢查詢打開,查到10條,挑出一條最慢的,進(jìn)行分析,是沒做索引?還是鏈接太長?一般是先加索引,如果還沒有優(yōu)化,便可以把它拆開,并不是所有的sql語句都要放到后端處理,可以拆開一部分放在前端,前端處理完后,傳給后端,減輕了后端服務(wù)器的壓力

? ? ? ? 一般的做法是:分庫分表;多庫多表;主從分離

(7)JVM調(diào)優(yōu)

? ? ? ? 了解java基礎(chǔ)知識:年輕代、年老代、持久代分清楚,java配置文件中有這幾個(gè)代的占用內(nèi)存大小的配置;jc,什么叫jc,jc是java中獨(dú)有的管理垃圾回收的策略,系統(tǒng)自動執(zhí)行,如果有些類、方法加載后,長期不使用,便會觸發(fā)jc垃圾處理機(jī)制

? ? ? ? jc內(nèi)存泄露:監(jiān)控jvm中年輕代、年老代以及類的占用內(nèi)存大小的時(shí)候,如果看到一些內(nèi)存信息被占用的越來越大,那就有可能存在內(nèi)存泄漏了

? ? ? ? 一般jc之后,年輕代、年老代的內(nèi)存占用率會回到一個(gè)很低的值,然后再慢慢加,加到一定程度,又會觸發(fā)jc,再回到一個(gè)低點(diǎn),如果很有規(guī)律,基本沒有內(nèi)存泄漏

? ? ? ? 一般系統(tǒng)運(yùn)行很久之后,才能看出是否存在內(nèi)存泄漏

? ? ? ? jprofiler_windows:檢測內(nèi)存泄漏工具,可以模擬出當(dāng)前代碼是否存在內(nèi)存泄漏

(8)項(xiàng)目+框架

? ? ? ? 每個(gè)網(wǎng)站剛開始做并不是就有一個(gè)很好的優(yōu)化框架,都是一點(diǎn)點(diǎn)調(diào)優(yōu),網(wǎng)頁結(jié)構(gòu)最初都是web服務(wù)器、數(shù)據(jù)服務(wù)器、文檔服務(wù)器組成

? ? ? ? web數(shù)據(jù)從數(shù)據(jù)庫直接讀寫,支撐不了了再加入一些靜態(tài)數(shù)據(jù)庫緩存,web服務(wù)器端和數(shù)據(jù)庫服務(wù)器端加入cach緩存,如ridis,數(shù)據(jù)服務(wù)器就升級了

? ? ? ? 繼續(xù)發(fā)展,流量增加、點(diǎn)擊量增加,沒法支撐,便會考慮部署集群,集群部署簡單說就是多加幾臺服務(wù)器,這時(shí)候就牽扯到負(fù)載均衡,它來控制瀏覽數(shù)據(jù)的時(shí)候到哪個(gè)服務(wù)器上取數(shù)據(jù)

? ? ? ? 數(shù)據(jù)庫越來越大,查詢效率低,便會進(jìn)行數(shù)據(jù)庫分離,如分庫分表、多庫多表等,一般分為水平切分和垂直切分

? ? ? ? 不同業(yè)務(wù)存放到不同數(shù)據(jù)庫,減輕壓力,比如將經(jīng)常用到的放到數(shù)據(jù)庫A上,用的很少的放到數(shù)據(jù)庫B


疑問解答

(1)數(shù)據(jù)庫出現(xiàn)性能問題,一般有哪些原因組成:

答:鎖表,鎖表并不能影響性能,因?yàn)槎紵o法進(jìn)行操作,鎖表不屬于性能方面問題。一般都是索引設(shè)置不好,語句拼寫太長,各種查詢條件太多

(2)性能測試推薦書籍

答:如果沒有基礎(chǔ),淘寶、京東隨便找一本書都挺好的,先看一本。小強(qiáng)性能測試

? ? ? ? 性能測試,Jemeter、Loundrunner只是性能測試工具,比如Loundruner錄制完,產(chǎn)生好多腳本,歸根結(jié)底還是以接口的形式在向網(wǎng)站發(fā)送請求,所以一定要把接口弄明白

(3)Jemeter、Loundrunner、SoupUI都學(xué)會了,那應(yīng)該怎么選擇呢?什么情況下用?

答:webservice接口測試,可以選擇soupui,基本不用編寫代碼

? ? ? ? http協(xié)議的接口測試,建議使用jmeter、loundrunner

? ? ? ?界面的性能測試,建議使用loundrunner


個(gè)人收獲

(1)對于一個(gè)小白來說,只是聽過性能測試這個(gè)名詞,對它究竟怎么測?怎么衡量,需要哪些知識,根本沒有概念,這次分享,真是漲知識了,開闊了自己的眼界。

(2)公司也是剛開始進(jìn)行性能測試,現(xiàn)在也是在摸索階段,之前開會聽的時(shí)候有些東西因?yàn)闆]有概念,所以聽別人講起,只覺得很厲害,這次分享之后,自己也知道他講的哪些是對的,哪些是錯(cuò)的了。

(3)對于性能測試,自己也知道如何下手了,先從掌握基礎(chǔ)知識開始。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,029評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • 需要原文的可以留下郵箱我給你發(fā),這里的文章少了很多圖,懶得網(wǎng)上粘啦 1數(shù)據(jù)庫基礎(chǔ) 1.1數(shù)據(jù)庫定義 1)數(shù)據(jù)庫(D...
    極簡純粹_閱讀 7,909評論 0 46
  • 曾經(jīng)看過一篇很感動我的文章,文章里說了一個(gè)真實(shí)的故事。 一個(gè)女人問和她拍拖3個(gè)月的男朋友:“你愛我嗎?會和我結(jié)婚嗎...
    存鳳呢姑娘黃鶯閱讀 712評論 10 4
  • 成長路上,如唐僧的取經(jīng)路,八十一難都需要慢慢地熬過,但一定要有堅(jiān)持不懈的前進(jìn)和堅(jiān)定不移的信仰?!}記 2...
    jwyyw雯閱讀 306評論 0 1

友情鏈接更多精彩內(nèi)容