聲明:以下問題是我從事性能測(cè)試工作以來所遇到的一些常見問題,其解答均是我根據(jù)實(shí)際工作經(jīng)驗(yàn),或者我所獲得的各種資源(報(bào)刊書籍、論壇、QQ、MSN等)得到的信息整理而成,其回答內(nèi)容主要代表我個(gè)人觀點(diǎn),并非標(biāo)準(zhǔn)答案,讀者如有不同意見,歡迎批評(píng)指教。
Q:并發(fā)用戶數(shù)和集合點(diǎn)有必然聯(lián)系嗎?在性能測(cè)試中必須使用集合點(diǎn)來測(cè)試嗎?
A:并發(fā)用戶數(shù),顧名思義,就是同時(shí)操作的用戶,這里的“操作”可以指對(duì)系統(tǒng)真正的操作,也可以只是連接(此時(shí)通常叫作“并發(fā)連接數(shù)”),而集合點(diǎn)是一種特殊情況下的并發(fā),多用于測(cè)試系統(tǒng)在瞬間加壓的表現(xiàn)。因此,并發(fā)用戶數(shù)和集合點(diǎn)有聯(lián)系,但并非必然的聯(lián)系,在測(cè)試并發(fā)用戶的性能測(cè)試場(chǎng)景中,可以不必設(shè)置集合點(diǎn),這將視測(cè)試目標(biāo)和測(cè)試策略而定。
Q:不設(shè)置集合點(diǎn)的測(cè)試,能代表是“并發(fā)”操作嗎?
A:有這樣一種說法,設(shè)置集合點(diǎn)是為了確保“嚴(yán)格意義上”的并發(fā),其實(shí)從本質(zhì)上看,這主要是一個(gè)看問題的粒度大小的問題。集合點(diǎn)的作用是通過工具的控制,確保一個(gè)請(qǐng)求嚴(yán)格地“同時(shí)”從前臺(tái)提交到后臺(tái)。可是如果微觀地看,是不存在嚴(yán)格意義上的并發(fā)的,即使在客戶端通過設(shè)置集合點(diǎn)的方式將100個(gè)請(qǐng)求同時(shí)提交到后臺(tái),經(jīng)過網(wǎng)絡(luò)上的傳輸消耗,可能它們并不是同時(shí)到達(dá)的,而即便100個(gè)請(qǐng)求同時(shí)到達(dá)服務(wù)器端,受到中間件和應(yīng)用系統(tǒng)、數(shù)據(jù)庫的各種連接池、緩沖區(qū),CPU處理隊(duì)列等的限制,也可能在服務(wù)器端產(chǎn)生等待的。因此,嚴(yán)格意義上的“并發(fā)”可以說是不存在的,我們需要做的是在可以接受的粒度范圍內(nèi)取得一個(gè)最佳的平衡點(diǎn),站在這個(gè)平衡點(diǎn)的層面上去看待“并發(fā)”這個(gè)問題。
性能測(cè)試無非有兩個(gè)目的,一是評(píng)測(cè),二是調(diào)優(yōu)。
在以評(píng)測(cè)為目的的性能測(cè)試中,用戶更關(guān)心的是業(yè)務(wù)上的并發(fā),也就是真實(shí)業(yè)務(wù)場(chǎng)景的并發(fā)情況,這種情況下只要按照業(yè)務(wù)操作的模式去設(shè)置場(chǎng)景就可以了,并不需要設(shè)置集合點(diǎn)。
集合點(diǎn)是一種特殊情況下的并發(fā),通常是在以調(diào)優(yōu)為目的的性能測(cè)試中才會(huì)用得到,目的是有針對(duì)性地對(duì)某個(gè)可能存在性能問題的模塊施壓,以便找到性能瓶頸。
集合點(diǎn)在我實(shí)際的測(cè)試過程中用得并不多。
Q:性能測(cè)試的策略有哪些?
A:通常情況下存在性能調(diào)優(yōu)和性能評(píng)測(cè)兩種性能測(cè)試策略。----《軟件評(píng)測(cè)師教程》(清華大學(xué)出版社)第8章 應(yīng)用負(fù)載壓力測(cè)試Page 223
Zee:
關(guān)于集合點(diǎn),我一直覺得沒有什么可爭議的,這兩天看到幾個(gè)帖子在說這個(gè)東西。有一點(diǎn)我想大家都是認(rèn)同的:集合是相對(duì)的集合。
集合是在產(chǎn)生負(fù)載的機(jī)器上的集合。如果考慮網(wǎng)絡(luò),中間件等等的因素。到服務(wù)器肯定不會(huì)是同一時(shí)間點(diǎn),那于是就有人希望能更接近在服務(wù)器端實(shí)現(xiàn)并發(fā)的操作。認(rèn)為這才是真正的并發(fā)。
我覺得首先要做的是分析應(yīng)用系統(tǒng),到底你想做的是什么。
比如說,你想讓某個(gè)URL能達(dá)到1000個(gè)同時(shí)請(qǐng)求的目的。這樣的目標(biāo)就比較明確了。
而在討論集合點(diǎn)的時(shí)候,大家很少拿具體的東西來舉個(gè)例子。這樣有點(diǎn)說不清楚。要想達(dá)到并發(fā)。我覺得應(yīng)該更具體的分析應(yīng)用。再來定下目標(biāo)來做。而不是一直在討論LR如何能實(shí)現(xiàn)。
xingcyx:
因?yàn)樵趯?shí)踐中,我經(jīng)常會(huì)碰到這樣的情況:
測(cè)試需求說,該系統(tǒng)應(yīng)支持200個(gè)并發(fā)用戶。
那么我們就開始測(cè),錄制好腳本,下一步就是在場(chǎng)景中執(zhí)行了,在控制臺(tái)中設(shè)置某腳本并發(fā)用戶數(shù)為200,測(cè)試結(jié)果為通過或未通過。此時(shí)爭議就來了:這200個(gè)用戶的腳本如果執(zhí)行通過,測(cè)試結(jié)果可以接受,是否可以說這個(gè)系統(tǒng)支持了200個(gè)并發(fā)呢?
Zee:
你說的是不是太過泛泛?如果用戶說這系統(tǒng)要支持200個(gè)并發(fā)。那做性能測(cè)試的人知道這句話有很大的出入。
大漠飛鷹:
測(cè)試前肯定要了解需求,或者說是測(cè)試目的。
就說明“該系統(tǒng)應(yīng)支持200個(gè)并發(fā)用戶。”, 這種需求嚴(yán)格意義上來說是不合格的需求,因?yàn)槊枋霾粔蚯逦^于模糊等。
當(dāng)然,在實(shí)際中,這類需求到了我們測(cè)試人的手里也是常有的,一般就當(dāng)普遍的情況來出來。
比如,web系統(tǒng),就按2/5/8,或者2/5/10來處理,如果能通過就pass,否則就讓開發(fā)人員調(diào)優(yōu)。
xingcyx:
那么樓上的兩位就請(qǐng)說說,你們實(shí)際的工作中,需求是怎么提出來的,或者你們是怎么去確定出來的,到了最后確定了的測(cè)試需求是個(gè)什么樣子?給出來大家參考一下。
Zee:
從集合點(diǎn)到并發(fā)數(shù)的確定。我覺得這其中的轉(zhuǎn)換最主要的地方在于分析業(yè)務(wù)。
比如用戶說了:要求200個(gè)用戶并發(fā)。
那要問清楚的就是,200個(gè)用戶是個(gè)什么樣的比例,有多少人在干這個(gè),有多人在干那個(gè),按百分比,用不同的腳本來跑。
那再來想一下客戶。他關(guān)心的是200個(gè)用戶在服務(wù)器上同時(shí)點(diǎn)同一個(gè)URL或者某一個(gè)相同的資源?這個(gè)客戶我想大多不會(huì)關(guān)心。而他想要的就是我有200個(gè)用戶在線的時(shí)候。響應(yīng)時(shí)間不至于讓人不可接受。至于多少才不可接受。按平常人的心理承受能力來衡量就可以了。再或者有其他的說法,就是200人同時(shí)點(diǎn)同一 URL或者請(qǐng)求同一資源,我想可以通過計(jì)算來增加vuser的數(shù)量或者集合呀,或者其他的方法來努力的向這個(gè)目標(biāo)靠近。
如果說非要在服務(wù)器上這個(gè)時(shí)間并發(fā)這么多的用戶。我覺得只能盡量把它縮小到一個(gè)時(shí)間段內(nèi)。而這樣做我覺得并不是從分析業(yè)務(wù)出發(fā)的
xingcyx:
樓上說的是最常見的一種情況,在這種測(cè)試需求下,我會(huì)設(shè)置一個(gè)混合場(chǎng)景來測(cè)試,也就是按照做不同事情的用戶的百分比去設(shè)置。
但會(huì)有另外一些時(shí)候,并不是一個(gè)實(shí)際的應(yīng)用系統(tǒng),可能是一個(gè)開發(fā)平臺(tái),或者工作引擎等,它涉及的性能的概念會(huì)更偏向底層一些,這個(gè)時(shí)候可能就不是像一般的應(yīng)用系統(tǒng)那樣,設(shè)置一個(gè)混合場(chǎng)景來測(cè)試那么簡單了。
大漠飛鷹:
一般說的并發(fā)數(shù)指的是業(yè)務(wù)并發(fā),而不是服務(wù)器端得并發(fā)數(shù)。
cc_lion:
一個(gè)業(yè)務(wù)并發(fā),一個(gè)服務(wù)端最大并發(fā)數(shù),針對(duì)測(cè)試目標(biāo)不一樣選擇其中
測(cè)最大并發(fā)數(shù)可能有意外收獲哦!!資源爭用,DEADLOCK,等
并發(fā)中有兩個(gè)概念,一個(gè)是業(yè)務(wù)并發(fā)數(shù),指的是客戶端的訪問用戶量;
還有一個(gè)是服務(wù)器端的并發(fā)數(shù),指的是服務(wù)器端的處理數(shù)量;
實(shí)際操作中,我們比較方便控制客戶端的并發(fā)數(shù),而服務(wù)器端的則幾乎無法控制和操作,因此我們平時(shí)說的并發(fā)數(shù)指的都是業(yè)務(wù)并發(fā)數(shù)。
A:性能測(cè)試是一個(gè)涵義很廣的概念,它包括負(fù)載測(cè)試、壓力測(cè)試、強(qiáng)度測(cè)試、可伸縮性/擴(kuò)展性測(cè)試等。
1.負(fù)載測(cè)試:通過逐步增加系統(tǒng)負(fù)載,最終確定在滿足性能指標(biāo)的情況下,系統(tǒng)能承受的最大負(fù)載量的測(cè)試。 2.壓力測(cè)試:通過逐步增加系統(tǒng)負(fù)載,最終確定在什么負(fù)載條件下系統(tǒng)性能將處于崩潰狀態(tài),以此獲得系統(tǒng)能提供的最大服務(wù)級(jí)別的測(cè)試。 3.強(qiáng)度測(cè)試:又稱疲勞強(qiáng)度測(cè)試,在系統(tǒng)穩(wěn)定運(yùn)行的情況下能夠支持的最大并發(fā)用戶數(shù),持續(xù)執(zhí)行一段時(shí)間業(yè)務(wù),通過綜合分析,確定系統(tǒng)處理最大工作量強(qiáng)度性能的過程。4.可伸縮性(Scalability)是衡量一個(gè)系統(tǒng)處理能力或容量的屬性,舉個(gè)例子說,就是當(dāng)為一個(gè)系統(tǒng)增加了資源——特別是硬件資源后,系統(tǒng)可以承受更大的負(fù)載,并獲得更大的 吞吐量,這個(gè)系統(tǒng)可以被稱為 Scalable System (可伸縮的系統(tǒng))。例如測(cè)試一個(gè)使用了負(fù)載均衡和集群技術(shù)的系統(tǒng),測(cè)試當(dāng)增加新的 Cluster 之后是否可以承受更大的負(fù)載,并獲得相應(yīng)的吞吐量提升。
Q:“并發(fā)用戶數(shù)”在英文中是如何表示的?
A:并發(fā)用戶數(shù)量:the number of concurrent users
最佳并發(fā)用戶數(shù)量:the optimum number of concurrent users
最大并發(fā)用戶數(shù)量:the maximum number of concurrent users
峰值并發(fā)用戶數(shù)量:the peak number of concurrent users
平均并發(fā)用戶數(shù)量:the average number of concurrent users
Q:“注冊(cè)用戶數(shù)”和“最大并發(fā)用戶數(shù)”有聯(lián)系嗎?
A: 注冊(cè)用戶數(shù)和最大并發(fā)用戶數(shù)之間本身沒有必然聯(lián)系。一般根據(jù)特定時(shí)間段的峰值來進(jìn)行計(jì)算。如注冊(cè)用戶數(shù)為2000,按照行業(yè)標(biāo)準(zhǔn)一般峰值使用人數(shù)為5%-10%,也可以通過前期項(xiàng)目進(jìn)行統(tǒng)計(jì)后,得到較為準(zhǔn)確的百分?jǐn)?shù)。
并發(fā)用戶是從一個(gè)更大的概念上說的,可以說是在一個(gè)用戶層次,而集合點(diǎn)是在事務(wù)層次的,這一點(diǎn)在沒有運(yùn)行腳本終可以設(shè)置集合點(diǎn);
如果對(duì)于一個(gè)事務(wù)有10用戶并發(fā)設(shè)置集合點(diǎn)也在次事務(wù),此時(shí)設(shè)置不設(shè)置沒有區(qū)別,但是如果有一個(gè)腳本有多個(gè)事務(wù),而又對(duì)一個(gè)事務(wù)設(shè)置了集合點(diǎn)的話,這樣就會(huì)又確別,對(duì)于此腳本中的其他事務(wù)用戶可能不是并發(fā),但是對(duì)于集合點(diǎn)的事務(wù)一定是并發(fā)的。
以下是Avalache用戶手冊(cè)中對(duì)于SimUsers的解釋:
An abbreviation for simulated or virtual users. SimUser applies to a user processing through an Action list one time. This load specification generates enough load to reach and maintain a target number of concurrent simulated users. It allows you to determine the maximum number of concurrent users your device, infrastructure, or system can handle.
Use this specification if you want to keep applying load even after the device under test fails. The amount of traffic generated depends on the performance of the device under test. As the system slows down due to overloading, generally each user takes longer to process through the URL list, and the load "throttles back" and generates fewer new users.
并發(fā)用戶數(shù)是指系統(tǒng)的提供服務(wù)的能力,即同時(shí)能夠支持的在線用戶數(shù)量;從測(cè)試的角度來講,需要模擬足夠多的用戶去同時(shí)訪問DUT,來確認(rèn)最大并發(fā)用戶數(shù)。