自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

進(jìn)行Web網(wǎng)站壓力測(cè)試教程詳解

開(kāi)發(fā) 前端
Web服務(wù)處于分布式計(jì)算的核心位置,它們之間的交互通常很難測(cè)試。分布式開(kāi)發(fā)、大型的開(kāi)發(fā)者團(tuán)隊(duì)以及對(duì)代碼日益組件化的期望都有可能使 Web服務(wù)的開(kāi)發(fā)變得越來(lái)越容易隱藏錯(cuò)誤。本文是一篇進(jìn)行Web網(wǎng)站壓力測(cè)試教程。

Web網(wǎng)站壓力測(cè)試過(guò)程中的錯(cuò)誤極難檢測(cè)出來(lái)。壓力測(cè)試是檢測(cè)這類代碼錯(cuò)誤的一種有效方法,但是只有在壓力系統(tǒng)設(shè)計(jì)得比較有效的情況下 才能發(fā)揮作用。本文將讓您深入了解一下這種壓力系統(tǒng)的基本要求。

Web網(wǎng)站壓力測(cè)試教程

傳統(tǒng)的測(cè)試方法包括某種形式的簡(jiǎn)單 單元測(cè)試 ,通常由開(kāi)發(fā)人員執(zhí)行。設(shè)計(jì)這些測(cè)試需要了解軟件的內(nèi)部知識(shí),并且這些測(cè)試幾乎總是針對(duì)產(chǎn)品的非常小的、特定的部分。這些類型的測(cè)試非常適合與其他代碼組件極少交互,甚至沒(méi)有交互的簡(jiǎn)單 Web 服務(wù)。

功能驗(yàn)證(Functional Verification)也 是一種測(cè)試過(guò)程,在這個(gè)過(guò)程中,對(duì)產(chǎn)品源代碼了解有限的設(shè)計(jì)者進(jìn)行測(cè)試以確認(rèn)產(chǎn)品或服務(wù)的核心功能。設(shè)計(jì)這種測(cè)試是為了證明這個(gè)核心功能符合某個(gè)規(guī)范。舉 個(gè)例子,我的在線拍賣顯示的是輸入的正確出價(jià)嗎? 我的保險(xiǎn)經(jīng)紀(jì)人系統(tǒng)找到***的報(bào)價(jià)了嗎?如果這些測(cè)試失敗,通常就意味著檢測(cè)到了產(chǎn)品的一個(gè)基本問(wèn)題(這個(gè)問(wèn)題通常是可以直接修復(fù))。這種測(cè)試也是適合 簡(jiǎn)單的 Web 服務(wù),使您可以檢查服務(wù)是否能夠正確執(zhí)行它的各個(gè)功能。

系統(tǒng)測(cè)試(System Test)通常是在功能驗(yàn) 證階段完成,驗(yàn)證了核心功能后進(jìn)行。它傾向于把整個(gè)系統(tǒng)作為一個(gè)整體來(lái)查找問(wèn)題 — 弄清 Web 服務(wù)作為系統(tǒng)的一部分怎樣運(yùn)作,以及 Web 服務(wù)相互之間如何交互。由于系統(tǒng)測(cè)試是在開(kāi)發(fā)生命周期快結(jié)束時(shí)才進(jìn)行,所以通常不能給它分配足夠的時(shí)間來(lái)完成。又因?yàn)榫o張的發(fā)行日程安排以及開(kāi)發(fā)的各個(gè)重 要階段的后移,系統(tǒng)測(cè)試階段經(jīng)常被忽略,并且一些通常都可以發(fā)現(xiàn)的、少見(jiàn)的錯(cuò)誤都不能被檢測(cè)到。即使發(fā)現(xiàn)了這種錯(cuò)誤,這時(shí)也來(lái)不及確定錯(cuò)誤的原因并設(shè)法修 復(fù)它們了。因此,在查找代碼錯(cuò)誤時(shí),必需把系統(tǒng)測(cè)試應(yīng)用設(shè)計(jì)得盡可能高效。系統(tǒng)測(cè)試通常由三部分組成,它們是:

性能(Performance):這涉及到確定相關(guān)的產(chǎn)品統(tǒng)計(jì)數(shù)據(jù)的過(guò)程。例如:每秒有多少條消息?一個(gè)服務(wù)可同時(shí)接受多少個(gè)用戶?

案例(Scenario):這是重新創(chuàng)建客戶所需的確切配置的過(guò)程。因此在案例中發(fā)現(xiàn)的任何問(wèn)題都可以在客戶使用該產(chǎn)品之前被檢測(cè)出來(lái)。

壓力(或稱工作負(fù)載平衡):它 與另兩個(gè)部分不同,因?yàn)樗辉O(shè)計(jì)為通過(guò)應(yīng)用很大的工作負(fù)載來(lái)使軟件超負(fù)荷運(yùn)轉(zhuǎn)。如果壓力測(cè)試通過(guò)對(duì)產(chǎn)品保持高強(qiáng)度的使用(但不超過(guò)性能統(tǒng)計(jì)數(shù)字確定的限 制)能有效地執(zhí)行,那么它就經(jīng)常能夠發(fā)現(xiàn)許多隱蔽的錯(cuò)誤,而這些錯(cuò)誤用上面提到的任何其他技術(shù)都是發(fā)現(xiàn)不了的(這些錯(cuò)誤也經(jīng)常是最難修復(fù)的)。

從檢測(cè)代碼錯(cuò)誤這方面來(lái)說(shuō),可以證明這三個(gè)系統(tǒng)測(cè)試組件中效率***的是 壓力測(cè)試 部分。但由于這個(gè)過(guò)程經(jīng)常跟系統(tǒng)的其他要素或功能測(cè)試混淆在一起,所以這個(gè)過(guò)程涉及到的方法還沒(méi)有被正確著手處理或?qū)崿F(xiàn)。
壓力下的錯(cuò)誤

使用壓力測(cè)試,您有希望找到很多種用其他測(cè)試方法更難發(fā)現(xiàn)的錯(cuò)誤。有兩種錯(cuò)誤類型是:

內(nèi)存泄漏(Memory leak): 一種極難檢測(cè)的現(xiàn)象。內(nèi)存泄漏經(jīng)常發(fā)生在已發(fā)行的產(chǎn)品中,原因很簡(jiǎn)單,很難設(shè)計(jì)測(cè)試 用例來(lái)檢測(cè)它們。使用簡(jiǎn)單的功能測(cè)試,幾乎發(fā)現(xiàn)不了內(nèi)存泄漏問(wèn)題,因?yàn)樵诋a(chǎn)品完成之前測(cè)試沒(méi)對(duì)產(chǎn)品進(jìn)行足夠多的使用。內(nèi)存泄漏通常要求操作要重復(fù)非常多的 次數(shù)以使內(nèi)存消耗達(dá)到能引起注意的程度。盡管與其它編程語(yǔ)言(如 C/C++)相比,Java 程序更難引入內(nèi)存泄漏錯(cuò)誤,但只要程序仍保持著對(duì)對(duì)象的引用,該對(duì)象仍有可能被實(shí)例化并且它占用的內(nèi)存永遠(yuǎn)不會(huì)被釋放。

并發(fā)與同步(Concurrency and Synchronization):壓力測(cè)試在查找并發(fā)性問(wèn)題上非常出眾,這是因?yàn)樵谌魏我粋€(gè)測(cè)試生命周期中,它都應(yīng)用了許多不同的代碼路徑和定時(shí)條件。一般的規(guī)則是,壓力測(cè)試運(yùn)行的時(shí)間越 長(zhǎng),涉及并應(yīng)用的代碼路徑組合和定時(shí)條件就越多。當(dāng)然,這也的確使得這些問(wèn)題很難再現(xiàn)(錯(cuò)誤可以在 5 分鐘或 5 天后發(fā)生)。死鎖、線程泄漏以及任何一般的同步問(wèn)題通常只能在壓力測(cè)試階段被檢測(cè)出來(lái)。這些類型的問(wèn)題很難通過(guò)執(zhí)行單元測(cè)試來(lái)發(fā)現(xiàn)。開(kāi)發(fā)人員不會(huì)一直考慮 他或她的代碼將與其他地方的代碼(在執(zhí)行單元測(cè)試時(shí)這些代碼可能還沒(méi)寫(xiě)出來(lái))進(jìn)行交互。

現(xiàn)有的壓力測(cè)試工具

有許多聲稱能夠?qū)?產(chǎn)品進(jìn)行壓力測(cè)試的可用工具目前正在開(kāi)發(fā)中。被廣泛應(yīng)用的是針對(duì) Web 服務(wù)的那些工具。然而,這些工具中有許多只是簡(jiǎn)單的 HTML/SOAP 生成器,它們模擬許多客戶機(jī)連接,并因此對(duì) Web 服務(wù)器生成高負(fù)載(這對(duì)于查找 Web 服務(wù)器的問(wèn)題很有用,但對(duì)于查找 Web 服務(wù)的問(wèn)題就沒(méi)那么有用了)。這些工具對(duì)基本的壓力測(cè)試比較有用,但它們經(jīng)常是僅僅擴(kuò)展功能驗(yàn)證階段來(lái)重復(fù)地執(zhí)行相同的功能任務(wù)。如果足夠的時(shí)間和資源可 用,就可以通過(guò)創(chuàng)建定制構(gòu)建的壓力測(cè)試系統(tǒng)來(lái)實(shí)現(xiàn)更有效的測(cè)試。由于壓力系統(tǒng)的設(shè)計(jì)者通常對(duì)要測(cè)試的產(chǎn)品和 Web 服務(wù)有更多的了解,所以他們將能夠確保壓力系統(tǒng)可以用于哪些具體的代碼區(qū)域。

設(shè)計(jì)壓力應(yīng)用

設(shè)計(jì)試圖對(duì) Web 服務(wù)進(jìn)行壓力測(cè)試的壓力測(cè)試系統(tǒng)時(shí),要讓它們以某種特定的方式運(yùn)行代碼。這些風(fēng)格超越了功能驗(yàn)證,目的是要弄清楚被測(cè)試的 Web 服務(wù)是不是不僅能做我們認(rèn)為它能做的事,而且在被施加了某些高強(qiáng)度壓力的情況下仍然繼續(xù)正常運(yùn)行。壓力測(cè)試必須對(duì) Web 服務(wù)應(yīng)用四個(gè)基本條件。許多已建立的壓力系統(tǒng)應(yīng)用了這些條件。有效的壓力測(cè)試系統(tǒng)將應(yīng)用以下這些關(guān)鍵條件:

重復(fù)(Repetition): 或 許最明顯的且最容易理解的壓力條件就是測(cè)試的重復(fù)。換句話說(shuō),測(cè)試的重復(fù)就是一遍又一遍地執(zhí)行某個(gè)操作或功能,比如重復(fù)調(diào)用一個(gè) Web 服務(wù)。功能驗(yàn)證測(cè)試可以用來(lái)被弄清楚一個(gè)操作能否正常執(zhí)行。而壓力測(cè)試將確定一個(gè)操作能否正常執(zhí)行,并且能否繼續(xù)在每次執(zhí)行時(shí)都正常。這對(duì)于推斷一個(gè)產(chǎn)品 是否適用于某種生產(chǎn)情況至關(guān)重要??蛻敉ǔ?huì)重復(fù)使用產(chǎn)品,因此壓力測(cè)試應(yīng)該在客戶之前發(fā)現(xiàn)代碼錯(cuò)誤。許多最簡(jiǎn)單的壓力系統(tǒng)只實(shí)現(xiàn)這一個(gè)條件,但簡(jiǎn)單地?cái)U(kuò) 展功能驗(yàn)證測(cè)試來(lái)多次重復(fù)并不能構(gòu)成一個(gè)有效的壓力測(cè)試。當(dāng)與下面的一些原則結(jié)合起來(lái)使用時(shí),重復(fù)就可以發(fā)現(xiàn)許多隱蔽的代碼錯(cuò)誤。

并發(fā)(Concurrency):并 發(fā)是同時(shí)執(zhí)行多個(gè)操作的行為。換句話說(shuō),就是在同一時(shí)間執(zhí)行多個(gè)測(cè)試,例如在同一個(gè)服務(wù)器上同時(shí)調(diào)用許多 Web 服務(wù)。這個(gè)原則不一定適用于所有的產(chǎn)品(比如無(wú)狀態(tài)服務(wù)),但是多數(shù)軟件都具有某個(gè)并發(fā)行為或多線程行為元素,這一點(diǎn)只能通過(guò)執(zhí)行多個(gè)代碼示例才能測(cè)出 來(lái)。功能測(cè)試或單元測(cè)試幾乎不會(huì)與任何并發(fā)設(shè)計(jì)結(jié)合。壓力系統(tǒng)必須超越功能測(cè)試,要同時(shí)遍歷多條代碼路徑。至于怎么做到這一點(diǎn)取決于具體的產(chǎn)品。例如,一 個(gè) Web 服務(wù)壓力測(cè)試需要一次模擬多個(gè)客戶機(jī)。Web 服務(wù)(或者任何多線程代碼)通常會(huì)訪問(wèn)多個(gè)線程實(shí)例間的一些共享數(shù)據(jù)。因額外方面的編程而增加的復(fù)雜性通常意味著代碼會(huì)具有許多因并發(fā)引起的錯(cuò)誤。由于引 入并發(fā)性意味著一個(gè)線程中的代碼有可能被其他線程中的代碼中斷,所以錯(cuò)誤只在一個(gè)指令集以特定的順序(例如以特定的定時(shí)條件)執(zhí)行時(shí)才會(huì)被發(fā)現(xiàn)。把這個(gè)原 則與重復(fù)原則結(jié)合在一起,您可以應(yīng)用許多代碼路徑 和 定時(shí)條件。

量級(jí)(Magnitude):壓力系統(tǒng)應(yīng)該應(yīng)用于產(chǎn)品的另一個(gè)條件考慮到了每個(gè)操作中的負(fù)載量。壓力測(cè)試可以重復(fù)執(zhí)行一個(gè)操作,但是操作自身也要盡量給產(chǎn)品增加負(fù)擔(dān)。例如,一個(gè)Web服務(wù)允許客戶機(jī)輸入一條消息,您可以通過(guò)模擬輸入超長(zhǎng)消息的客戶機(jī)來(lái)使這個(gè)單獨(dú)的操作進(jìn)行高強(qiáng)度的使用。換句話說(shuō)就是,您增加了這個(gè)操作的量級(jí)。這個(gè)量級(jí) 總是特定于應(yīng)用的,但是可以通過(guò)查找產(chǎn)品的可被用戶計(jì)量和修改的值來(lái)確定它—例如,數(shù)據(jù)的大小、延遲的長(zhǎng)度、資金數(shù)量的轉(zhuǎn)移、輸入速度以及輸入的變化等等。單獨(dú)的高強(qiáng)度操作自身可能發(fā)現(xiàn)不了代碼錯(cuò)誤(或者僅能發(fā)現(xiàn)功能上的缺陷), 但與其他壓力原則結(jié)合在一起時(shí),您將可以增加發(fā)現(xiàn)問(wèn)題的機(jī)會(huì)。

隨機(jī)變化:***一點(diǎn),任何壓力系統(tǒng)都多多 少少具有一些隨機(jī)性。如果您隨機(jī)使用前面的壓力原則中介紹的無(wú)數(shù)變化形式,您就能夠在每次測(cè)試運(yùn)行時(shí)應(yīng)用許多不同的代碼路徑。下面是幾個(gè)關(guān)于怎樣在測(cè)試生 命周期內(nèi)改變測(cè)試的示例。使用重復(fù)時(shí),在重新啟動(dòng)或重新連接服務(wù)之前,您可以改變重復(fù)操作間的時(shí)間間隔、重復(fù)的次數(shù),或者也可以改變被重復(fù)的 Web 服務(wù)的順序。使用并發(fā),您可以改變一起執(zhí)行的 Web 服務(wù)、同一時(shí)間運(yùn)行的 Web 服務(wù)數(shù)目,或者也可以改變關(guān)于是運(yùn)行許多不同的服務(wù)還是運(yùn)行許多同樣的實(shí)例的決定。量級(jí)或許是最容易更改的 — 每次重復(fù)測(cè)試時(shí)都可以更改應(yīng)用程序中出現(xiàn)的變量(例如,發(fā)送各種大小的消息或數(shù)字輸入值)。如果測(cè)試完全隨機(jī)的話,因?yàn)楹茈y一致地重現(xiàn)壓力下的錯(cuò)誤,所以 一些系統(tǒng)使用基于一個(gè)固定隨機(jī)種子的隨機(jī)變化。這樣,用同一個(gè)種子,重現(xiàn)錯(cuò)誤的機(jī)會(huì)就會(huì)更大。

一個(gè)壓力測(cè)試通常會(huì)結(jié)合上述的所 有原則,并且在允許的范圍內(nèi)盡可能長(zhǎng)時(shí)間地運(yùn)行。測(cè)試被允許的執(zhí)行時(shí)間越長(zhǎng),就可以遍歷越多的代碼路徑,并且發(fā)現(xiàn)的錯(cuò)誤也越多。當(dāng)然,一旦找到錯(cuò)誤就必須 診斷并修復(fù)它。由于一個(gè)代碼錯(cuò)誤可以在壓力測(cè)試運(yùn)行多日以后自己顯示出來(lái),所以系統(tǒng)必須保證當(dāng)出現(xiàn)錯(cuò)誤時(shí)所有可用的調(diào)試信息都被生成 — 否則可能就必須花費(fèi)同樣多的時(shí)間來(lái)重現(xiàn)這個(gè)錯(cuò)誤。

Web網(wǎng)站壓力測(cè)試教程結(jié)束語(yǔ)

測(cè)試是軟件開(kāi)發(fā)過(guò)程中至關(guān)重要 的部分,并且一個(gè)重要的、經(jīng)常被曲解或忽略的部分是壓力測(cè)試。遵循上面詳細(xì)說(shuō)明的原則,您就可以設(shè)計(jì)并實(shí)現(xiàn)有效的壓力測(cè)試系統(tǒng),用來(lái)查找一些與您的代碼相 關(guān)的、比較隱蔽的問(wèn)題。無(wú)論是利用預(yù)先寫(xiě)好的工具,還是創(chuàng)建一個(gè)完全專用的壓力系統(tǒng),壓力測(cè)試都是用于查找 Web 服務(wù)(或其他任何程序)問(wèn)題的本質(zhì)方法,并能最終提高您的軟件產(chǎn)品質(zhì)量。

【編輯推薦】

  1. JSP Web開(kāi)發(fā)技術(shù)的優(yōu)勢(shì)與技術(shù)難點(diǎn)分析
  2. 安裝和配置Web服務(wù)器和JSP引擎
  3. Web開(kāi)發(fā)須知JSP技術(shù)
  4. JSP變量在規(guī)范中稱作范圍變量
  5. 詳解JSP技術(shù)的方法
責(zé)任編輯:彭凡 來(lái)源: 51CTO論壇
相關(guān)推薦

2017-10-11 17:25:03

webwebbenchlnmp

2016-09-14 11:09:06

Web工具運(yùn)維

2011-08-30 11:09:26

MySQL ProxyLua

2023-03-30 16:50:18

2009-08-27 14:09:09

布線測(cè)試跳線測(cè)試串?dāng)_測(cè)試

2011-08-03 11:17:50

iOS程序 測(cè)試

2023-03-17 16:32:51

測(cè)試軟件開(kāi)發(fā)

2023-07-17 13:57:05

2023-06-05 07:49:13

?左移測(cè)試敏捷

2021-01-05 08:00:00

Windows 10工具GPU

2019-07-24 09:00:00

New Relic性能工程壓力測(cè)試

2020-07-07 13:00:00

Linux壓力測(cè)試

2023-06-06 16:10:11

2011-07-28 09:49:50

IOS IOS 4 UI

2015-07-27 18:19:22

Linuxstress參數(shù)

2011-07-18 13:11:53

2023-06-27 17:50:22

2009-01-06 18:57:38

2012-06-25 14:30:48

Web

2019-03-15 09:17:22

Web測(cè)試工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)