web網站壓力測試教程詳解

2021-03-02 軟體測試的自我修養

       Web服務處於分布式計算的核心位置,它們之間的交互通常很難測試。分布式開發、大型的開發者團隊以及對代碼日益組件化的期望都有可能使Web服務的開發變得越來越容易隱藏錯誤。這些類型的錯誤極難檢測出來。壓力測試是檢測這類代碼錯誤的一種有效方法,但是只有在壓力系統設計得比較有效的情況下才能發揮作用。本文將讓您深入了解一下這種壓力系統的基本要求。
  測試方法
  傳統的測試方法包括某種形式的簡單單元測試,通常由開發人員執行。設計這些測試需要了解軟體的內部知識,並且這些測試幾乎總是針對產品的非常小的、特定的部分。這些類型的測試非常適合與其他代碼組件極少交互,甚至沒有交互的簡單Web服務。
  功能驗證(Functional Verification)也是一種測試過程,在這個過程中,對產品原始碼了解有限的設計者進行測試以確認產品或服務的核心功能。設計這種測試是為了證明這個核心功能符合某個規範。舉個例子,我的在線拍賣顯示的是輸入的正確出價嗎?我的保險經紀人系統找到最便宜的報價了嗎?如果這些測試失敗,通常就意味著檢測到了產品的一個基本問題(這個問題通常是可以直接修復)。這種測試也是適合簡單的Web服務,使您可以檢查服務是否能夠正確執行它的各個功能。
  系統測試(System Test)通常是在功能驗證階段完成,驗證了核心功能後進行。它傾向於把整個系統作為一個整體來查找問題—弄清Web服務作為系統的一部分怎樣運作,以及Web服務相互之間如何交互。由於系統測試是在開發生命周期快結束時才進行,所以通常不能給它分配足夠的時間來完成。又因為緊張的發行日程安排以及開發的各個重要階段的後移,系統測試階段經常被忽略,並且一些通常都可以發現的、少見的錯誤都不能被檢測到。即使發現了這種錯誤,這時也來不及確定錯誤的原因並設法修復它們了。因此,在查找代碼錯誤時,必需把系統測試應用設計得儘可能高效。系統測試通常由三部分組成,它們是:
  性能(Performance):這涉及到確定相關的產品統計數據的過程。例如:每秒有多少條消息?一個服務可同時接受多少個用戶?

案例(Scenario):這是重新創建客戶所需的確切配置的過程。因此在案例中發現的任何問題都可以在客戶使用該產品之前被檢測出來。
  壓力(或稱工作負載平衡):它與另兩個部分不同,因為它被設計為通過應用很大的工作負載來使軟體超負荷運轉。如果壓力測試通過對產品保持高強度的使用(但不超過性能統計數字確定的限制)能有效地執行,那麼它就經常能夠發現許多隱蔽的錯誤,而這些錯誤用上面提到的任何其他技術都是發現不了的(這些錯誤也經常是最難修復的)。
  從檢測代碼錯誤這方面來說,可以證明這三個系統測試組件中效率最高的是壓力測試部分。但由於這個過程經常跟系統的其他要素或功能測試混淆在一起,所以這個過程涉及到的方法還沒有被正確著手處理或實現。
  壓力下的錯誤
  使用壓力測試,您有希望找到很多種用其他測試方法更難發現的錯誤。有兩種錯誤類型是:
  內存洩漏(Memory leak):一種極難檢測的現象。內存洩漏經常發生在已發行的產品中,原因很簡單,很難設計測試用例來檢測它們。使用簡單的功能測試,幾乎發現不了內存洩漏問題,因為在產品完成之前測試沒對產品進行足夠多的使用。內存洩漏通常要求操作作要重複非常多的次數以使內存消耗達到能引起注意的程度。儘管與其它程式語言(如C/C++)相比,Java程序更難引入內存洩漏錯誤,但只要程序仍保持著對對象的引用,該對象仍有可能被實例化並且它佔用的內存永遠不會被釋放。
  並發與同步(Concurrency and Synchronization):壓力測試在查找並發性問題上非常出眾,這是因為在任何一個測試生命周期中,它都應用了許多不同的代碼路徑和定時條件。一般的規則是,壓力測試運行的時間越長,涉及並應用的代碼路徑組合和定時條件就越多。當然,這也的確使得這些問題很難再現(錯誤可以在5分鐘或5天後發生)。死鎖、線程洩漏以及任何一般的同步問題通常只能在壓力測試階段被檢測出來。這些類型的問題很難通過執行單元測試來發現。開發人員不會一直考慮他或她的代碼將與其他地方的代碼(在執行單元測試時這些代碼可能還沒寫出來)進行交互。

  現有的壓力測試工具
  有許多聲稱能夠對產品進行壓力測試的可用工具目前正在開發中。被廣泛應用的是針對Web服務的那些工具。然而,這些工具中有許多只是簡單的HTML/SOAP生成器,它們模擬許多客戶機連接,並因此對Web伺服器生成高負載(這對於查找Web伺服器的問題很有用,但對於查找Web服務的問題就沒那麼有用了)。這些工具對基本的壓力測試比較有用,但它們經常是僅僅擴展功能驗證階段來重複地執行相同的功能任務。如果足夠的時間和資源可用,就可以通過創建定製構建的壓力測試系統來實現更有效的測試。由於壓力系統的設計者通常對要測試的產品和Web服務有更多的了解,所以他們將能夠確保壓力系統可以用於哪些具體的代碼區域。
  設計壓力應用
  設計試圖對Web服務進行壓力測試的壓力測試系統時,要讓它們以某種特定的方式運行代碼。這些風格超越了功能驗證,目的是要弄清楚被測試的Web服務是不是不僅能做我們認為它能做的事,而且在被施加了某些高強度壓力的情況下仍然繼續正常運行。壓力測試必須對Web服務應用四個基本條件。許多已建立的壓力系統應用了這些條件。有效的壓力測試系統將應用以下這些關鍵條件:
  重複(Repetition):或許最明顯的且最容易理解的壓力條件就是測試的重複。換句話說,測試的重複就是一遍又一遍地執行某個操作作或功能,比如重複調用一個Web服務。功能驗證測試可以用來被弄清楚一個操作作能否正常執行。而壓力測試將確定一個操作作能否正常執行,並且能否繼續在每次執行時都正常。這對於推斷一個產品是否適用於某種生產情況至關重要。客戶通常會重複使用產品,因此壓力測試應該在客戶之前發現代碼錯誤。許多最簡單的壓力系統只實現這一個條件,但簡單地擴展功能驗證測試來多次重複並不能構成一個有效的壓力測試。當與下面的一些原則結合起來使用時,重複就可以發現許多隱蔽的代碼錯誤。
  並發(Concurrency):並發是同時執行多個操作作的行為。換句話說,就是在同一時間執行多個測試,例如在同一個伺服器上同時調用許多Web服務。這個原則不一定適用於所有的產品(比如無狀態服務),但是多數軟體都具有某個並發行為或多線程行為元素,這一點只能通過執行多個代碼示例才能測出來。功能測試或單元測試幾乎不會與任何並發設計結合。壓力系統必須超越功能測試,要同時遍歷多條代碼路徑。至於怎麼做到這一點取決於具體的產品。例如,一個Web服務壓力測試需要一次模擬多個客戶機。Web服務(或者任何多線程代碼)通常會訪問多個線程實例間的一些共享數據。因額外方面的編程而增加的複雜性通常意味著代碼會具有許多因並發引起的錯誤。由於引入並發性意味著一個線程中的代碼有可能被其他線程中的代碼中斷,所以錯誤只在一個指令集以特定的順序(例如以特定的定時條件)執行時才會被發現。把這個原則與重複原則結合在一起,您可以應用許多代碼路徑和定時條件。

     量級(Magnitude):壓力系統應該應用於產品的另一個條件考慮到了每個操作作中的負載量。壓力測試可以重複執行一個操作作,但是操作作自身也要儘量給產品增加負擔。例如,一個Web服務允許客戶機輸入一條消息,您可以通過模擬輸入超長消息的客戶機來使這個單獨的操作作進行高強度的使用。換句話說就是,您增加了這個操作作的量級。這個量級總是特定於應用的,但是可以通過查找產品的可被用戶計量和修改的值來確定它。例如,數據的大小、延遲的長度、資金數量的轉移、輸入速度以及輸入的變化等等。單獨的高強度操作作自身可能發現不了代碼錯誤(或者僅能發現功能上的缺陷),但與其他壓力原則結合在一起時,您將可以增加發現問題的機會。
  隨機變化:最後一點,任何壓力系統都多多少少具有一些隨機性。如果您隨機使用前面的壓力原則中介紹的無數變化形式,您就能夠在每次測試運行時應用許多不同的代碼路徑。下面是幾個關於怎樣在測試生命周期內改變測試的示例。使用重複時,在重新啟動或重新連接服務之前,您可以改變重複操作作間的時間間隔、重複的次數,或者也可以改變被重複的Web服務的順序。使用並發,您可以改變一起執行的Web服務、同一時間運行的Web服務數目,或者也可以改變關於是運行許多不同的服務還是運行許多同樣的實例的決定。量級或許是最容易更改的—每次重複測試時都可以更改應用程式中出現的變量(例如,發送各種大小的消息或數字輸入值)。如果測試完全隨機的話,因為很難一致地重現壓力下的錯誤,所以一些系統使用基於一個固定隨機種子的隨機變化。這樣,用同一個種子,重現錯誤的機會就會更大。
  一個壓力測試通常會結合上述的所有原則,並且在允許的範圍內儘可能長時間地運行。測試被允許的執行時間越長,就可以遍歷越多的代碼路徑,並且發現的錯誤也越多。當然,一旦找到錯誤就必須診斷並修復它。由於一個代碼錯誤可以在壓力測試運行多日以後自己顯示出來,所以系統必須保證當出現錯誤時所有可用的調試信息都被生成,否則可能就必須花費同樣多的時間來重現這個錯誤。
  結束語
  測試是軟體開發過程中至關重要的部分,並且一個重要的、經常被曲解或忽略的部分是壓力測試。遵循上面詳細說明的原則,您就可以設計並實現有效的壓力測試系統,用來查找一些與您的代碼相關的、比較隱蔽的問題。無論是利用預先寫好的工具,還是創建一個完全專用的壓力系統,壓力測試都是用於查找Web服務(或其他任何程序)問題的本質方法。

「軟體測試的自我修養」每日精選推送,包括且不限於測試方法、技術、工具分享以及測試求職、筆試、面試心得,長按下方二維碼關注還可能會偶遇Uncle C為你答疑解惑,隨著時間的積累,相信同學們能和公眾號一起茁壯成長,追上那個曾經被寄予厚望的自己.


相關焦點

  • 應用WAS對web進行壓力測試實例詳解
    應用WAS對web進行壓力測試實例詳解2007-09-29 14:28 出處:PConline 作者:網絡文摘 責任編輯:gongjianhui       你的Web伺服器和應用到底能夠支持多少並發用戶訪問?在出現大量並發請求的情況下,軟體會出現問題嗎?
  • JMeter壓力測試集合點教程
    JMeter壓力測試集合點教程基本公式 線程數=QPS*time註:QPS--每秒完成請求的個數;time--每個請求響應完成平均需要時間故QPS*time就是所有請求完成響應所需要的總時間,如果需要在一秒完成所有請求的響應,所以線程數需要等於總時間值 壓力測試線程數確定 比如一個活動,大概一個小時內有
  • 如何測試一個web網站?有哪些測試點?
    最近有工作了一年多的朋友在問我,一個web頁面到底怎麼測試?我的第一感覺是震驚,天天做web測試,咋還不知道怎麼測試呢?再仔細一想,可能是我們每天忙於測試而忽略測試導致的,畢竟當局者迷,旁觀者清。下面就說一下,該從哪些角度測試一個web網站,希望給同樣不知所措的你一點提示:UI用戶界面測試,主要檢測前端頁面展示效果的,測試點參考如下:各頁面的風格是否統一各頁面的大小是否一致;同樣的LOGO圖片在各個頁面中顯示是否大小一致;頁面及圖片是否居中顯示 、各頁面的title是否正確欄目名稱、文章內容等處的文字是否正確
  • 網盤分享超新CTF培訓web網絡安全基礎入門滲透測試教程(高清1080P)完整課程資源
    雕題黑齒,得人肉以祀,以其骨為醢些我們不得不面對一個非常尷尬的事實,那就是, 網盤分享超新CTF培訓web網絡安全基礎入門滲透測試教程(高清1080P)完整課程資源因何而發生? 了解清楚網盤分享超新CTF培訓web網絡安全基礎入門滲透測試教程(高清1080P)完整課程資源到底是一種怎麼樣的存在,是解決一切問題的關鍵。 在這種困難的抉擇下?
  • Web壓力測試工具 webbench
    在運維工作中,壓力測試是一項很重要的工作。
  • 如何使用SimilarWeb分析網站數據(最新版免費教程)
    谷歌大叔團隊之前已經給大家分享過兩款專業的網站分析工具《Ahrefs使用教程》《Semrush使用教程》, 很多粉絲都喜歡這兩款功能強大、數據準確的軟體。但是由於價格過高,而且不是專業去做SEO,使用的機會比較少,所以大家問我們有沒有免費的網站數據分析軟體可以推薦,所以就有了今天的SimilarWeb使用教程,我們將會使用它的免費功能,教大家準確的來分析網站數據。 課程分為以下部分: 什麼是SimilarWeb?都有哪些功能?
  • Jmeter生成壓力測試報告
    Jmeter生成壓力測試報告根據各大招聘網站上的需求來看,熟悉Jmeter做性能測試已經幾乎成為必要條件了。那麼今天在這個給大家安利一波。怎麼使用Jmeter生成壓力測試報告呢?參數說明:-n: 非GUI模式執行JMeter-t: 執行測試文件所在的位置-l: 指定生成測試結果的保存文件,如:jtl文件格式,txt文件格式
  • 好課優選:超新CTF培訓web網絡安全基礎入門滲透測試教程(高清1080P)
    優選好課:超新CTF培訓web網絡安全基礎入門滲透測試教程(高清1080P)高清完整(有需要的找我,你就可以擁有這個課程)
  • 超新CTF培訓web網絡安全基礎入門滲透測試教程(高清1080P)(最新課程知識資源分享大全)
    你需要的,我恰好有《超新CTF培訓web網絡安全基礎入門滲透測試教程(高清1080P《超新CTF培訓web網絡安全基礎入門滲透測試教程(高清1080P)》:幫你從海量信息中省時間、找資源、獲價值| 剛好有可以諮詢了解哦!,感興趣的朋友可以加幑了解諮詢哦!   歡迎喜歡學習的朋友加入,這裡有一群愛學習的夥伴圈子,陪你學習,共同成長進步!
  • Web安全測試你知道多少
    數據驗證類型: 如果web server端提交sql語句時,不對提交的sql語句驗證,那麼一個黑客就可暗喜了。他可將提交的sql語句分割,後面加一個delete all或drop database的之類語句,能將你的資料庫內容刪個精光!我這一招還沒實驗在internet網站上,不知這樣的網站有沒有,有多少個。反正我負責的那個web系統曾經發現這樣的問題。
  • Node.js 學習資料和教程(值得收藏)
    講師專訪:淘寶樸靈談Node.jsNode.js的核心與紅利QCon北京2013 Node.js專題出品人樸靈專訪一個周末掌握IT前沿技術之node.js篇用node+express搭建多人博客教程系列
  • 關於測試Web應用程式的完整指南
    首先讓我們看看web測試清單:  1)功能測試  2)可用性測試  3)接口測試  4)兼容性測試  5)性能測試  6)安全測試  1)功能測試:  測試 - 網頁中的所有連結,資料庫連接,用於在網頁中提交或獲取用戶信息的表單
  • Web Service接口測試
    Web service 接口測試一. web Service概念Web service使用與平臺和程式語言無關的方式進行通訊的一項技術, web service 是一個接口, 他描述了一組可以在網絡上通過標準的XML消息傳遞訪問的操作,它基於xml語言協議來描述要執行的操作或者要與另外一個web 服務交換數據, 一組以web服務在面向服務體系結構中定義的web
  • 一個入門級python爬蟲教程詳解
    這篇文章主要介紹了一個入門級python爬蟲教程詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑑價值,需要的朋友可以參考下
  • 前端新手教程!如何快速入門web前端
    所以這篇文章我想分享一些初學者應該怎麼學web,怎麼入門的個人經驗。心態和個人的一些學習方法先說心態問題,經常看到網上很多說前端容易,所以想來學習的。其實,目前隨著前後端分離,前端也逐漸趨向工程化,並不是嵌套在後端項目中寫寫htmlcss就可以的了,需要學習的東西也越來越多。
  • Web測試和APP測試有什麼區別?
    testkuaibao | 自學軟體測試公眾號    不管是傳統行業的web測試,還是app測試,都離不開測試的基礎知識,
  • 必須知道的App測試和Web測試的區別
    隨著移動網際網路的極速發展,移動應用更是呈指數增長,在app測試方面更是需求大漲,已經完全超過以往web測試,今天就簡單說說兩者的區別,希望對測試攻城獅們有幫助。相同點不管是傳統行業的web測試,還是新興的手機app測試,都離不開測試的基礎知識,即是不管怎麼變,測試的原理依然會融入在這兩者當中。
  • 2020暗月滲透測試全棧學習班
    實戰阿里雲src響應中心主體內容下div+css基礎學習11_實戰阿里雲src響應中心底部製作第三天 資料庫學習七課資料庫01-mysql資料庫的基本操作資料庫02-mysql資料庫數據表的操作資料庫03-mysql資料庫數據的增刪改查資料庫04-mysql資料庫數據的查詢語句資料庫05-mysql資料庫子查詢資料庫06-mysql的內連結 左連接 右連接資料庫07-IFORMATION_SCHEMA詳解和
  • 黑客如何破解你的網站Web伺服器?
    為此,大多數組織都有網站。大多數網站都存儲有價值的信息,如信用卡號,電子郵件地址和密碼等。這使他們成為攻擊者的目標。汙損的網站也可用於傳播宗教或政治意識形態等。 在本文中,我們將向您介紹toweb伺服器黑客技術以及如何保護伺服器免受此類攻擊。
  • Spring Boot中使用Mockito進行Web測試 - 第339篇
    一、概述       在web應用程式中,對Controller層的測試一般有兩種方法:(1)發送http請求;(2)模擬http請求對象;今天我們來看下如何用Mock對象測試Controller層的代碼。