聲明:以下問題是我從事性能測試工作以來所遇到的一些常見問題,其解答均是我根據實際工作經驗,或者我所獲得的各種資源(報刊書籍、論壇、QQ、MSN等)得到的信息整理而成,其回答內容主要代表我個人觀點,并非標準答案,讀者如有不同意見,歡迎批評指教。
Q:并發用戶數和集合點有必然聯系嗎?在性能測試中必須使用集合點來測試嗎?
A:并發用戶數,顧名思義,就是同時操作的用戶,這里的“操作”可以指對系統真正的操作,也可以只是連接(此時通常叫作“并發連接數”),而集合點是一種特殊情況下的并發,多用于測試系統在瞬間加壓的表現。因此,并發用戶數和集合點有聯系,但并非必然的聯系,在測試并發用戶的性能測試場景中,可以不必設置集合點,這將視測試目標和測試策略而定。
Q:不設置集合點的測試,能代表是“并發”操作嗎?
A:有這樣一種說法,設置集合點是為了確保“嚴格意義上”的并發,其實從本質上看,這主要是一個看問題的粒度大小的問題。集合點的作用是通過工具的控制,確保一個請求嚴格地“同時”從前臺提交到后臺。可是如果微觀地看,是不存在嚴格意義上的并發的,即使在客戶端通過設置集合點的方式將100個請求同時提交到后臺,經過網絡上的傳輸消耗,可能它們并不是同時到達的,而即便100個請求同時到達服務器端,受到中間件和應用系統、數據庫的各種連接池、緩沖區,CPU處理隊列等的限制,也可能在服務器端產生等待的。因此,嚴格意義上的“并發”可以說是不存在的,我們需要做的是在可以接受的粒度范圍內取得一個最佳的平衡點,站在這個平衡點的層面上去看待“并發”這個問題。
性能測試無非有兩個目的,一是評測,二是調優。
在以評測為目的的性能測試中,用戶更關心的是業務上的并發,也就是真實業務場景的并發情況,這種情況下只要按照業務操作的模式去設置場景就可以了,并不需要設置集合點。
集合點是一種特殊情況下的并發,通常是在以調優為目的的性能測試中才會用得到,目的是有針對性地對某個可能存在性能問題的模塊施壓,以便找到性能瓶頸。
集合點在我實際的測試過程中用得并不多。
Q:性能測試的策略有哪些?
A:通常情況下存在性能調優和性能評測兩種性能測試策略。----《軟件評測師教程》(清華大學出版社)第8章 應用負載壓力測試Page 223
Zee:
關于集合點,我一直覺得沒有什么可爭議的,這兩天看到幾個帖子在說這個東西。有一點我想大家都是認同的:集合是相對的集合。
集合是在產生負載的機器上的集合。如果考慮網絡,中間件等等的因素。到服務器肯定不會是同一時間點,那于是就有人希望能更接近在服務器端實現并發的操作。認為這才是真正的并發。
我覺得首先要做的是分析應用系統,到底你想做的是什么。
比如說,你想讓某個URL能達到1000個同時請求的目的。這樣的目標就比較明確了。
而在討論集合點的時候,大家很少拿具體的東西來舉個例子。這樣有點說不清楚。要想達到并發。我覺得應該更具體的分析應用。再來定下目標來做。而不是一直在討論LR如何能實現。
xingcyx:
因為在實踐中,我經常會碰到這樣的情況:
測試需求說,該系統應支持200個并發用戶。
那么我們就開始測,錄制好腳本,下一步就是在場景中執行了,在控制臺中設置某腳本并發用戶數為200,測試結果為通過或未通過。此時爭議就來了:這200個用戶的腳本如果執行通過,測試結果可以接受,是否可以說這個系統支持了200個并發呢?
Zee:
你說的是不是太過泛泛?如果用戶說這系統要支持200個并發。那做性能測試的人知道這句話有很大的出入。
大漠飛鷹:
測試前肯定要了解需求,或者說是測試目的。
就說明“該系統應支持200個并發用戶。”, 這種需求嚴格意義上來說是不合格的需求,因為描述不夠清晰,過于模糊等。
當然,在實際中,這類需求到了我們測試人的手里也是常有的,一般就當普遍的情況來出來。
比如,web系統,就按2/5/8,或者2/5/10來處理,如果能通過就pass,否則就讓開發人員調優。
xingcyx:
那么樓上的兩位就請說說,你們實際的工作中,需求是怎么提出來的,或者你們是怎么去確定出來的,到了最后確定了的測試需求是個什么樣子?給出來大家參考一下。
Zee:
從集合點到并發數的確定。我覺得這其中的轉換最主要的地方在于分析業務。
比如用戶說了:要求200個用戶并發。
那要問清楚的就是,200個用戶是個什么樣的比例,有多少人在干這個,有多人在干那個,按百分比,用不同的腳本來跑。
那再來想一下客戶。他關心的是200個用戶在服務器上同時點同一個URL或者某一個相同的資源?這個客戶我想大多不會關心。而他想要的就是我有200個用戶在線的時候。響應時間不至于讓人不可接受。至于多少才不可接受。按平常人的心理承受能力來衡量就可以了。再或者有其他的說法,就是200人同時點同一 URL或者請求同一資源,我想可以通過計算來增加vuser的數量或者集合呀,或者其他的方法來努力的向這個目標靠近。
如果說非要在服務器上這個時間并發這么多的用戶。我覺得只能盡量把它縮小到一個時間段內。而這樣做我覺得并不是從分析業務出發的
xingcyx:
樓上說的是最常見的一種情況,在這種測試需求下,我會設置一個混合場景來測試,也就是按照做不同事情的用戶的百分比去設置。
但會有另外一些時候,并不是一個實際的應用系統,可能是一個開發平臺,或者工作引擎等,它涉及的性能的概念會更偏向底層一些,這個時候可能就不是像一般的應用系統那樣,設置一個混合場景來測試那么簡單了。
大漠飛鷹:
一般說的并發數指的是業務并發,而不是服務器端得并發數。
cc_lion:
一個業務并發,一個服務端最大并發數,針對測試目標不一樣選擇其中
測最大并發數可能有意外收獲哦!!資源爭用,DEADLOCK,等
并發中有兩個概念,一個是業務并發數,指的是客戶端的訪問用戶量;
還有一個是服務器端的并發數,指的是服務器端的處理數量;
實際操作中,我們比較方便控制客戶端的并發數,而服務器端的則幾乎無法控制和操作,因此我們平時說的并發數指的都是業務并發數。
A:性能測試是一個涵義很廣的概念,它包括負載測試、壓力測試、強度測試、可伸縮性/擴展性測試等。
1.負載測試:通過逐步增加系統負載,最終確定在滿足性能指標的情況下,系統能承受的最大負載量的測試。 2.壓力測試:通過逐步增加系統負載,最終確定在什么負載條件下系統性能將處于崩潰狀態,以此獲得系統能提供的最大服務級別的測試。 3.強度測試:又稱疲勞強度測試,在系統穩定運行的情況下能夠支持的最大并發用戶數,持續執行一段時間業務,通過綜合分析,確定系統處理最大工作量強度性能的過程。4.可伸縮性(Scalability)是衡量一個系統處理能力或容量的屬性,舉個例子說,就是當為一個系統增加了資源——特別是硬件資源后,系統可以承受更大的負載,并獲得更大的 吞吐量,這個系統可以被稱為 Scalable System (可伸縮的系統)。例如測試一個使用了負載均衡和集群技術的系統,測試當增加新的 Cluster 之后是否可以承受更大的負載,并獲得相應的吞吐量提升。
Q:“并發用戶數”在英文中是如何表示的?
A:并發用戶數量:the number of concurrent users
最佳并發用戶數量:the optimum number of concurrent users
最大并發用戶數量:the maximum number of concurrent users
峰值并發用戶數量:the peak number of concurrent users
平均并發用戶數量:the average number of concurrent users
Q:“注冊用戶數”和“最大并發用戶數”有聯系嗎?
A: 注冊用戶數和最大并發用戶數之間本身沒有必然聯系。一般根據特定時間段的峰值來進行計算。如注冊用戶數為2000,按照行業標準一般峰值使用人數為5%-10%,也可以通過前期項目進行統計后,得到較為準確的百分數。
并發用戶是從一個更大的概念上說的,可以說是在一個用戶層次,而集合點是在事務層次的,這一點在沒有運行腳本終可以設置集合點;
如果對于一個事務有10用戶并發設置集合點也在次事務,此時設置不設置沒有區別,但是如果有一個腳本有多個事務,而又對一個事務設置了集合點的話,這樣就會又確別,對于此腳本中的其他事務用戶可能不是并發,但是對于集合點的事務一定是并發的。
以下是Avalache用戶手冊中對于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.
并發用戶數是指系統的提供服務的能力,即同時能夠支持的在線用戶數量;從測試的角度來講,需要模擬足夠多的用戶去同時訪問DUT,來確認最大并發用戶數。