qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          性能測試---并發用戶

          并發用戶數

            大家都知道我們的性能測試就通過工具模擬多用戶對系統進行操作,對系統造成壓力,來驗證系統的性能(不太標準的解釋)。好多人也簡單的把性能測試當成并發測試。那么這個“多用戶”和“同時”兩個因素缺一不可。只多用戶不同時,很難對系統構成壓力;沒有多個用戶,同時的概念也就自然不存在了

           

          并發的兩種情況

            一種是嚴格意義上的并發,即所有的用戶在同一時刻做同一件事或操作,這種操作一般指做同一類型的業務。比如,所有用戶同一時刻做并發登陸,同一時刻做表單提交。

            另外一種并發是廣義范圍的并發,這種并發與前一種并發的區別是,盡管多個用戶對系統發出了請求或者進行了操作,但是這些請求或都操作可以是相同的,也可以是不同的。比如,在同一時刻有用戶在登錄,有用戶在提交表單。

           

          從服務器的角度來看并發

            前面的兩種解釋都是從用戶業務的角度來解釋并發的,因為我們平時所做的性能測試也是從用戶端對業務層的操作來進行并發測試的。

            如果考慮整個系統運行過程中服務器所承受的壓力是這樣的:在該系統的運行過程中,把整個運行過程劃分為離散的時間點,在每個點上,都有一個“同時向服務端發送請求的客戶數”,這個就是所謂的服務器所承受的最大并發訪問數。

           

          真正意義上的并發不存在

            上面試談了這么多并發,現在又說真正意義上的并發不存在。何解?學操作系統原理的同學都知道,CPU在一個時間點上只能干一件事兒。為什么我們可以邊看電影,邊打字,邊語音。因為CPU很快很快,他可以處理一下電影,再處理一下打字,再處理一下語音。因為它很快,所以,它可以在多個程序之間快速瞬間的切換,給你造成的假象就是它在同時做這些事情。(現在的雙核、四核的CPU另說)

            那么我們的系統在接到用戶的請求后也要調用CPU來完成某些處理,然后返回給用戶。那么我們對系統有做并發測試是測什么呢?舉個簡單的例子。假如有一位神醫,他的看病速度非常快,假設他的看病速度是不變的;然后有一群接待人員來接待看病的客人,有成千上萬的病人來看病,接待人員要想各種辦法來做好接待工作,使病人更快的看到病。比如,可以事先咨詢病人得的什么病,然后將病人進行分類,比如可以擴大接待室,讓更多的病人可以進到醫院來看病等。

            神醫就是我們的CPU,接待人員就是我們的系統,病人就用戶,我們做性能測試的目的就是了解接待人員哪個地方給醫院看病造成了瓶頸。只來一個病人,醫院的看病速度與服務很好。一下子來十萬個病人各種問題就出來了。接待人員的服務態度下降,多余的人員跟本進不到醫院去,醫院的洗手間不夠用,造成病人無法上廁所而離開,這些都屬于系統問題。所以,我們一般測試的目的是看醫院的接待能力。

           

          系統用戶數與同時在線人數

            在實際的性能測試中,經常接觸到與并發用戶相關的概念還有“系統用戶數”與“同時在線人數”下面通過一個實例來描述他們之間的差別。

            假設有一個網站,注冊用戶才能登錄使用各種功能,如上傳頭像,閱讀專家文章等。該系統有20萬注冊用戶,這就是說有20萬用戶可以使用這個網站的所有功能,20萬就是這個網站的“系統用戶數”,網站有一個在線統計功能,從統計數據中可以看到,同時登錄網站的人數的最高記錄是2萬,就是有2萬人同時用瀏覽器打開著這個網站。2萬就是“同時在線人數”

            那么系統的并發用戶數是多少呢?2萬么?NO!2萬只表示在系統最高峰時有這么多用戶登錄了網站,并不表示實際服務器的承受壓力。因為服務器承受壓力還與具體的用戶訪問模式相關,在這2萬用戶中考察某一個時間點對用戶發出請求數,可以會大大縮水。那么,該系統的服務端承受的最大并發訪問數是多少呢?這個取決于業務并發用戶數和業務場景,一般可以通過服務器日志的分析得到。

           

          求并發用戶數公式

          在實際的性能測試工作中,測試人員一般比較關心的是業務并發用戶數,也就是從業務的角度關注應該設置多少個并發數比較合理。

          下面找一個典型的上班簽到系統,早上8點上班,7點半到8點的30分鐘的時間里用戶會登錄簽到系統進行簽到。公司員工為1000人,平均每個員上登錄簽到系統的時長為5分鐘。可以用下面的方法計算。

              C=1000/30*5=166.7

          C表示平均并發用戶數,那么對這個簽到系統每分鐘的平均在線用戶數為166

          當然,在性能測試上,任何公式都不是嚴謹的,最重要的是對系統做出有效正確的分析。

           --------------------------

               估算并發用戶并發數公式:

          1、用戶從登陸系統到退出系統的間隔時間L
          2、登陸系統的用戶數量n
          3、被考察的時間長度T
          并發用戶數C=nL/T
          舉例:
          如果系統有3000個注冊用戶,平均每天400個用戶要訪問系統,一般一個典型用戶在系統中停留4小時(從登陸到退出),在一天內,用戶在8小時內使用該系統
          并發用戶數=400X4/8=200
          如果你要計算峰值用戶數的話,用另外一個公式
          C1=C+3 X sqr(C)
          C表示并發用戶數
          根據我之前算出的結果,并發用戶數是200,那么公式為:
          C1=200+3 x sqr(200)=242

          posted on 2014-01-29 15:56 順其自然EVO 閱讀(672) 評論(0)  編輯  收藏 所屬分類: 性能測試

          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 天长市| 门头沟区| 乐山市| 洛浦县| 泸溪县| 车致| 金湖县| 安阳县| 吉安县| 罗源县| 防城港市| 巨野县| 东丽区| 延长县| 丰城市| 通榆县| 宜宾市| 宿迁市| 拉萨市| 鄱阳县| 怀柔区| 双辽市| 镇远县| 仪征市| 澄城县| 谷城县| 称多县| 卢湾区| 尉氏县| 平远县| 芷江| 阿瓦提县| 山阴县| 北京市| 孙吴县| 赤峰市| 阿巴嘎旗| 河津市| 聂拉木县| 通海县| 永州市|