整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          Linux使用ab工具命令對Web網(wǎng)站服務(wù)器進行壓力測試

          b是apachebench命令的縮寫,它是apache自帶的Web性能測試工具。ab工具非常實用,它可以去創(chuàng)建多個并發(fā)訪問線程,模擬多個訪問客戶端同時對某一網(wǎng)站URL地址進行訪問,這樣我們就可以用來測試apache的負載壓力,也可以對其它類型的服務(wù)器進行壓力測試,比如nginx、tomcat、IIS等其它Web服務(wù)器的壓力。網(wǎng)站性能壓力測試可以說是服務(wù)器網(wǎng)站性能調(diào)優(yōu)過程中必不可缺少的一環(huán),只有讓服務(wù)器處在高壓情況下,才能真正體現(xiàn)出軟件、硬件等各種設(shè)置不當(dāng)所暴露出的問題。本文詳細介紹一下ab工具的使用。

          ab安裝

          ab安裝我們可以通過yum方式直接安裝apache的工具包httpd-tools。

          yum -y install httpd-tools

          安裝完成后可使用“ab –V”命令查看當(dāng)前的版本。

          有關(guān)ab命令的使用,我們可以通過“ab -help”幫助命令進行查看。如下:

          ab使用

          ab的命令參數(shù)比較多,但是我們常用的主要參數(shù)就是-n和-c參數(shù)。

          • -n:表示一共模擬訪問的次數(shù)。
          • -c:表示模擬并發(fā)的客戶端數(shù)量。

          模擬訪問次數(shù)除以客戶端就是每個客戶端所發(fā)送的訪問請求。

          命令:ab -n Number1 -c Number2 url

          實例:ab -n 100 -c10 https://www.baidu.com/

          輸出結(jié)果如下:

          # ab -n 100 -c 10 https://www.baidu.com/  
          This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
          Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
          Licensed to The Apache Software Foundation, http://www.apache.org/
          Benchmarking www.baidu.com (be patient).....done
          Server Software:        BWS/1.1    #Web服務(wù)器軟件版本
          Server Hostname:        www.baidu.com    #請求的URL主機名
          Server Port:            443    #Web服務(wù)器軟件的監(jiān)聽端口
          SSL/TLS Protocol:       TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128    #SSL協(xié)議類型
          Document Path:          /    #請求的URL中的根絕對路徑
          Document Length:        227 bytes    #HTTP響應(yīng)數(shù)據(jù)的正文長度
          Concurrency Level:      10    #請求的并發(fā)數(shù),設(shè)置的-c參數(shù)
          Time taken for tests:   1.276 seconds    #所有這些請求被處理完成所花費的總時間
          Complete requests:      100    #總請求數(shù)量,設(shè)置的-n參數(shù)
          Failed requests:        0    #失敗的請求數(shù)量
          Write errors:           0    
          Total transferred:      111098 bytes    #所有請求的響應(yīng)數(shù)據(jù)長度總和,包括每個HTTP響應(yīng)數(shù)據(jù)的頭信息和正文數(shù)據(jù)的長度。注意這里不包括HTTP請求數(shù)據(jù)的長度,僅僅為web服務(wù)器流向用戶PC的應(yīng)用層數(shù)據(jù)總長度。
          HTML transferred:       22700 bytes    #所有請求的響應(yīng)數(shù)據(jù)中正文數(shù)據(jù)的總和,也就是減去了Total transferred中HTTP響應(yīng)數(shù)據(jù)中的頭信息的長度。
          Requests per second:    78.38 [#/sec] (mean)    #吞吐率,也叫QPS,計算公式:Complete requests/Time taken for tests
          Time per request:       127.583 [ms] (mean)    #用戶平均請求等待時間,從用戶角度看,完成一個請求所需要的時間。計算公式:Time token for tests/(Complete requests/Concurrency Level)
          Time per request:       12.758 [ms] (mean, across all concurrent requests)    #服務(wù)器完成一個請求的時間,計算公式:Time taken for tests/Complete requests,正好是吞吐率的倒數(shù)
          Transfer rate:          85.04 [Kbytes/sec] received    #網(wǎng)絡(luò)傳輸速度,計算公式:Total trnasferred/ Time taken for tests,這個統(tǒng)計很好的說明服務(wù)器的處理能力達到極限時,其出口寬帶的需求量
          Connection Times (ms)
                        min  mean[+/-sd] median   max
          Connect:       42   85  17.3     88     129
          Processing:    15   27  10.8     23      66
          Waiting:       15   27  10.5     23      66
          Total:         67  112  19.7    111     167
           #這幾行組成的表格主要是針對響應(yīng)時間也就是第一個Time per request進行細分和統(tǒng)計。一個請求的響應(yīng)時間可以分成網(wǎng)絡(luò)鏈接(Connect),系統(tǒng)處理(Processing)和等待(Waiting)三個部分。
          表中min表示最小值; mean表示平均值;[+/-sd]表示標(biāo)準差(Standard Deviation) 表示數(shù)據(jù)的離散程度,數(shù)值越大表示數(shù)據(jù)越分散,系統(tǒng)響應(yīng)時間越不穩(wěn)定。 median表示中位數(shù); max表示最大值。
          需要注意的是表中的Total并不等于前三行數(shù)據(jù)相加,因為前三行的數(shù)據(jù)并不是在同一個請求中采集到的,可能某個請求的網(wǎng)絡(luò)延遲最短,但是系統(tǒng)處理時間又是最長的呢。所以Total是從整個請求所需要的時間的角度來統(tǒng)計的。這里可以看到最慢的一個請求花費了167ms
          Percentage of the requests served within a certain time (ms)
            50%    111    
            66%    121    
            75%    124    
            80%    128    
            90%    136   
            95%    152    
            98%    161    
            99%    167   
           100%    167 (longest request)
          #這部分數(shù)據(jù)用于描述每個請求處理時間的分布情況,比如以上測試,50%的請求處理時間都不超過111ms,60%的請求處理時間都不超過121ms...這個處理時間是指前面的Time per request,即對于單個用戶而言,平均每個請求的處理時間

          總結(jié)

          ab工具使用方便,上手較快,可以提供查看服務(wù)器性能的基本指標(biāo),但是不能夠以圖形化的形式展現(xiàn),也不能監(jiān)控,所以可以做臨時的、簡單的服務(wù)器性能測試。同類型的壓力測試工具還有:webbench、siege等。需要注意的是ab命令對發(fā)出負載的計算機要求很低,它既不會占用很高CPU,也不會占用很多內(nèi)存,但卻會給目標(biāo)服務(wù)器造成巨大的負載,其原理類似CC攻擊。我們測試使用時需要注意,否則一次上太多的負載,可能造成目標(biāo)服務(wù)器資源耗完,嚴重時甚至導(dǎo)致死機。

          、測試工具:

          JMeter

          二、JMeter介紹:

          Apache JMeter是Apache組織開發(fā)的基于Java的壓力測試工具。用于對軟件做壓力測試,它最初被設(shè)計用于Web應(yīng)用測試,但后來擴展到其他測試領(lǐng)域。

          三、Java環(huán)境的安裝與配置:

          (1)因為JMeter是使用JAVA寫的,所以使用JMeter之前,先安裝JAVA環(huán)境,

          oracle官網(wǎng)下載JDk https://www.oracle.com/technetwork/java/javase/downloads/index.html

          配置變量

          系統(tǒng)變量→新建 JAVA_HOME 變量 。 變量值填寫jdk的安裝目錄(本人是 E:\Java\jdk1.7.0)

          系統(tǒng)變量→尋找 Path 變量→編輯

          在變量值最后輸入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

          (注意原來Path的變量值末尾有沒有;號,如果沒有,先輸入;號再輸入上面的代碼)

          系統(tǒng)變量→新建 CLASSPATH 變量

          變量值填寫 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一點)

          系統(tǒng)變量配置完畢

          測試jdk是否安裝成功,可在【開始】中搜索cmd,輸入【java -version】

          四、JMeter下載與使用

          1.JMeter下載地址:在官網(wǎng) http://jmeter.apache.org/

          2.解壓下載的二進制包,使用cmd命令進入bin目錄,使用jmeter.bat啟動程序。(注意直接雙擊jmeter.bat無法啟動時需要使用Window+R,輸入cmd,然后進入bin目錄如下)

          3.啟動之后會有兩個窗口,一個cmd窗口,一個JMeter的 GUI

          上面的意思就是:不要使用GUI運行壓力測試,GUI僅用于壓力測試的創(chuàng)建和調(diào)試;執(zhí)行壓力測試請不要使用GUI。使用下面的命令來執(zhí)行測試:

          jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]

          五、創(chuàng)建測試

          1.創(chuàng)建線程組

          在“測試計劃”上右鍵 【添加】-->【Threads(Users)】-->【線程組】

          2.設(shè)置線程數(shù)和循環(huán)次數(shù)。我這里設(shè)置線程數(shù)為500,循環(huán)一次。

          3.創(chuàng)建Http請求

          在“線程組”右鍵 【添加-】->【samlper】-->【HTTP 請求】

          4.添加察看結(jié)果樹和聚合報告

          在我們剛剛創(chuàng)建的線程組上右鍵 【添加】-->【監(jiān)聽器】-->【察看結(jié)果樹】。添加聚合報告,右鍵 【添加】-->【監(jiān)聽器】-->【聚合報告】。

          直接添加,然后點擊運行按鈕就可以看到結(jié)果了。

          結(jié)果樹分析:

          通過察看結(jié)果樹,我們可以看到每個請求的結(jié)果,其中紅色的是出錯的請求,綠色的為通過。

          Thread Name(線程組名稱): 線程組 1-24

          Sample Start( 啟動開始時間): 2019-02-15 15:00:14 CST

          Load time(加載時長): 290

          Connect Time:(連接時長) 86

          Latency(等待時長): 174

          Size in bytes(發(fā)送的數(shù)據(jù)總大小): 2212

          Sent bytes:821

          Headers size in bytes(發(fā)送數(shù)據(jù)的其余部分大小): 1162

          Body size in bytes: 1050

          Sample Count(發(fā)送統(tǒng)計): 1

          Error Count(錯誤統(tǒng)計): 0

          Data type ("text"|"bin"|""): text

          Response code(返回狀態(tài)碼): 200

          Response message(返回信息): OK

          這里綠色的就說明請求是通過的,返回值是200,如果出現(xiàn)紅色的×就說明請求失敗,這時候可以通過右邊的取樣器結(jié)果和響應(yīng)數(shù)據(jù)來查看結(jié)果。

          聚合報告分析:

          Sample:本次測試場景共運行多少線程;

          Average:平均響應(yīng)時間;

          Median:統(tǒng)計意義上的響應(yīng)時間中值;

          90% line:所有線程中90%的線程響應(yīng)時間都小于xx的值;

          Min:響應(yīng)最小時間;

          Max:響應(yīng)最大時間;

          Error:出錯率;

          Throughput - 吞吐量以“requests/second、requests /minute、 requests /hour”來衡量。 時間單位已經(jīng)被選取為second,所以,顯示速率至少是1.0,即每秒1個請求。 當(dāng)吞吐量被保存到CVS文件時,采用的是requests/second,所以30.0 requests/second 在CVS中被保存為0.5

          Kb/sec - 以Kilobytes/seond來衡量的吞吐量

          六、測試結(jié)果:

          (1)50個用戶在10秒中同時訪問企業(yè)用戶會議室預(yù)定頁面,平均響應(yīng)時間是0.146秒,最大的響應(yīng)時間0.387秒,最小的響應(yīng)時間是0.096秒,錯誤率為0。

          (2)100個用戶在10秒中同時訪問企業(yè)用戶會議室預(yù)定頁面,平均響應(yīng)時間是2.295秒,最大的響應(yīng)時間8.132秒,最小的響應(yīng)時間是0.425秒,錯誤率為0。

          要:最近筆主帶著兩位新入職的同事進行了公司新平臺的壓力測試,工具選擇的當(dāng)然是Loadrunner,小筆發(fā)現(xiàn)有很多剛?cè)腴TLoadrunner的小白都會遇到很多相似的問題,但是這些問題并不能在各大搜索網(wǎng)站上得到完善的解決。因此,小筆選中了51testing這個流量給力認可度高的專業(yè)測試平臺給各位loadrunner新手提拱一份參考,希望能夠幫助到有需要的朋友。

          在如今的大數(shù)據(jù)時代,軟件、測試、自動化測試都在扮演者不可或缺的重要角色,我們開發(fā)一個平臺要求的已經(jīng)不僅僅是功能要正確,更要考慮的是隨著訪問量的增加給客戶帶來的壓力體驗。

          OK,引文部分已經(jīng)完成,下面我們一起走進Loadrunner的壓力測試吧。

          跟著小筆一起動手來完成此次的壓力測試吧!一個完整的壓力測試三部曲:

          1.腳本錄制->2. 場景設(shè)計->3. 結(jié)果分析

          場景介紹:此處我們選擇最具有代表意義的多用戶并發(fā)登錄系統(tǒng),我們測試150個用戶并發(fā)登錄平臺A的時候給系統(tǒng)增加的壓力情況。

          測試背景: Windows Server 2008+Loadrunner11+IE8

          1.錄制腳本(Virtual User Generator)

          安裝好Loadrunner后(安裝比較容易,在此暫且省略),打開Virtual User Generator進行腳本錄制,錄制時相關(guān)設(shè)置:

          Step 1、Catalog選擇'Web(HTTP/HTML)',點擊[Create] 按鈕。

          Step 2、[URL Address]的值輸入需要測試系統(tǒng)的地址,點擊[OK]按鈕。

          Step3、開始進行登錄系統(tǒng)的腳本錄制,一般情況下,我們在錄制的過程中需要切分action,不同的操作放在相對應(yīng)的action里,此處因為操作簡單,我們暫且不去細分。

          Step4、生成腳本

          Step5、優(yōu)化腳本:添加集合點,事務(wù),思考時間。

          事務(wù):定義一個action的范圍,以便對此action進行某種操作。比如對該action進行計時操作。

          語句:lr_start_transaction("login");

          集合點:正如字面意思,等待所有的事務(wù)集合到一起進行的操作,用來執(zhí)行負載測試。要實現(xiàn)此操作,可以同步 Vuser 以便恰好在同一時刻執(zhí)行任務(wù)。通過創(chuàng)建集合點,可以配置多個 Vuser 同時執(zhí)行某個操作。當(dāng)某個 Vuser 到達該集合點時,將進行等待,直到參與該集合的全部 Vuser 都到達。指定數(shù)量的 Vuser 均到達后,釋放所有這些 Vuser。

          語句:lr_rendezvous("login");

          思考時間:思考時間即等待時間,是一種延遲操作,很好理解。

          語句:lr_think_time(5);

          2.場景設(shè)計(Controller)

          Step1、打開 controller,添加上面優(yōu)化好的腳本,設(shè)置場景模式。(此處命名為testLogin)設(shè)置場景如下:

          Step2、點擊【Start Scenario】運行腳本,結(jié)果如下:

          Step 3、點擊紫色框中按鈕,生成測試結(jié)果報告。

          2.結(jié)果分析(Analysis)

          Analysis 可以說是Loadrunner壓力測試的重點和難點,所以對于新手而言 analysis不是測試的結(jié)束,而是開始。因此,對于各項測試結(jié)果我們要做出準確的理解和判斷。在本次的實踐中,我們做的是一個比較簡單的場景,那么針對此場景的各項結(jié)果如下:

          【測試報告分析摘要】,這里顯示了實際測試過程中,總體的測試結(jié)果。我們可以選擇更過的圖來分析系統(tǒng)的負載情況。

          【Running Vuser】結(jié)果分析:Vuser是并發(fā)測試選取的虛擬用戶,從下圖中可以看出,Vuser是每5秒增加5個,在02:20秒的時候達到了頂峰值150,持續(xù)運行了一分鐘后,逐漸退出系統(tǒng)。

          【Hits per Second】結(jié)果分析:每秒提交的HTTP請求數(shù)量,在本場景中執(zhí)行的時間比較短,因此結(jié)果不是很明顯,建議大家此處可以放寬執(zhí)行時間,這樣得到的結(jié)果比較準確。

          【Throughput】結(jié)果分析:吞吐量是指返回的應(yīng)用層數(shù)據(jù)的值,吞吐量單位是以字節(jié)數(shù)為準,表示Vuser在任何給定的某一秒上從服務(wù)器獲得的數(shù)據(jù)量。借助此圖我們可以依據(jù)服務(wù)器吞吐量來評估Vuser產(chǎn)生的負載量。該數(shù)據(jù)越小說明系統(tǒng)的帶寬依賴就越小,通過這個數(shù)據(jù)可以確定是不是網(wǎng)絡(luò)出現(xiàn)了瓶頸。

          【Tansaction summary】結(jié)果分析:事務(wù)概要說明,統(tǒng)計執(zhí)行的事務(wù)數(shù)量,比如在本次場景中,login和exist這兩個事務(wù)的值都是855次。同事也監(jiān)控了事務(wù)的Pass數(shù)和Fail數(shù),了解負載的事務(wù)完成情況。通過的事務(wù)數(shù)越多,說明系統(tǒng)的處理能力越強;失敗的事務(wù)數(shù)越小說明系統(tǒng)越可靠。這個比較容易理解,不多闡述。

          【Average Transaction Response Time】- 事務(wù)響應(yīng)時間結(jié)果分析:這里需要注意的一個問題是因為在Transaction Response Times里面是場景運行時記錄的響應(yīng)時間的最大值最小值與平均值,而Average Transaction Response Time 是按照采樣率每隔幾秒鐘取一個值畫出來的圖,然后根據(jù)圖來記錄最大值最小值和平均值,在報告中也可以看到,Average Transaction Response Time中寫的是圖最大值、圖小值和圖平均值。如果將采樣率設(shè)置小一些,這兩個值就會比較接。所以,抽象率是關(guān)鍵。那么下圖現(xiàn)實的結(jié)果可以看出,login這個action最大值是14.978,最小值是2.134,平均值是7.869;exist最小值是0.02,最大值0.214,平均值是0.078 。這些時間是可以接受的壓力響應(yīng)的時間。

          本次測試過程中常見問題匯總:

          之所以加上問題匯總是因為筆主覺得大家在做壓力測試的時候,這類問題的出現(xiàn)率很高,所以,在此稍微總結(jié)一下。

          問題1:averager esponse time響應(yīng)時間過長?(與實際偏差甚大完全不合理)

          解決方法:導(dǎo)致此問題的原因很多,但是我們可以從以下幾類去分析:1、是否在腳本中添加了多長時間的思考時間。2、事務(wù)和集合點的先后順序是否正確,正確的順序是把集合點放在事務(wù)前面,反之則也會增加事務(wù)響應(yīng)時間的值。3、網(wǎng)速問題,網(wǎng)速一般不會造成太大的偏大,但是不排除并發(fā)量很大的情況下造成的延誤。

          問題2:LoadRunner超時錯誤

          解決方法:首先在運行環(huán)境中對超時進行設(shè)置,默認的超時時間可以設(shè)置長一些,再設(shè)置多次迭代運行,如果還有超時現(xiàn)象,需要在“Runtime Setting”>“Internet Protocol:Preferences”>“Advanced”區(qū)域中設(shè)置一個“winlnet replay instead of sockets”選項,再回放是否成功。

          問題3:LoadRunner腳本中出現(xiàn)亂碼

          解決方法:重新錄制腳本,在錄制腳本前,打開錄制選項配置對話框進行設(shè)置,在“Recording Options”的“Advanced”選項里先將“Surport Charset”選中,然后選中支持“UTF-8”的選項。

          問題4:在錄制過程中IE頁面上,某些控件顯示有問題,導(dǎo)致錄制不了。

          解決方法:一般情況下,將被測系統(tǒng)的URL加入到可信任站點即可解決此類問題。

          問題5:Error -27796:Failed to connect to server‘XXXX’

          這個問題可以說是經(jīng)常遇到但是不易被解決的難題,我們大致可以這樣去排查

          (1)檢查run time setting中的請求超時時間Preferences中點擊Options‘HTTPrequest connect timeout’,‘HTTP-request receieve timeout’,‘Step download timeout’,查看其值是否為1000、1000、10000;run time setting設(shè)置完了后記住還需要在control組件的option的run time setting 中設(shè)置相應(yīng)的參數(shù);

          (2)Browser Emulation中的Download non-HTML resources選項去掉,點擊OK即可如果還不能解決的話,繼續(xù)嘗試第3種方法

          (3)設(shè)置runt time setting中的internet protocol-preferences中的advaced區(qū)域有一個winlnet replay instead of sockets選項,選項后再回放就成功了。如果實在不行的話就試試重啟大法吧,因為有些問題的確可能是因為工具問題,網(wǎng)絡(luò)問題,機子問題等等。

          總結(jié):用Loadrunner進行壓力測試難免會遇到各種問題,細心排查總能一一解決,所以筆者想對剛剛踏入這一行業(yè)的朋友說,不急不燥認真去思考,問題總能被解決。希望此篇文章對大家有所幫助,任何問題都可以留言喔。

          最后:

          1)關(guān)注+私信回復(fù):“測試”,可以免費領(lǐng)取一份10G軟件測試工程師面試寶典文檔資料。以及相對應(yīng)的視頻學(xué)習(xí)教程免費分享!,其中包括了有基礎(chǔ)知識、Linux必備、Mysql數(shù)據(jù)庫、抓包工具、接口測試工具、測試進階-Python編程、Web自動化測試、APP自動化測試、接口自動化測試、測試高級持續(xù)集成、測試架構(gòu)開發(fā)測試框架、性能測試等。

          2)關(guān)注+私信回復(fù):"入群" 就可以邀請你進入軟件測試群學(xué)習(xí)交流~~


          主站蜘蛛池模板: 制服丝袜一区在线| 国产天堂在线一区二区三区| 国产情侣一区二区三区| 日韩精品免费一区二区三区| 亚洲综合一区二区三区四区五区 | 一区二区在线免费视频| AV怡红院一区二区三区| 伊人久久精品无码av一区| 成人区人妻精品一区二区不卡视频| 国产福利电影一区二区三区,免费久久久久久久精| 亚洲av无码一区二区三区网站| 亚洲综合在线成人一区| 无码视频一区二区三区| 在线观看免费视频一区| 精品人妻无码一区二区三区蜜桃一 | 亚洲图片一区二区| 成人丝袜激情一区二区| 精品国产日韩一区三区| 中文字幕在线一区二区三区| 国产视频一区在线播放| www一区二区三区| 亚洲综合色一区二区三区小说| 日韩精品一区二区三区不卡| 在线视频亚洲一区| 亚洲AV无码国产一区二区三区 | 精品日产一区二区三区手机| 精品无人乱码一区二区三区 | 国精品无码一区二区三区在线| 色国产在线视频一区| 综合无码一区二区三区四区五区| 精品伦精品一区二区三区视频 | 国产视频一区在线播放| 老熟妇高潮一区二区三区| 国产精品亚洲午夜一区二区三区| 三上悠亚亚洲一区高清| 人妻少妇一区二区三区| 精品日产一区二区三区手机| 久久精品一区二区三区四区| 久久99国产精一区二区三区| 日韩人妻一区二区三区免费| 国产AV午夜精品一区二区三区|