在軟件測試工具中了解有關小結L的oadRunner的協議選擇
很多使用LoadRunner的測試人員經常面臨到這個問題那就是有關LoadRunner的協議,本篇就是基于幫助測試人員解決這個問題而編寫的,致力于使讀者學精LoadRunnner這一強大的性能測試工具。全篇共分為幾個部分來詳細的講解有關LoadRunner的協議
正確選擇協議,就要熟悉被測試應用的技術架構。以下列出一些LoadRounner支持的協議:
一般應用:C Vuser、VB Vuser、VB scrīpt Vuser、JAVA Vuser、Javascrīpt Vuser
電子商務:WEB(Http/Html)、FTP、LDAP、Palm、Web/WinsocketDual Protocol
客戶端/服務器:MS SQL Server、ODBC、Oracle、DB2、Sybase CTlib、Sybase DBlib、Domain Name Resolution(DNS)、Windows Socket
分布式組件:COM/DCOM、Corba-Java、Rmi_Java
EJB:EJB、Rmi_Java
ERP/CRP: Oracle NCA、SAP-Web、SAPGUI、SAPGUI/SAP-Web Dual Protocol、PropleSoft_Tuxedo、Siebel Web、Siebel-DB2 CLI、Sieble-MSSQL、Sieble Oracle
遺留系統:Terminal Emulation (RTE)
Mail 服務:Internet Messaging(IMAP)、MS Exchange(MAPI)、POP3、SMTP
中間件:Jacada、Tuxedo 6、Tuxedo 7
無線系統:i-mode、voiceXML、WAP
應用部署軟件:Citrix_ICA流:Media Plays(MMS)、Real
一段對于loadrunner協議選擇的經典解答協議是數據在網絡中傳輸的結構模式。協議不同,其數據報文的結構也有所不同。協議是有層次的,一般我們從ip層開始,往上有TCP協議層,UDP協議層,而TCP和UDP協議層上又有http協議層,ftp協議層,smtp協議層等我們在lr中看到的這些應用層的協議。其實這些高層協議都是對底層協議進行的進一步封裝。舉個簡單例子,本來IP協議的數據報文是無序,不是可靠傳輸的,在其數據報文外面增加了報文序號,報文狀態等數據段就構成了TCP協議層。所以我們很多網絡應用,沒有找到合適的協議,就用winsock來錄制,那是肯定沒有問題的。因為幾乎所有的網絡傳輸中都是基于tcp 協議或udp協議的,而socket正是這一級上的概念。但是由于socket協議級別太低,你錄下來的東西是很難理解的,都是 socket,port,data之類的東西。所以,我們盡量用高層協議來錄制,我們就能看懂了。
話要再說回來,解決一下具體的問題。我們看到一個軟件體系架構,應該怎樣選擇錄制協議呢?說到這里,我要說一下自己對lr錄制機理的理解(我沒有接觸過lr內核,只是憑猜測和推斷)。在錄制時,lr應該會對你從本機發出去的數據進行截包,并拆包。因為我們知道協議的不同就是體現在數據包的結構不同,lr應該通過對包結構的分析,判斷是不是它支持的協議,對包數據的分析,來獲取用戶發送的東西。比如你用ftp的協議去錄制一個訪問網頁的IE操作,那肯定是無所收獲的。因為lr沒有在網絡截獲到 ftp協議格式的包,都是http協議格式的包,它不認,當然就是一個錄制為空的結果了,F在我們弄懂了這個事情,就知道該如何選擇協議了?匆姾芏嗳岁P心lr是不是支持mysql協議。我認為要尋找的答案的思路是這樣的:
1、首先弄清mysql協議和其他數據庫協議的關系,看能不能用其它數據庫協議錄制。但其實oracle的cs協議是oracle獨有自己開發的協議,sqlserver也是一樣,而mysql又與這幾大產品又不是隸屬關系,其腳本錄制的可能性很小。
2、mysql協議的底層是基于什么協議的,如果直接構建在tcp協議上,lr又不支持mysql協議,那只能考慮用低一點的協議錄錄看,即socket。如果mysql協議是構建在odbc協議上的,那么就可能用lr的odbc api來寫。
很多時候一提到不是基于瀏覽器的應用,很多人就會想到用WinSocket協議來錄制,仿佛Form窗體都可以用Winsocket 。從道理上講網絡通訊的底層都是基于Socket的,例如TCP、UPD等,似乎所有的程序都可以用Socket協議來錄制。但是事實不是這樣的,因為選擇的協議決定了LoadRunner如何捕獲數據包。否則會多捕獲很多無用的數據。因此,不是所有的程序都是適合WinSocket協議的。實際上,那些基于Socket開發的應用才真正適合Socket協議來進行錄制。其他的,例如基于數據庫的應用,就不太時候Socket協議,甚至可能錄制不到腳本。很多C/S程序,一定要選擇合適的協議。根據作者的經驗,C/S的程序多數需要手工開發很多腳本,因為錄制的很多回放時候或多或少都會有些問題,但是可以參考錄制的結果。所以測試一個程序,一定要搞清楚開發人員用了什么技術、數據流是什么協議封裝的。理論上來說我們在對一個系統做性能測試以前,要先和開發人員了解一下他們在開發過程中都用了些什么技術,數據流是用什么協議封裝的,還要了解我們要測試的系統的網絡結構,服務器的配置等問題;還有就是要知道系統客戶端和第一服務器間的協議,這中間就涉及到一個中間件的問題。另外我們要知道協議的選擇直接關系到LR會捕獲到什么樣的數據包。這些是進行性能測試的基礎。 下面說幾個測試的原則(都是自己遇到過的,呵呵,沒遇到過的就不知道了):
1、一般情況下b/s構架的只要 選擇WEB(Http/Html)協議就可以了,如果有中間件的則選擇中間件服務器的協議 ;
2、C/S結構,可以根據后端數據庫的類型來選擇。如SybaseCTLib協議用于測試后臺的數據庫為Sybase的應用;MS SQL Server協議用與測試后臺數據庫為 SQL Server的應用;
3、一般不是基于瀏覽器的,對于一些沒有數據庫的Windows應用,我們在測試的過程中都會選擇WinSocket協議來錄制,理論上來講我們這樣選擇是正確的,但我們要知道在錄制的時候所選擇的協議就決定了LR如何捕獲數據包,如果我們選擇錯誤了,將會捕獲到一些無用的數據包。cs結構是比較復雜的,在這里我要提醒大家,一定要搞清楚cs是client-database還是client-server-database結構的,只有這樣我們才能夠決定是選擇WinSocket協議還是sql協議,或者說選擇多個協議;當然協議的選擇也是一個探索的過程,只要能夠得到我們想要的結果,那就是正確的。還有一點,我們在做性能測試的時候應該是有測試重點的,呵呵。
4、關于單協議和雙協議,我只知道IE6內核的瀏覽器在錄制腳本的時候要選擇單協議,而IE7內核的瀏覽器在錄制腳本的時候要使用雙協議。
文章來源于領測軟件測試網 http://www.kjueaiud.com/