看到51上三個高手Zee, 大漠飛鷹,,xingcyx的一場非常精彩的關于并發(fā)用戶數(shù)和集合點的討論,很有意義,。如果對這兩個概念不清楚的朋友,,一定要仔細領悟了。 故事開始于xingcyx的一番話: 聲明:以下的問答是我根據(jù)實際工作經(jīng)驗和通過各種途徑得到的信息而整理的,,其回答內(nèi)容主要代表我個人觀點,,并非標準答案,讀者如有不同意見,,歡迎批評指教,。 Q:并發(fā)用戶數(shù)和集合點有必然聯(lián)系嗎?在性能測試中必須使用集合點來測試嗎,? A:并發(fā)用戶數(shù),,顧名思義,就是同時操作的用戶,,這里的“操作”可以指對系統(tǒng)真正的操作,,也可以只是連接(此時通常叫作“并發(fā)連接數(shù)”),而集合點是一種特殊情況下的并發(fā),,多用于測試系統(tǒng)在瞬間加壓的表現(xiàn),。因此,并發(fā)用戶數(shù)和集合點有聯(lián)系,,但并非必然的聯(lián)系,,在測試并發(fā)用戶的性能測試場景中,可以不必設置集合點,,這將視測試目標和測試策略而定,。 Q:不設置集合點的測試,能代表是“并發(fā)”操作嗎,? A:有這樣一種說法,,設置集合點是為了確保“嚴格意義上”的并發(fā),其實從本質上看,,這主要是一個看問題的粒度大小的問題,。集合點的作用是通過工具的控制,確保一個請求嚴格的“同時”從前臺提交到后臺??墒侨绻⒂^地看,,是不存在嚴格意義上的并發(fā)的,即使在客戶端通過設置集合點的方式將100個請求同時提交到后臺,,經(jīng)過網(wǎng)絡上的傳輸消耗,,可能它們并不是同時到達的,而即便100個請求同時到達服務器端,,受到中間件和應用系統(tǒng),、數(shù)據(jù)庫的各種連接池、緩沖區(qū),, CPU處理隊列等的限制,,也可能在服務器端產(chǎn)生等待的。因此,,嚴格意義上的“并發(fā)”可以說是不存在的,,我們需要做的是在可以接受的粒度范圍內(nèi)取得一個最佳的平衡點,站在這個平衡點的層面上去看待“并發(fā)”這個問題,。 性能測試無非有兩個目的,,一是評測,二是調優(yōu),。 在以評測為目的的性能測試中,,用戶更關心的是業(yè)務上的并發(fā),也就是真實業(yè)務場景的并發(fā)情況,,這種情況下只要按照業(yè)務操作的模式去設置場景就可以了,,并不需要設置集合點,。 集合點是一種特殊情況下的并發(fā),,通常是在以調優(yōu)為目的的性能測試中才會用得到,目的是有針對性地對某個可能存在性能問題的模塊施壓,,以便找到性能瓶頸,。 集合點在我實際的測試過程中用得并不多。 Zee: 關于集合點,,我一直覺得沒有什么可爭議的,,這兩天看到幾個帖子在說這個東西。有一點我想大家都是認同的:集合是相對的集合,。 集合是在產(chǎn)生負載的機器上的集合,。如果考慮網(wǎng)絡,中間件等等的因素,。到服務器肯定不會是同一時間點,,那于是就有人希望能更接近在服務器端實現(xiàn)并發(fā)的操作。認為這才是真正的并發(fā)。 我覺得首先要做的是分析應用系統(tǒng),,到底你想做的是什么,。 比如說,你想讓某個URL能達到1000個同時請求的目的,。這樣的目標就比較明確了,。 而在討論集合點的時候,大家很少拿具體的東西來舉個例子,。這樣有點說不清楚,。要想達到并發(fā)。我覺得應該更具體的分析應用,。再來定下目標來做,。而不是一直在討論LR如何能實現(xiàn)。 Xingcyx: 因為在實踐中,,我經(jīng)常會碰到這樣的情況: 測試需求說,,該系統(tǒng)應支持200個并發(fā)用戶。 那么我們就開始測,,錄制好腳本,,下一步就是在場景中執(zhí)行了,在控制臺中設置某腳本并發(fā)用戶數(shù)為200,,測試結果為通過或未通過,。此時爭議就來了:這200個用戶的腳本如果執(zhí)行通過,測試結果可以接受,,是否可以說這個系統(tǒng)支持了200個并發(fā)呢,? 大漠飛鷹: 測試前肯定要了解需求,或者說是測試目的,。 就說明“該系統(tǒng)應支持200個并發(fā)用戶,。”, 這種需求嚴格意義上來說是不合格的需求,,因為描述不夠清晰,,過于模糊等。 當然,,在實際中,,這類需求到了我們測試人的手里也是常有的,一般就當普遍的情況來出來,。 比如,,web系統(tǒng),就按2/5/8,,或者2/5/10來處理,,如果能通過就pass,,否則就讓開發(fā)人員調優(yōu)。 Zee: 從集合點到并發(fā)數(shù)的確定,。我覺得這其中的轉換最主要的地方在于分析業(yè)務,。 比如用戶說了:要求200個用戶并發(fā)。 那要問清楚的就是,,200個用戶是個什么樣的比例,,有多少人在干這個,有多人在干那個,,按百分比,,用不同的腳本來跑。 那再來想一下客戶,。他關心的是200個用戶在服務器上同時點同一個URL或者某一個相同的資源,?這個客戶我想大多不會關心。而他想要的就是我有200個用戶在線的時候,。響應時間不至于讓人不可接受,。至于多少才不可接受。按平常人的心理承受能力來衡量就可以了,。再或者有其他的說法,,就是200人同時點同一 URL或者請求同一資源,我想可以通過計算來增加vuser的數(shù)量或者集合呀,,或者其他的方法來努力的向這個目標靠近,。 如果說非要在服務器上這個時間并發(fā)這么多的用戶。我覺得只能盡量把它縮小到一個時間段內(nèi),。而這樣做我覺得并不是從分析業(yè)務出發(fā)的,, Xingcyx: 樓上說的是最常見的一種情況,在這種測試需求下,,我會設置一個混合場景來測試,,也就是按照做不同事情的用戶的百分比去設置。 但會有另外一些時候,,并不是一個實際的應用系統(tǒng),,可能是一個開發(fā)平臺,,或者工作引擎等,,它涉及的性能的概念會更偏向底層一些,這個時候可能就不是像一般的應用系統(tǒng)那樣,,設置一個混合場景來測試那么簡單了,。 大漠飛鷹: 一般說的并發(fā)數(shù)指的是業(yè)務并發(fā),而不是服務器端得并發(fā)數(shù),。 |
|