日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

測(cè)試開發(fā):新手學(xué)習(xí)性能測(cè)試經(jīng)驗(yàn)分享,值得收藏!

 測(cè)試開發(fā)技術(shù) 2022-06-18 發(fā)布于廣東

干貨技術(shù),第一時(shí)間送達(dá)!

開課通知:重磅消息 | 2021年最新全棧測(cè)試開發(fā)技能實(shí)戰(zhàn)指南(第2期)

大家好,我是黎潘,來(lái)自重慶,狂師老師的全棧測(cè)開訓(xùn)練營(yíng)中上一期的學(xué)員。

大多數(shù)測(cè)試人員在談到性能測(cè)試時(shí),往往會(huì)倍感壓力。對(duì)于我來(lái)說(shuō)更是如此,想做好性能測(cè)試需要龐大的知識(shí)體系,不斷實(shí)踐所總結(jié)的經(jīng)驗(yàn)教訓(xùn)更是彌足珍貴。而且每個(gè)人對(duì)性能測(cè)試的理解都有獨(dú)到的地方,此次有幸參加全棧測(cè)開訓(xùn)練營(yíng)在狂師老師的指導(dǎo)下逐步揭開性能測(cè)試得神秘面紗,結(jié)合課堂學(xué)習(xí)及自身消化理解后的,歸納了一些性能測(cè)試的基礎(chǔ)知識(shí),希望對(duì)大家理解性能測(cè)試有所幫助。

一、簡(jiǎn)述性能測(cè)試

性能測(cè)試含義:系統(tǒng)在一個(gè)給定的環(huán)境和場(chǎng)景中的性能表現(xiàn)是否與預(yù)期目標(biāo)一致,評(píng)判系統(tǒng)是否存在性能缺陷,并根據(jù)測(cè)試結(jié)果識(shí)別性能瓶頸,改善系統(tǒng)性能的完整的過(guò)程。

介入時(shí)機(jī):通常是在功能測(cè)試完成之后,并且系統(tǒng)功能處于相對(duì)穩(wěn)定狀態(tài)。

1.1性能測(cè)試開展范圍

客戶端:web端,PC端,移動(dòng)端,小程序,每一個(gè)都是不同領(lǐng)域的性能測(cè)試,關(guān)注點(diǎn)都不盡相同。還包括一個(gè)服務(wù)端的性能測(cè)試,本篇也主要是以服務(wù)端的性能測(cè)試來(lái)展開的。

1.2軟件性能關(guān)注點(diǎn)

  1. 終端用戶

使用過(guò)程中更加關(guān)注響應(yīng)時(shí)間,穩(wěn)定性。總得來(lái)說(shuō)就是用戶體驗(yàn)要好。

  1. 系統(tǒng)運(yùn)維人員

系統(tǒng)最大并發(fā),最大業(yè)務(wù)處理量,能支持多少用戶訪問(wèn),能否長(zhǎng)時(shí)間提供服務(wù),服務(wù)器資源使用,數(shù)據(jù)庫(kù)資源使用,系統(tǒng)是否可以實(shí)現(xiàn)擴(kuò)展??偟膩?lái)說(shuō),更加關(guān)注系統(tǒng)的穩(wěn)定性,資源利用率,可擴(kuò)展性,系統(tǒng)容量等。

  1. 軟件設(shè)計(jì)開發(fā)人員

架構(gòu)設(shè)計(jì),數(shù)據(jù)庫(kù)設(shè)計(jì),代碼設(shè)計(jì),是否存在不合理的內(nèi)存使用和線程同步方式,以及資源競(jìng)爭(zhēng)等,總的來(lái)說(shuō),更加關(guān)注系統(tǒng)架構(gòu),數(shù)據(jù)庫(kù)設(shè)計(jì),設(shè)計(jì)與代碼實(shí)現(xiàn)等。

  1. 性能測(cè)試人員

系統(tǒng)資源指標(biāo),業(yè)務(wù)性能指標(biāo),DB性能指標(biāo),系統(tǒng)穩(wěn)定性,支持最大并發(fā),性能拐點(diǎn)等,幾乎包括了上述所有人員的關(guān)注點(diǎn)。

二、后端性能常見指標(biāo)

2.1業(yè)務(wù)性能指標(biāo)

并發(fā)用戶數(shù):并發(fā)用戶數(shù)取決于業(yè)務(wù)并發(fā)用戶數(shù)和用戶行為模式,也就是說(shuō)實(shí)際使用的用戶并不是每種用戶行為都會(huì)對(duì)服務(wù)端產(chǎn)生壓力,通常是指同一批用戶同時(shí)執(zhí)行一個(gè)對(duì)后端服務(wù)產(chǎn)生壓力的操作行為。

響應(yīng)時(shí)間:響應(yīng)時(shí)間是系統(tǒng)最重要的性能指標(biāo),直觀的反映了系統(tǒng)的快慢。指的是用戶端發(fā)出請(qǐng)求到得到響應(yīng)的整個(gè)過(guò)程所經(jīng)歷的。

系統(tǒng)處理能力:系統(tǒng)處理能力是指系統(tǒng)在利用系統(tǒng)硬件平臺(tái)和軟件平臺(tái)進(jìn)行信息處理的能力,通常有以下幾個(gè)指標(biāo)衡量。

  • TPS:每秒事務(wù)數(shù),指服務(wù)器在單位時(shí)間內(nèi)(秒)可以處理的事務(wù)數(shù)量。
  • QPS:每秒查詢率,指服務(wù)器在單位時(shí)間內(nèi)(秒)處理的查詢請(qǐng)求速率。
  • HPS:每秒點(diǎn)擊次數(shù),單位是次/秒。

吞吐量:系統(tǒng)在單位時(shí)間內(nèi)處理請(qǐng)求的數(shù)量。

事務(wù)成功率:?jiǎn)挝粫r(shí)間內(nèi)系統(tǒng)可以成功完成多少個(gè)定義的事務(wù)。

超時(shí)錯(cuò)誤率:主要指事務(wù)由于超時(shí)或系統(tǒng)內(nèi)部其它錯(cuò)誤導(dǎo)致失敗占總事務(wù)的比率。

2.2系統(tǒng)資源指標(biāo)

CPU使用率:指用戶進(jìn)程與系統(tǒng)進(jìn)程消耗的CPU時(shí)間百分比。

內(nèi)存利用率:內(nèi)存利用率=(1-空閑內(nèi)存/總內(nèi)存大小)*100%。

磁盤I/O:磁盤吞吐量簡(jiǎn)稱為 Disk Throughput,是指在無(wú)磁盤故障的情況下單位時(shí)間內(nèi)通過(guò)磁盤的數(shù)據(jù)量。

網(wǎng)絡(luò)帶寬:發(fā)送和接收字節(jié)的速率,包括幀字符在內(nèi)。

數(shù)據(jù)庫(kù)性能指標(biāo):sql語(yǔ)句,連接數(shù),讀寫速度,資源使用率等。

上述只是一些常見的指標(biāo),通常還包括一些其他中間件,以及整個(gè)鏈路所經(jīng)過(guò)的服務(wù)器指標(biāo)。

2.3并發(fā)用戶數(shù),響應(yīng)時(shí)間,系統(tǒng)吞吐量三者之間的關(guān)系

未達(dá)到系統(tǒng)瓶頸:隨著并發(fā)用戶數(shù)的增加,系統(tǒng)吞吐量會(huì)逐漸增加,此時(shí)響應(yīng)時(shí)間會(huì)較快。

達(dá)到系統(tǒng)瓶頸:隨著并發(fā)用戶數(shù)的增加,系統(tǒng)吞吐量不再會(huì)增加,此時(shí)響應(yīng)時(shí)間會(huì)開始變長(zhǎng)。

超過(guò)系統(tǒng)瓶頸:隨著并發(fā)用戶數(shù)的增加,系統(tǒng)吞吐量出現(xiàn)下降,此時(shí)響應(yīng)時(shí)間會(huì)逐漸拉長(zhǎng),甚至無(wú)響應(yīng)。

三、常見性能測(cè)試方法

后端性能測(cè)試:通過(guò)模擬一定的并發(fā)用戶量,獲取一系列需要的系統(tǒng),業(yè)務(wù)性能指標(biāo),來(lái)驗(yàn)證是否滿足我們預(yù)期性能需求或者探索系統(tǒng)的容量和潛在的問(wèn)題。

代碼級(jí)性能測(cè)試:在單元測(cè)試階段,針對(duì)代碼本身,例如通過(guò)多次執(zhí)行單元測(cè)試用例,獲取一些關(guān)鍵算法的性能指標(biāo),是否滿足需求。

壓力測(cè)試:系統(tǒng)在一定資源飽和的情況下,模擬一定用戶量,不斷對(duì)系統(tǒng)施壓,驗(yàn)證系統(tǒng)處于壓力情況下的性能表現(xiàn),尋找系統(tǒng)的性能瓶頸點(diǎn)。

配置測(cè)試:觀察系統(tǒng)在不同配置下性能的表現(xiàn),了解不同環(huán)境配置對(duì)系統(tǒng)性能的影響程度。

并發(fā)測(cè)試:模擬多個(gè)用戶同一時(shí)間訪問(wèn)一個(gè)系統(tǒng),模塊或數(shù)據(jù)記錄等其他并發(fā)操作,關(guān)注系統(tǒng)可能存在的性能瓶頸,如內(nèi)存泄漏,線程死鎖或資源競(jìng)爭(zhēng)等問(wèn)題。

可靠性測(cè)試:給系統(tǒng)施加一定的壓力,持續(xù)運(yùn)行一段時(shí)間,觀察系統(tǒng)能否穩(wěn)定運(yùn)行。

四、企業(yè)中常見性能測(cè)試類型

性能基準(zhǔn)測(cè)試:基于固定的硬件環(huán)境和部署架構(gòu)(比如專用的服務(wù)器、固定的專用網(wǎng)絡(luò)環(huán)境、固定大小的集群規(guī)模、相同的系統(tǒng)配置、相同的數(shù)據(jù)庫(kù)背景數(shù)據(jù)等),通過(guò)執(zhí)行固定的性能測(cè)試場(chǎng)景得到系統(tǒng)的性能測(cè)試報(bào)告,然后與上一版本發(fā)布時(shí)的指標(biāo)進(jìn)行對(duì)比,如果發(fā)現(xiàn)指標(biāo)有“惡化”的趨勢(shì),就需要進(jìn)一步排查。

穩(wěn)定性測(cè)試:又稱可靠性測(cè)試,主要是通過(guò)長(zhǎng)時(shí)間(7*24 小時(shí))模擬被測(cè)系統(tǒng)的測(cè)試負(fù)載,來(lái)觀察系統(tǒng)在長(zhǎng)期運(yùn)行過(guò)程中是否有潛在的問(wèn)題。通過(guò)對(duì)系統(tǒng)指標(biāo)的監(jiān)控,穩(wěn)定性測(cè)試可以發(fā)現(xiàn)諸如內(nèi)存泄漏、資源非法占用等問(wèn)題。

并發(fā)測(cè)試:是在高并發(fā)情況下驗(yàn)證單一業(yè)務(wù)功能的正確性以及性能的測(cè)試手段。高并發(fā)測(cè)試一般使用思考時(shí)間為零的虛擬用戶腳本來(lái)發(fā)起具有“集合點(diǎn)”的測(cè)試。

容量規(guī)劃測(cè)試:是為了完成容量規(guī)劃而設(shè)計(jì)執(zhí)行的測(cè)試。容量規(guī)劃的主要目的是,解決當(dāng)系統(tǒng)負(fù)載將要達(dá)到極限處理能力時(shí),我們應(yīng)該如何通過(guò)垂直擴(kuò)展(增加單機(jī)的硬件資源)和水平擴(kuò)展(增加集群中的機(jī)器數(shù)量)增加系統(tǒng)整體的負(fù)載處理能力的問(wèn)題。

五、常見的性能測(cè)試工具

目前市面上比較常見的服務(wù)端性能測(cè)試少說(shuō)也有幾十種,這里我們簡(jiǎn)單的比較下常見的三種,即JMeter,locust,LoadRunner。

5.1 組件對(duì)比

5.2 功能區(qū)別

通過(guò)以上對(duì)比,大家結(jié)合自己公司的需求,選擇合適的性能測(cè)試工具。

5.3 locust入門

定義

Locust是使用Python語(yǔ)言編寫實(shí)現(xiàn)的開源性能測(cè)試工具,簡(jiǎn)潔、輕量、高效,并發(fā)機(jī)制基于gevent協(xié)程,可以實(shí)現(xiàn)單機(jī)模擬生成較高的并發(fā)壓力。中文意為:蝗蟲,蝗蟲過(guò)境,寸草不生。

主要特點(diǎn)

  • 使用Python語(yǔ)言編寫用戶測(cè)試場(chǎng)景
  • 分布式、可擴(kuò)展,支持成千上萬(wàn)的用戶
  • 基于事件驅(qū)動(dòng),基于gevent協(xié)程實(shí)現(xiàn)并發(fā)機(jī)制。
  • 基于Web的用戶界面,用戶可以實(shí)時(shí)監(jiān)控腳本運(yùn)行狀態(tài)
  • 幾乎可以測(cè)試任何系統(tǒng),除了Web HTTP接口外,還可自定義Clients測(cè)試其他類型系統(tǒng)

安裝

直接通過(guò)pip install locust命令安裝。

安裝成功后可以輸入pip show locust命令查看是否安裝成功,以及通過(guò)locust --help查看幫助信息。

簡(jiǎn)單腳本示例

from locust import HttpUser, TaskSet, task


class WebsiteTasks(TaskSet):
    # 任務(wù)啟動(dòng)前置執(zhí)行 
    #def on_start(self):
        self.login()
    # self.client屬性使用Python request庫(kù)的所有方法,調(diào)用和使用方法和requests完全一致
    #def login(self):
    #    self.client.post("/login", {"username": "mikezhou", "password": "123456"})  
 # 此腳本用不到提前登陸,只起個(gè)示例作用,運(yùn)行前注釋掉
    
    @task(2)  # 通過(guò)@task()裝飾的方法為一個(gè)事務(wù),方法的參數(shù)用于指定該行為的執(zhí)行權(quán)重,參數(shù)越大每次被虛擬用戶執(zhí)行的概率越高,默認(rèn)為1
    def index(self):
        self.client.get("/")

    def about(self):
        self.client.get("/about/")


class WebsiteUser(HttpUser):
    # 被測(cè)系統(tǒng)的host,在終端中啟動(dòng)locust時(shí)沒(méi)有指定--host參數(shù)時(shí)才會(huì)用到
    host = "http://"  
    # TaskSet類,該類定義用戶任務(wù)信息,必填。這里就是WebsiteTasks類名,因?yàn)樵擃惱^承TaskSet
    tasks = [WebsiteTasks]  
    # 每個(gè)用戶執(zhí)行兩個(gè)任務(wù)間隔時(shí)間的上下限(毫秒),具體數(shù)值在上下限中隨機(jī)取值,若不指定默認(rèn)間隔時(shí)間固定為1秒
    min_wait = 3000  
    max_wait = 10000

locust腳本命令運(yùn)行

# 方法一:腳本調(diào)試無(wú)頭模式運(yùn)行
locust -f locustfile.py --headless -u 10 -r 1 -t 30s
# -f:指定文件
# -u:指定用戶量
# -r:每秒啟動(dòng)用戶數(shù)
# -t:運(yùn)行時(shí)間
# --headless:開啟無(wú)頭模式,即不使用UI界面操作

#
 方法二:指定IP和端口啟動(dòng),使用UI界面
locust -f locustfile.py --web-host 127.0.0.1 --web-port 8080

#
 以上就是簡(jiǎn)單的啟動(dòng)locust腳本的方式,詳細(xì)可以查看官方文檔或者locust --help

locust的UI界面

  • Number of new load test:設(shè)置模擬的用戶總數(shù)
  • Spawn rate  (users spawned/second):每秒啟動(dòng)的虛擬用戶數(shù)
  • Host  (e.g. http://www.):被測(cè)目標(biāo)地址
  • Start swarming:執(zhí)行l(wèi)ocust腳本

測(cè)試結(jié)果頁(yè)面

  • Type:請(qǐng)求類型
  • Name:請(qǐng)求路徑
  • Requests:當(dāng)前完成的請(qǐng)求數(shù)量
  • Fails:當(dāng)前失敗數(shù)量
  • Median:響應(yīng)時(shí)間中間值
  • 90%ile(ms):正態(tài)分布90%的值在300ms內(nèi)
  • Average(ms):平均響應(yīng)時(shí)間
  • Min(ms):最小響應(yīng)時(shí)間
  • Max(ms):最大響應(yīng)時(shí)間
  • Average size (bytes):平均
  • Current RPS:當(dāng)前RPS
  • Current Failures/s:當(dāng)前失敗的RPS/s

其他模塊

  • New test:點(diǎn)擊該按鈕對(duì)總虛擬用戶數(shù)和每秒啟動(dòng)的虛擬用戶數(shù)進(jìn)行編輯重跑
  • Statistics:類似JMeter的聚合報(bào)告
  • Charts:測(cè)試結(jié)果變化趨勢(shì)圖
  • Failures:失敗請(qǐng)求的展示界面
  • Exceptions:異常請(qǐng)求的展示界面
  • Download Data:測(cè)試數(shù)據(jù)下載模塊,提供三種類型的CSV格式下載,分別是:Statistics、responsetime、exceptions,還有總的測(cè)試報(bào)告Report

由于本篇是對(duì)性能測(cè)試?yán)碚撝R(shí)的分享,想了解更多l(xiāng)ocust的高級(jí)使用方法,可以參考官方文檔。

注意: 后端性能測(cè)試工具是實(shí)現(xiàn)后端性能測(cè)試的技術(shù)手段,不能簡(jiǎn)單地把使用后端性能測(cè)試工具等同于后端性能測(cè)試。一般是在測(cè)試腳本開發(fā)和測(cè)試執(zhí)行階段發(fā)揮作用

六、性能測(cè)試流程

對(duì)于我們初學(xué)性能測(cè)試時(shí),往往會(huì)陷入一個(gè)誤區(qū),那就是單純的去學(xué)習(xí)性能測(cè)試工具,認(rèn)為學(xué)會(huì)了工具的使用,就掌握了性能測(cè)試。這其實(shí)是大錯(cuò)特錯(cuò)的,工具的學(xué)習(xí)只是其中的一個(gè)階段,而且是比較基礎(chǔ)的一個(gè)階段,在整個(gè)性能測(cè)試流程中,性能測(cè)試執(zhí)行策略,性能場(chǎng)景和分析才是重中之重,也是最難的部分。

性能測(cè)試的學(xué)習(xí)路徑可以分為五個(gè)階段:

  • 性能理論學(xué)習(xí)期
  • 性能工具學(xué)習(xí)期
  • 性能場(chǎng)景學(xué)習(xí)期
  • 性能分析學(xué)習(xí)期
  • 性能調(diào)優(yōu)學(xué)習(xí)期

6.1 性能測(cè)試的前提

日常工作中,被問(wèn)及何時(shí)進(jìn)行性能測(cè)試時(shí),往往很多人都是摸不著頭腦,大多數(shù)情況下都是被動(dòng)接受領(lǐng)導(dǎo)或者開發(fā)給的任務(wù),才回去進(jìn)行性能測(cè)試,很少人會(huì)主動(dòng)出擊,去思考在什么階段進(jìn)行性能測(cè)試,下面給出幾點(diǎn)建議,當(dāng)然大前提肯定是在功能測(cè)試之后,整個(gè)系統(tǒng)都是處于一種穩(wěn)定的狀態(tài)。

  • 應(yīng)用使用人數(shù)逐漸增多,性能問(wèn)題頻發(fā),影響到用戶的日常操作
  • 需要提供很高穩(wěn)定性的基礎(chǔ)服務(wù),這種一般都是系統(tǒng)的核心服務(wù),支撐了多端的業(yè)務(wù)
  • 改動(dòng)了核心應(yīng)用,擔(dān)心對(duì)鏈路有影響

6.2 制定性能測(cè)試目標(biāo)

  • 第一種是以衡量系統(tǒng)的處理能力為核心目標(biāo)
  • 第二種檢測(cè)系統(tǒng)的健壯性
  • 第三種目標(biāo)是系統(tǒng)的穩(wěn)定性
  • 第四種性能測(cè)試目標(biāo)是專項(xiàng)能力是否達(dá)標(biāo)

6.3 性能測(cè)試場(chǎng)景設(shè)計(jì)

1. 測(cè)試負(fù)載組成

  • 虛擬用戶腳本
  • 各個(gè)虛擬用戶腳本的并發(fā)數(shù)量
  • 總的并發(fā)用戶數(shù)

2. 負(fù)載策略

  • 加壓策略
  • 減壓策略
  • 最大負(fù)載運(yùn)行時(shí)間
  • 延時(shí)策略

3. 資源監(jiān)控范圍定義

  • 操作系統(tǒng)級(jí)別的監(jiān)控指標(biāo)
  • 應(yīng)用服務(wù)器的監(jiān)控指標(biāo)
  • 數(shù)據(jù)庫(kù)服務(wù)器的監(jiān)控指標(biāo)
  • 緩存集群的監(jiān)控指標(biāo)

4. 終止方式

  • 腳本出錯(cuò)時(shí)的處理方式
  • 負(fù)載熔斷機(jī)制

5. 負(fù)載產(chǎn)生規(guī)劃

  • 壓力產(chǎn)生器數(shù)量
  • 網(wǎng)絡(luò)帶寬要求

6.4 制定性能測(cè)試方案

性能測(cè)試方案是在正式進(jìn)行性能測(cè)試之前的工作,主要包括:

  • 制定性能測(cè)試目的
  • 性能測(cè)試場(chǎng)景梳理
  • 確定被測(cè)業(yè)務(wù)的部署結(jié)構(gòu)
  • 業(yè)務(wù)數(shù)據(jù)的分析
  • 業(yè)務(wù)規(guī)則的分析確認(rèn)
  • 測(cè)試監(jiān)控的內(nèi)容確定
  • 性能測(cè)試排期涉及人員

七、總結(jié)

今天談到的性能測(cè)試知識(shí),不過(guò)是九牛一毛。想要正真掌握性能測(cè)試還需要不斷的親身實(shí)踐,擴(kuò)大自己知識(shí)的廣度和深度,對(duì)于初識(shí)性能測(cè)試且沒(méi)有實(shí)際經(jīng)驗(yàn)的我來(lái)說(shuō),這將是我以后學(xué)習(xí),并加以實(shí)踐的基石。

如果你覺得文章還不錯(cuò),幫忙 點(diǎn)贊轉(zhuǎn)發(fā)、關(guān)注留言 ,因?yàn)檫@將是我持續(xù)輸出更多優(yōu)質(zhì)文章的最強(qiáng)動(dòng)力!

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多