1. 程式人生 > >使用LoadRunner錄製指令碼時如何選擇合適的協議?

使用LoadRunner錄製指令碼時如何選擇合適的協議?

怎麼開場呢?我就不說這個問題“很傻很天真”了,這就好比“漁夫要撈魚,如何選擇合適的網眼”、“程式設計師要寫程式碼,如何選擇系統標頭檔案”一樣,提出這樣的問題充分暴露出一種浮躁盲目的情緒:

× 業務不精:對被測軟體環境的總體架構不瞭解,不知道client和server間的通訊方式;軟體測試專業網站:51Testing軟體測試網1HyF2p7ugiPd
× 工具不精:但凡對LoadRunner的基本原理有所瞭解,估計也不會有這樣的問題。

其實只要你能把以上的兩點搞明白了,這個問題也就不再是問題。
$~3u+Z2V0} g0LoadRunner屬於應用在客戶端的測試工具,在客戶端模擬大量併發使用者去訪問伺服器,從而達到給伺服器施加壓力的目的。所以說LoadRunner模擬的就是客戶端,其指令碼代表的是客戶端使用者所進行的業務操作,即只要指令碼能表示使用者的業務操作就可以。

具體到指令碼應該選擇什麼協議,說直觀點,就是選擇指令碼中選擇哪些系統標頭檔案的問題。試想一下,如果你碰到開發人員寫程式時不知道用什麼標頭檔案,估計大部分測試員暗地裡要“笑話”人家;現在輪到自己了,呵呵。下面是各種協議和相關標頭檔案的對應關係。

具體到選擇協議,個人看法,有兩種策略。

×選擇click and scrīpt,相對比較簡單的協議,類似於WinRunnerQTP的GUI級別的指令碼,直接記錄滑鼠和鍵盤的動作,不需要關注底層的通訊協議,可以避免很多問題(如關聯等),容易理解,不過LoadRunner 9.0支援的click and scrīpt不多,只有以下三種:
TT4QBcVaJX0

Web (Click and scrīpt)
+c(VYo LJs�I[r)l0SAP (Click and scrīpt)軟體測試專業網站:51Testing軟體測試網#NJPw6o f-?1p
Ajax (Click and scrīpt)

×另外一種就是選擇協議的依據就是client和server之間的通訊協議了,記住,依據只是通訊協議,而不是別的。

誰說B/S結構的就一定選擇WEB(HTTP/HTML)?你試試51testing首頁的“線上客服”,或者線上的QQ或者MSN,看看用WEB(HTTP/HTML)能否錄到期望的指令碼?

誰又說C/S結構的就一定是WinSocket協議?目前很多的Win32應用客戶端其實也是HTTP通訊。難道各位沒有注意到LoadRunner還有下面的選項

所以說選擇什麼協議和什麼c/s、b/s結構關係不大,唯一的依據就是客戶端和伺服器之間的通訊。明白這一點後,什麼“單協議”、“雙協議多協議”統統不再是問題。

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


先搞清楚什麼是協議,為什麼要選擇協議。這就需要我們對通訊機理有一些的瞭解。
首先,什麼是協議?
協議無非就是一個約定,關於資料包傳送的格式的約定,就是說如果大家都這樣傳送,那麼通訊就能夠成功,如果大家都各按各的來,那麼就沒辦法進行通訊了。
那麼接下來就是LR錄製時的工作原理了,LR的錄製和WR不一樣,它不關心你的物件識別什麼的,不關心你的什麼視窗之類的,LR有一個Agent程序,來 專門監控客戶端和伺服器之間的通訊,然後用自己的函式進行錄製。所以說,LR錄製的時候關心的是通訊,是客戶端和伺服器之間的資料包。lr錄製機理,在錄製時,lr應該會對你從本機發出去的資料進行截包,並拆包。因為我們知道協議的不同 就是體現在資料包的結構不同,lr應該通過對包結構的分析,判斷是不是它支援的協議,對包資料的分析,來獲取使用者傳送的東西。說到這裡,大家就比 較清楚了,為什麼有的時候不能錄製呢?因為,協議不認識阿,導致LR截獲的資料包不能解析,所以錄製下來是空的。比如你用ftp的協議去錄製一個訪問網頁的IE操作,那肯定是無所收穫的。因為lr沒有在網路截獲到ftp協議格式的包,都是http協議格式的包,它不認,當然就是一個錄製為空的結果了。

現在我們弄懂了這個事情,就知道該如何選擇協議了。看見很多人關心lr是不是支援mysql協議。我認為要尋找的答案的思路是這樣的:
1。首先弄清mysql協議和其他資料庫協議的關係,看能不能用其它資料庫協議錄製。但其實oracle的cs協議是oracle獨有自己開發的協議,sqlserver也是一樣,而mysql又與這幾大產品又不是隸屬關係,其指令碼錄製的可能性很小。
2。mysql協議的底層是基於什麼協議的,如果直接構建在tcp協議上,lr又不支援mysql協議,那隻能考慮用低一點的協議彔彔看,即socket。如果mysql協議是構建在odbc協議上的,那麼就可能用lr的odbc api來寫。


到這裡我們再來看,那我們怎麼樣選擇協議呢?當然原則就是說,你資料包的通訊協議能被LR識別。
過去流行的一種說法是,只要B/s結構的都是選擇http協議,如果不是b/s那麼肯定是socket,其實這種說法是比較膚淺或者比較片面的,我覺得要 真正理解這個問題,必須搞清楚你所測系統的資料流採用的什麼協議包裝的。這個我個人覺得,最好是能去向開發人員多瞭解,多學習。(說到這裡,我想順便建議 一點:測試人員向開發人員學習是個好習慣,多學一點底層的東西,或者對程式架構,資料流向,內部結構分析多瞭解一點,對自己的測試很有幫助,對自己的成長 也是有幫助的),另外,個人覺得,作為一個測試人員需要多瞭解一些網路方面的專業知識,最好學習一些網路分析工具譬如說Sniffer等,這對測試很有幫 助。
說了這麼多,似乎跑題了?還是回到正題,如何選擇協議。
我下面給大家推薦一些建議值,是我在某本測試專業書籍上看到了,給大家貼上來,僅供參考。我還是說,具體問題具體分析,選擇協議不是一個教條的事情,而是需要研究探索並嘗試。
協議選擇參考:
   應用型別      協議選擇
1. Web網站       HTTP/HTML
2. FTP伺服器     FTP
3. 郵件伺服器    IMAP,POP3,SMTP
4.  C/S (第一種)客戶端以ADO,OLEDB方法連線後臺資料庫   MS SQL Server,Oracle,Sybase,DB2,Infrmix
    C/S  (第二種)客戶端以ODBC方法連線後臺資料庫  ODBC
    C/S  (第三種)沒有後臺數據庫   Socket
5. ERP系統    SAP Peoplesoft
6.分散式元件   COM/DACOM  EJB
7.無線應用     WAP  PALM

總之,只有充分了解被測系統的應用型別和技術架構,才能做出正確的選擇。

理論上來說我們在對一個系統做效能測試以前,要先和開發人員瞭解一下他們在開發過程中都用了些什麼技術,資料流是用什麼協議封裝的,還要了解我們要測試的 系統的網路結構,伺服器的配置等問題;還有就是要知道系統客戶端和第一伺服器間的協議,這中間就涉及到一箇中間件的問題。另外我們要知道協議的選擇直接關 繫到LR會捕獲到什麼樣的資料包。這些是進行效能測試的基礎。
    下面說幾個測試的原則(都是自己遇到過的,呵呵,沒遇到過的就不知道了):
1、一般情況下b/s構架的只要 選擇http協議就可以了,如果有中介軟體的則選擇中介軟體伺服器的協議 ;
2、一般不是基於瀏覽器的,我們在測試的過程中都會選擇WinSocket協議來錄製,理論上來講我們這樣選擇是正確的,但我們要知道在錄製的時候所選擇 的協議就決定了LR如何捕獲資料包,如果我們選擇錯誤了,將會捕獲到一些無用的資料包。cs結構是比較複雜的,在這裡我要提醒大家,一定要搞清楚cs是 client-database還是client-server-database結構的,只有這樣我們才能夠決定是選擇WinSocket協議還是 sql協議,或者說選擇多個協議;當然協議的選擇也是一個探索的過程,只要能夠得到我們想要的結果,那就是正確的。還有一點,我們在做效能測試的時候應該 是有測試重點的,呵呵。
3、關於單協議和雙協議,我只知道IE6核心的瀏覽器在錄製指令碼的時候要選擇單協議,而IE7核心的瀏覽器在錄製指令碼的時候要使用雙協議。