【原創】LoadRunner Java Vuser腳本的配置和調試指南

1 編寫目的

本文介紹了Loadrunner多負載壓力機的配置,並經過測試Java Vuser的數據庫鏈接腳本對配置結果進行了驗證,同時對配置過程當中遇到的問題和解決的過程進行了記錄,關於Java數據庫編程的深刻學習,你們能夠參考其餘Java相關教程。java

文中的內容大部分來源於本人工做中解決問題的實際經驗,另外一部分來源於網絡,全部內容本人都親自驗證,但不免有疏漏之處,若有疑問,請你們不吝賜教。sql

文中Loadrunner版本爲9.5,操做系統類型爲Windows XP和Windows 2003 Server,數據庫爲Oracle 10g。數據庫

2 測試場景介紹

本次咱們使用四臺負載壓力機,其中一臺僅做爲統一調度管理和監控使用,其他三臺做爲產生負載的機器,測試的腳本和場景由調度監控所在機器管理。編程

測試腳本爲Java腳本,腳本內容爲Java鏈接Oralce數據庫並向數據庫內插入數據。因此咱們不只須要配置Loadrunner的環境,還須要進行Java和Oralce的配置,這也是咱們介紹的主要內容,性能監控信息收集和分析不是本文的重點,將在後續的教程中陸續介紹。網絡

3 Oracle數據庫安裝及配置

根據測試場景的要求,咱們須要在四臺機器上都安裝Oracle。Oracle的具體安裝過程比較簡單,這裏不作介紹。須要注意的是,Java鏈接Oracle時,須要提供驅動,即導入JDBC的jar包。不然執行腳本時會提示相似java.lang.ClassNotFoundException的異常信息。session

JDBC全稱是Java Data Base Connectivity,是一種用於執行SQL語句的Java API。在數據庫安裝完成後,能夠在C:\oracle\product\10.2.0\db_2\jdbc\lib目錄下找到對應的jar包,Oracle 10g對應的JDBC驅動是ojdbc14.jar。併發

導入jar包能夠經過在系統屬性設置CLASSPATH環境變量的方式,也能夠在Loadrunner的Run-time Settings中設置。oracle

3.1 數據庫鏈接調試

根據咱們的測試需求,咱們在管理機上建立了test數據庫,用戶名/密碼爲test/test,並建立了一個表:app

clip_image002

下面咱們測試數據庫鏈接是否成功,首先使用PL/SQL Developer進行驗證,這裏之因此不使用Loadrunner Java Vuser腳本直接驗證,是由於腳本執行時還涉及Java運行環境及數據庫驅動的配置檢查,咱們在驗證數據庫配置是否正確時,使用最簡單的工具便可,這樣當出現問題時,定位排查的方向比較單一,易於解決問題。工具

在四臺機器上分別驗證,因爲管理機是數據庫所在機器,因此首先驗證管理機是否能夠登陸數據庫。

使用PL/SQL Develop登陸,提示「ORA-12514:TNS:監聽程序當前沒法識別鏈接描述符中請求的服務」,以下圖:

clip_image004

出現該提示,通常有兩個排查方向,一是數據庫的服務沒有啓動,二是tnsnames.ora文件中數據庫test配置的服務名稱有誤。

咱們首先檢查服務是否啓動,進入「計算機管理->服務和應用程序->服務」,查看與數據庫test相關的服務:OracleServiceTEST確實沒有啓動,將其手動啓動便可。再次使用PL/SQL Develop登陸成功。

接下來是三臺負載壓力機的數據庫鏈接測試。三臺機器都安裝了PL/SQL Developer,而且只安裝了Oracle客戶端,本地沒有Oracle的服務須要啓動。經過Oracle Net Manager設置服務標識和監聽程序後,啓動PL/SQL Developer進行鏈接測試。發現報錯,提示「ORA-12170:TNS:鏈接超時」,以下圖:

clip_image006

仔細排查安裝目錄下tnsnames.ora和listener.ora文件,發現配置沒有問題,使用ping命令檢查到管理機的鏈接也沒有問題。經過以前的驗證,確認管理機的數據庫也沒有問題。咱們再仔細分析這個報錯的含義,負載壓力機嘗試鏈接數據庫,可是由於超時失敗了,因爲客戶端鏈接遠程數據庫是經過網絡服務承載的,因此推測問題仍是出在網絡訪問上,關掉管理機的殺毒軟件和防火牆,再次使用負載壓力機上的PL/SQL Developer鏈接,成功登陸。

到這裏咱們能夠知道,因爲管理機的Windows防火牆默認對遠程的數據庫鏈接進行了屏蔽,因此形成了上述的問題,而管理機的防火牆ICMP設置中,並無禁止ping請求,因此纔會有能夠ping通,可是連不上數據庫的問題

4 Java運行環境配置

Java運行環境的配置能夠參考《LoadRunner Java Vuser開發環境配置指南》,這裏再也不贅述。一樣,根據測試場景的要求,咱們須要在四臺機器上都安裝Java運行環境。

5 Loadrunner多機負載場景

5.1 多機負載概述

在實際的性能測試中,單個壓力機產生的負載是很是有限的。在以前的某管理系統的性能測試中,使用的負載壓力機的硬件配置爲目前的主流配置,在執行5000用戶併發時,單機的操做系統已經出現假死機、應用程序無響應等現象,這時壓力機模擬5000用戶併發已經沒有實際意義,此時採用多機產生負載就很是必要了。

多機負載是在多個負載壓力機上安裝Load generator,經過Remote Agent Dispatcher(Process) 和Agent組件在多個負載壓力機上聯合產生負載的測試方法。按照HP Loadrunner官方的文檔中描述:Controller和Load generator使用Agent進行通訊,當咱們運行一個場景時,Controller通知Remote Agent Dispatcher進程啓動Agent。Agent根據Controller的指令,對Vuser進行初始化、運行、暫停或中止操做,同時,Agent也會將Vuser的狀態通知Controller。

5.2 多機負載配置

5.2.1 負載壓力機配置

首先咱們進行三個負載壓力機的配置。三個負載壓力機僅負責聯合產生負載,若是沒有其餘特殊要求,能夠只安裝Load Generator。運行Loadrunner安裝文件,點擊「Load Generator」安裝便可(注意安裝Loadrunner須要.Net Framework3.5)。以下圖:

clip_image008

安裝完成能夠看到,在LOAD GENERATOR的服務啓動後,屏幕右下角的任務欄上會顯示一個Loadrunner Agent Service的圖標。以後,分別登陸三臺負載機,進入程序->LoadRunner->Tools->LoadRunner Agent Runtime Settings Configuration(LoadRunner代理運行時設置配置):

image

輸入用戶名和密碼,單擊[OK]。

下面咱們進行管理機的配置,啓動Loadrunner,點擊Run Load Test,進入Controller界面,點擊Scenario->Load Generators,單擊[Add],添加三臺負載壓力機的信息,包括主機名(或IP),選擇Platform,填寫Temporary directory。這裏要注意的是,臨時目錄必需要填寫對應的負載壓力機實際存在的路徑,不推薦默認路徑,不然後面執行場景時可能會由於路徑不存在而報錯。

clip_image012

添加完成後,單擊[Connect],鏈接成功後,能夠看到status變爲Ready。

clip_image014

直到這裏,負載壓力機的配置初步完成,配置的過程很是順利。下面的章節將介紹腳本調試和場景配置,咱們會遇到各類各樣的問題,解決問題是咱們進步的最大動力。

5.2.2 測試腳本介紹

咱們採用的腳本是Java語言編寫的,腳本的功能是向Oracle插入數據。下面是測試腳本的action部分代碼:

clip_image016

先介紹一下腳本中與配置有關的部分,具體整個腳本的含義,你們能夠參考Java數據庫編程的相關教程。

Class.forName("oracle.jdbc.driver.OracleDriver");表示加載數據庫的驅動,根據咱們的配置,這裏加載的驅動來自ojdbc.jar,不一樣數據庫的驅動也是不一樣的,而且有些軟件的驅動是私有或通過封裝的,具體的須要根據實際的項目狀況來判斷。

DriverManager.getConnection("jdbc:oracle:thin:@192.168.186.250:1521:test","test","test");表示鏈接數據庫,其中「jdbc:oracle:thin:@192.168.186.250:1521:test」咱們通常叫作數據庫的URL,其中的test是數據庫的service name,後面兩個test分別是訪問數據庫的用戶名和密碼。

5.2.3 測試腳本執行

數據庫和Java運行環境的配置基本完成,咱們能夠執行測試腳本了,同以前的章節同樣,咱們首先使用管理機進行本機腳本運行調試。

啓動Loadrunner,點擊「Create/Edit Scripts」,打開已經編寫好的Java Vuser腳本,直接單擊F5,運行該腳本,報錯以下:Error: System.err: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver,這個錯誤信息的含義是沒法找到某個類,在以前的《LoadRunner Java Vuser開發環境配置指南》中咱們見過相似的報錯,通常的緣由是CLASSPATH中沒有配置咱們須要加載的類(jar包)。根據3.1節的介紹,運行Run-time Settings,發現咱們沒有加載JDBC驅動,即沒有導入ojdbc.jar,將該包導入便可,或者經過修改系統的CLASSPATH變量,告訴Loadrunner在哪裏能夠加載到該驅動。

再次運行腳本,執行成功,查看數據庫,成功的插入了3條數據(腳本設置迭代3次):

clip_image018

下面咱們要創建測試場景,經過管理機調度負載壓力機聯合產生負載,驗證各個壓力機的腳本執行結果。

clip_image020

直接點擊F5(Start Scenario),執行完成後,提示以下幾種錯誤(注意這些錯誤並非一塊兒出現的,這裏爲了便於講解,將全部遇到的錯誤列出):

①Error: System.out: java.sql.SQLException: Io 異常: The Network Adapter could not establish the connection

②Files transfer error: The file/directory C:\Documents and Settings\

Administrator\Local Settings\Temp\brr_YAR.29\netdir\c\documents and settings

\tian_yu\local settings\temp\res19\192.168.186.5_10.map does not exist.

③Error: System.err: java.lang.ClassNotFoundException: oracle.jdbc.driver.

OracleDriver

咱們來一個個的解決這些問題。

首先第一個問題,初步判斷是網絡問題。登陸產生報錯的負載壓力機,使用PL/SQL登陸數據庫,提示「ORA-12170:TNS:鏈接超時」,這個報錯咱們並不陌生,在3.1節中遇到過,關閉管理機的防火牆,問題解決。

再看第二個問題。根據問題描述能夠大體得出結論,是因爲Temporary directory配置路徑問題。回想在5.2.1中提到的Load generator設置,其中有一步就是添加Temporary directory,因此這裏咱們須要檢查各個負載壓力機的配置路徑是不是存在而且有權限訪問,通過測試,問題獲得解決。

最後一個問題也見過,咱們定位是數據庫的驅動加載問題,可是有的負載壓力機報錯,有的不報錯,這個是爲何呢?在管理機上咱們已經加載了驅動,執行腳本是沒有問題的。

仔細分析多負載壓力機的運行原理(見5.1),咱們知道各個負載壓力機是由管理機的Controller統一進行管理的,負載壓力機此時不會從本機的CLASSPATH獲取到任何信息(即便安裝了完整的Loadrunner),一切都是由Controller經過Agent與Load generator進行通訊的,因此當腳本執行到加載數據庫驅動語句時,必然是按照管理機的CLASSPATH配置路徑來加載驅動,但因爲不一樣機器上的Oracle不是統一安裝的,並且並不能保證每一個壓力機的Oracle安裝路徑徹底相同,因此當負載壓力機與管理機的驅動路徑不一致時,就會提示上面最後一個錯誤信息。

那麼該如何解決呢?兩個辦法,一是將全部的機器的Oracle安裝在徹底一致的路徑下,這個操做比較麻煩,涉及卸載和重裝Oracle。還有一個辦法,就是按照管理機ojdbc14.jar所在的路徑,在負載壓力機上建立徹底一致的目錄結構,只將驅動放在該目錄下便可,通過測試後該辦法可行,問題獲得解決。

目前已有的問題都解決了,咱們再次運行場景。又報錯了,提示:Listener refused the connection with the following error:ORA-12519, TNS:no appropriate service handler found The Connection descriptor used by the client was…。可是查看運行結果,插入了118條數據,就是說咱們離成功很近了,再接再礪。

通過以前錯誤排查和場景的運行結果的分析,咱們推測這個錯誤可能不是必現的,果真再運行一次,沒有報錯,數據庫裏也插入了正確的數據(118+120):

clip_image022

可是咱們仍是不能放過這個錯誤,要解決它。由於是非必現的問題,咱們就要考慮整個場景中,哪些因素是可能根據時間和狀態的不一樣發生動態變化的,這也是致使問題非必現的主因。大體能夠推測出來,系統的資源和網絡狀況是最有可能動態變化的,咱們優先考慮系統資源。這裏的系統資源主要是數據庫的資源了,數據庫有兩種重要資源:session和process。經過命令查看session配置爲170,process配置爲150,而且考慮到各個壓力機在以前的問題定位都打開了PL/SQL Developer,它們在必定時間內佔用了部分資源,場景也反覆執行了屢次,因此極可能是因爲資源不足致使了上面的問題,咱們將session和process的值都修改成500,而且關閉各個壓力機上的PL/SQL Developer軟件,反覆執行幾回場景,未出現報錯,數據庫中也插入了正確的數據,至此,咱們認爲該問題目前已經獲得瞭解決。

6 關於license

在以前的《LoadRunner Java Vuser開發環境配置指南》中提到過,調試Java Vuser腳本並不要求有Global license,可是當運行場景時,須要提供Global license,不然會提示以下信息:「You do not have a license for this Vuser type.Please contact HP Software to renew your license.」因此,當進行非Web的測試時,license應該是咱們首先要解決的問題。

7 總結

本文針對LoadRunner多負載壓力機的環境配置及腳本調試作了介紹,在配置和腳本調試過程當中能夠看到,咱們遇到了不少的問題。因爲多負載壓力機配置的自己涉及多個環境變量和多個軟件的配置,有必定的複雜性,可是經過不斷的排查和解決問題,咱們最終完成了場景的配置和測試,這其中的收穫仍是很是大的,在後面的教程中,將繼續經過實例介紹咱們在實際工做中遇到的各類問題及定位解決的方法,你們一塊兒學習,共同進步。

8 參考資料

[1]hp_man_LoadRunner11.00_ControllerUser_pdf,PDF page 37,HP LoadRunner Vuser Technology.

相關文章
相關標籤/搜索