loadrunner基礎
LoadRunner:是一種預測系統行為和性能的負載測試工具。通過以模擬上千萬戶實施并發負載及實時性能監測的方式來確認和查找問題,LoadRunner能夠對整個企業架構進行測試
1、Apache與tomcat區別:
apache是web服務器,tomcat是應用(java)服務器,它只是一個servlet(jsp也翻譯成servlet)容器,可以認為是apache的擴展,但是可以獨立于apache運行。apache支持靜態頁,tomcat支持動態的,比如servlet等。
相同點:
1、兩者都是apache組織開發的
2、兩者都有HTTP服務的功能
3、兩者都是免費的
不同點:
1、Apache是專門用了提供HTTP服務的,以及相關配置的(例如虛擬主機、URL轉發等等)
2、Tomcat是Apache組織在符合J2EE的JSP、Servlet標準下開發的一個JSP服務器
3、如果客戶端請求的是靜態頁面,則只需要Apache服務器響應請求
4、如果客戶端請求動態頁面,則是Tomcat服務器響應請求
5、因為jsp是服務器端解釋代碼的,這樣整合就可以減少Tomcat的服務開銷
6、apache:側重于http server
7、tomcat:側重于servlet引擎,如果以standalone方式運行,功能上與apache等效,支持JSP,但對靜態網頁不太理想
2、公司組網、CPU,內存、主板性能
組網:網絡組建技術,分為以太網組網(總線型結構)技術和ATM局域網組網技術(中心連接計算機所構成的局域網絡)。
基本網絡結構有環形網和鏈形網
1、鏈形網需要的光纖數量較少,但是對業務沒有保護。因此常用于光纖數量較少,業務不重要的場合。
2、環形網可以對業務提供保護,在組網時應根據不同的業務分布來確定它的保護方式。
公司服務器CPU、內存:一般在16核32G以上價格昂貴,或者更高32核64G價格高達百萬
3、Socket與http區別
網絡七層協議:物數網傳會表應如下圖:
從上到下分別是7應用層6表示層5 會話層 4傳輸層3 網絡層2數據鏈路層1物理層
其中高層(即7、6、5、4層)定義了應用程序的功能,下面3層(即3、2、1層)主要面向通過網絡的端到端的數據流。
HTTP協議:
1、HTTP協議:超文本傳輸協議,對應于應用層,用于如何封裝數據。HTTP(短連接)連接使用的是"請求-響應"方式
2、TCP/UDP協議:傳輸控制協議,對應于傳輸層,主要解決數據在網絡中的傳輸。
3、IP協議:對應于網絡層,同樣解決數據在網絡中的傳輸。
Socket連接:
1、Socket(長連接)是對TCP/IP協議的封裝,Socket只是個接口不是協議,通過Socket我們才能使用TCP/IP協議,除了TCP,也可以使用UDP協議來傳遞數據。
2、創建Socket連接的時候,可以指定傳輸層協議,可以是TCP或者UDP,當用TCP連接,該Socket就是個TCP連接,反之。
Socket連接至少需要一對套接,分為clientsocket、servicesocket,連接為3個步驟:
(1)服務器監聽
(2)客戶端請求
(3)連接確認
若雙方是Socket連接,可以由服務器直接向客戶端發送數據。
若雙方是HTTP連接,則服務器需要等客戶端發送請求后,才能將數據回傳給客戶端。
因此,客戶端定時向服務器端發送請求,不僅可以保持在線,同時也詢問服務器是否有新數據,如果有就將數據傳給客戶端。
session、token、cookie區別:
session(會話):
服務器分配給客戶端的唯一身份標識,服務器使用session把用戶的信息臨時保存在了服務器上,用戶離開網站后session會被銷毀。可是session有一個缺陷:如果web服務器做了負載均衡,那么下一個操作請求到了另一臺服務器的時候session會丟失。
cookie(緩存):
cookie是瀏覽器里面能永久存儲的一種數據。cookie由服務器生成,發送給瀏覽器,瀏覽器把cookie以key-value形式保存到某個目錄下的文本文件內,下一次請求同一網站時會把該cookie發送給服務器。
token(令牌):
token是用戶身份的驗證方式,是服務端生成的一串字符串,以作客戶端進行請求的一個令牌,當第一次登錄后,服務器生成一個Token便將此Token返回給客戶端,以后客戶端只需帶上這個Token前來請求數據即可,無需再次帶上用戶名和密碼。最簡單的token組成:uid(用戶唯一的身份標識)、time(當前時間的時間戳)、sign(簽名,由token的前幾位+鹽以哈希算法壓縮成一定長的十六進制字符串,可以防止惡意第三方拼接token請求服務器)。還可以把不變的參數也放進token,避免多次查庫
使用:1、用設備號/設備mac地址作為Token(推薦)。2、用session值作為Token。Token的目的是為了減輕服務器的壓力,減少頻繁的查詢數據庫,使服務器更加健壯。
4、Loadrunner重要概念:
事務:又稱為Transaction,事務(Transaction)是這樣一個點,我們為了衡量某個action的性能,需要在action的開始和結束位置插入這 樣一個范圍,這就定義了一個transaction。
lr_start_transaction("事務名");
lr_end_transaction("事務名",LR_AUTO);
事務作用:LoadRunner運行到該事務的開始點時,LoadRunner就會開始計時,直到運行到該事務的結束點,計時結束。通俗的講LoadRunner中的事務就是一個計時標識,通常事務時間所反映的是一個操作過程的響應時間。
2、事務能夠用于度量高風險業務流程的性能指標;
3、事務能夠度量在一組操作中每一步的性能指標;
4、通過事務計時實現了不同壓力負載下的性能指標對比;
5、通過事務計時可以幫助定位性能瓶頸;
集合點:執行負載測試時,需要模擬系統上有較重的用戶負載。要實現此操作,可以同步Vuser 以便恰好在同一時刻執行任務。插入集合點是為了衡量在加重負載的情況下的性能情況。
lr_rendezvous("SubmitQueryData");
注意:只能向Action 部分(而不是 init 或 end 部分)添加集合。
思考時間(think-time):模擬實際用戶在不同操作之間等待的時間以秒為單位一般1-5秒
如:
lr_think_time(8);
靜態資源:html:靜態資源,瀏覽器可以看得懂,它可以有變量;
動態資源:動態資源,需要先轉換成html,再給瀏覽器看。ASP/PHP
Javaweb服務器:
l? Tomcat(Apache):當前應用最廣的JavaWeb服務器(只支持一部分JavaEE的規范);
l? JBoss(Redhat紅帽):支持JavaEE,應用比較廣;EJB容器
l? GlassFish(Orcale):Oracle開發JavaWeb服務器,應用不是很廣;
l? Resin(Caucho):支持JavaEE,應用越來越廣;
l? Weblogic(Orcale):要錢的!支持JavaEE,適合大型項目;
l? Websphere(IBM):要錢的!支持JavaEE,適合大型項目;
分析需求-----錄制腳本---調試------場景-------結果分析
1、腳本設計
錄制模式:手工插入步驟、手動編寫
1.1腳本增強:
事務、集合點、參數化、關聯、檢查點
檢查點:檢查點:web_reg_find 、web_find(需要打勾)區別,web_reg_find函數在檢查頁面執行過程中如果檢查到數據就會顯示結果。而web_find函數則在頁面全部加載完成后,再去尋找需要查找的對象。
參數化方法:
方法一,右鍵---【Replace?with?a?new?parameter】
方法二,菜單【insert】----【new?Parameter…】
1.2腳本調試:RunTime Settings
a. ?Run Logic:只有action能循環,init 和 end 不行
b. ?Log
c. ?Miscellaneous
d. ?Browser Emulation:Simulate a new user ?on eachiteration (測試時如果服務器未掛,但出現了大量的 Failed toconnect to server 時,去除這個勾)
e. ?Preference:Winlnet replay instead of Socket(Windows Only)(測試時如果服務器未掛,但出現了大量的Failed to connect to server 時,去除這個勾)
f. ?d與e的區別:d設置時,結果分析中可以出現網頁細分圖,e設置時,收集結果中不能出現網頁細分圖。
1.3 ?POST的三種方式
a. ?web_submit_form:只能POST,使用簡單,Cache中取數據,不可控性
b. ?web_submit_data:只能POST,功能與 a 相似,但較復雜,與Cache無關
c. ?web_custom_request:只能發送 POST 和 GET 請求,所有 b 能實現的請求,本方法都可實現,也可以實現b 無法實現的請求
2、 場景設計
2.1 ?手工場景
a. ?Schedule by 選擇 Scenario,則所有腳本使用相同的設置Run的方式;選擇Group,則分別為不同的腳本設置Run的方式。
b. ?Run Mode:選擇Real-World Schedule,則可以通過action來增加多個用戶;選擇Basic Schedule ,只能設置一次負載
2.2 ?目標場景
a. Virtual Users :以滿足虛擬用戶數為目標
b. Hits Per Second:以每秒的點擊率為目標
c. Transaction Per Second:以每秒通過的事務為目標
d. Transaction Response Time:以事務響應時間為目標
e. ?Pages Per Second:以每秒訪問的頁面為目標
2.3 ?集合點設置
3. ?結果分析
3.1 ?Analysis Summary:簡要分析
3.2 ?Running VUsers(運行并發數),Hit Per Second(每秒點擊數),Throughtput(吞吐量),Transaction(事務),Summary(摘要),Average TransactionResponse Time(事務平均響應時間)
3.3 ?Open a new Graph
a. ?Transaction?àTransactions Per Second
b. ?Web Page Disgnostics
3.4 ?Cost Time (耗時)
a. ?Receive Time
b. ?First Buffer Time:NetWork Time、 Server Time
c. ?Connection Time
d. ?DNS Resolution Time
e. ?Client Time
f. ? SSL HandShaking Time
g. ?FTP Authentication Time
h. ?Error Time
3.5 ?結果分析中js、css、圖片的耗時為0的解決方案:
a. ?在腳本中去除 web_concurrent_start() 和 web_concurrent_end()函數(若不可以,再設置b 選項)
b. ?使用瀏覽器模擬并清除緩存
Linux日志查看tail與more的區別與優勢
more的參數應用:
more -dc /etc/profile???注:顯示提示,并從終端或控制臺頂部顯示;
more +4 /etc/profile????注:從profile的第4行開始顯示;
more -4 /etc/profile??? 注:每屏顯示4行;
more +/MAIL /etc/profile??注:從profile中的第一個MAIL單詞的前兩行開始顯示;
more的動作指令:
Enter向下n行,需要定義,默認為1行;
Ctrl+f向下滾動一屏;
空格鍵向下滾動一屏;
Ctrl+b返回上一屏;
=輸出當前行的行號;
:f輸出文件名和當前行的行號;
v調用vi編輯器;
! 命令?????調用Shell,并執行命令;
q退出more當我們查看某一文件時,想調用vi來編輯它,不要忘記了v動作指令
tail命令:
tail?? -n 行數值 文件名查看后n行
tail -f /var/log/syslog 顯示文件 syslog 的后十行內容并在文件內容增加后,且自動顯示新增的文件內容。
備注:最后一條命令tail非常有用,尤其在監控日志文件時,可以在屏幕上一直顯示新增的日志信息。
loadrunner關聯(correlation):
語法:
int web_reg_save_param(const char *ParamName, , LAST);
參數說明:
· ParamName: 存放得到的動態內容的參數名稱
· list of Attributes: 其它屬性,包括:Notfound, LB, RB, RelFrameID, Search, ORD, SaveOffset, Convert, SaveLen。屬性值不分大小寫
o Notfound: 當在返回信息中找不到要找的內容時應該怎么處理
o Notfound=error: 當在返回信息中找不到要找的內容時,發出一個錯誤訊息。這是缺省值。
o Notfound=warning: 當在返回信息中找不到要找的內容時,只發出警告,腳本也會繼續執行下去不會中斷。
o LB( Left Boundary ) : 返回信息的左邊界字串。該屬性必須有,并且區分大小寫。
o RB( Right Boundary ): 返回信息的右邊界字串。該屬性必須有,并且區分大小寫。
o RelFrameID: 相對于URL而言,欲查找的網頁的Frame。此屬性質可以是All或是數字,該屬性可有可無。
o Search : 返回信息的查找范圍。可以是Headers,Body,Noresource,All(缺省)。該屬性質可有可無。
o ORD : 說明第幾次出現的左邊界子串的匹配項才是需要的內容。該屬性可有可無,缺省值是1。如為All,則將所有找到的內容儲存起來。
o SaveOffset : 當找到匹配項后,從第幾個字元開始存儲到參數中。該屬性不能為負數,缺省值為0。
o SaveLen :當找到匹配項后,偏移量之后的幾個字元存儲到參數中。缺省值是-1,表示一直到結尾的整個字串都存入參數。
注意:"是loadrunner字符,要使用需要轉譯 ? ? \ ?"
取值:
lr_output_message("# 關聯函數HASH_KEY的值:\n %s", lr_eval_string("{ParamName}"));