1. 程式人生 > >NO1-----LoadRunner指令碼中的協議選擇---轉載

NO1-----LoadRunner指令碼中的協議選擇---轉載

轉載https://blog.csdn.net/u010574553/article/details/76559525

內容簡介
LoadRunner指令碼開發過程中的協議選擇作為指令碼開發的第一個步驟,相當重要,只有選擇了合理的正確的協議才能開發出好的測試指令碼。在協議選擇過程中需要注意選擇與被測物件相應的指令碼,比如Web系統一般選擇HTTP./HTML協議,FTP伺服器一般選擇FTP協議的指令碼,另外在協議選擇之前需要確認被測系統使用了什麼協議,這裡說到的協議指的是應用層的協議,一一般有以下幾種方法:
1)可以直接確認
這種情況下你可以通過你的測試常識直接判讀系統使用了什麼樣的協議,比如前面說的Web系統使用了HTTP./HTML協議,Ftp服務使用了FTP協議等;
2)通過研發人員瞭解被測系統使用了什麼樣的協議
如果通過你的判斷不能確定使用了什麼樣的協議這個時候,你可以跟研發人員進行溝通,確認他在開發的過程中使用了什麼樣的協議。
3)使用常用的資料監聽工具進行資料包分析
有的時候可能你的研發人員也不能確定他在開發過程中使用了什麼協議,這個確實是有可能的特別是現在的研發人員特別喜歡用別人的外掛,或者開發環境封裝的很好,導致他們沒有開發底層的協議棧,這個時候就需要你自己去判斷,自己判斷過程中可以藉助協議分析工具,常用的協議分析工具如:sniffer Pro,ethreal等;這些工具可以通過抓取資料然後對資料包進行分析的方法分析出現在常用的協議。能力還是相當的強的。
4)萬能協議Winsocket協議
如果上述方法都不行,但是你還想用LR完成你的效能測試,沒有辦法這個時候可以拿出這個Winsocket協議進行指令碼的開發,這個協議只要是在 Windows上的通訊的軟體都可以將指令碼開發出來,但是指令碼除錯的難度相當到,需要看大量的16進位制的資料,並且有的時候還需要複雜的管理,本人建議能不用,最好不用。
另外可以通過以下的這些文章對協議選擇進行更深入的瞭解:
1. LoadRunner的協議選擇
1)LR支援多種協議,請大家一定要注意,這個地方協議指的是你的Client端通過什麼協議訪問的Server,Client一般是面向最終使用者的,Server是第一層Server端,因為現在的體系架構中經常Server層也分多個層次,什麼應用層,什麼資料層等等,LR只管Client如何訪問第一層Server.
2)特別要注意某些應用,例如一個Web系統,這個系統是通過ActiveX控制元件來訪問後臺的,IE只是一個容器,而ActiveX控制元件訪問後臺是通過 COM/DCOM協議的,這種情況就不能使用Web協議,否則你什麼也錄製不到,所以,LR工程師一定要了解應用程式的架構和使用的技術。
3)談談多協議LR是支援在一個腳本里面使用多協議的,不過這個多協議是有一定的限制的,我有一個LR7.6上哪些協議支援多協議,LR8.0是不是取消了這些限制我不清楚。象HTTPS,一般來講一定要選擇多協議,但在選擇具體協議的時候一定只選Web協議,這時候才能作那個埠對映。
4)談談Web協議中Option Web協議裡面有一些Option,具體我記不清楚了,但有一個地方很重要:就是選擇URL方式還是HTM方式錄製,這裡有一些原則a. 儘量使用HTM方式錄製b.如果使用了Javascrīpt,並且javascrīpt裡面與後臺有互動,那一定要使用URL方式,例如 javascrīpt用於判斷使用者名稱和密碼是否正確(與後臺一定會有互動),那麼就要使用URL方式錄製;但如果Javascipt只是判斷使用者名稱或密碼的格式,那一般不會與後臺發生互動,就不需要使用URL方式。至於什麼情況下一定要用URL方式,我曾經寫過一個文件,但現在我不記得了不好意思。
5)談談併發點和結果檢查很多人喜歡使用併發點和結果檢查,我談談我自己的看法。第一我基本上從來不使用結果檢查,壓力測試的結果我一般是去後臺檢查儲存層的資料是否正確的。LR只能檢查協議層上的錯誤,但如果在大量併發使用者的情況下使用返回結果檢查例如reg_text_check,會極大的佔用客戶端的資源,我一般不這麼作;至於併發點,我只有在客戶強烈要求的情況下才會使用,否則基本不用。

2.LoadRunner的協議選擇、Winsocket、CS應用程式
很多時候一提到不是基於瀏覽器的應用,很多人就會想到用WinSocket協議來錄製,彷彿Form窗體都可以用Winsocket 。
從道理上講網路通訊的底層都是基於Socket的,例如TCP、UPD等,似乎所有的程式都可以用Socket協議來錄製。但是事實不是這樣的,因為選擇的協議決定了LoadRunner如何捕獲資料包。否則會多捕獲很多無用的資料。
因此,不是所有的程式都是適合WinSocket協議的。實際上,那些基於Socket開發的應用才真正適合Socket協議來進行錄製。其他的,例如基於資料庫的應用,就不太時候Socket協議,甚至可能錄製不到指令碼。
很多C/S程式,一定要選擇合適的協議。根據作者的經驗,C/S的程式多數需要手工開發很多指令碼,因為錄製的很多回放時候或多或少都會有些問題,但是可以參考錄製的結果。
所以測試一個程式,一定要搞清楚開發人員用了什麼技術、資料流是什麼協議封裝的。
附件是我們自己開發的Controller,我們自己用面向物件實現了併發測試架構(目前支援併發、迭代、thinktime、引數檔案、啟動時間間隔,集合點功能正在開發中)。藉助我們自己開發的Agent,能很好的測試我們的C/S架構的程式。
這個工具和LoadRunner配合起來,可以完成大多數效能測試。
這個工具主要為我們測試視訊播放效果而開發,呵呵。這是LoadRunner不太擅長的。
3.使用LoadRunner如何更好的選擇協議
LoadRunner支援的協議和應用非常廣泛,測試B/S系統選擇Web(Http/Html)。
測試一個C/S系統要根據所用到的後臺資料庫來選擇不同的協議:
1)後臺資料庫是sybase,則採用sybaseCTlib協議。
2)後臺資料庫是sql server,則使用MS sql server協議。
3)後臺資料庫是oracle 資料庫,就使用oracle 2-tier協議。
4)沒有資料庫的c/s(ftp,smtp)系統,可以選擇windowsSockets協議。
5)其他的ERP,EJB(需要ejbdetector.jar),選擇相應的協議即可。
4.Loadrunner錄製指令碼,協議的選擇
一般對於常見的應用軟體,可以根據軟體的結構來選擇協議:
B/S 結構,選擇WEB(Http/Html)協議
C/S結構,可以根據後端資料庫的型別來選擇,如SybaseCTLib協議用於測試
後臺的資料庫為Sybase的應用;MS SQL Server協議用與測試後臺資料庫為 SQL
Server的應用;對於一些沒有資料庫的Windows應用,可選用Windows Sockets底
層協議。
總之,正確選擇協議,就要熟悉被測試應用的技術架構。以下列出一些LoadRounner支援的協議:
一般應用:C Vuser、VB Vuser、VB scrīpt Vuser、JAVA Vuser、JavascrīptVuser
電子商務: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
5.LoadRunner與Winsock協議
在討論winsock解決方案之前,我們先討論一下各種協議是如何工作。從前面的簡介可以瞭解到很多的高階協議,例如FTP,HTTP協議等。以及所有基於window的應用(例如IE,WS-FTP)底層都是在Winsocket層上通訊,因此任何高階協議的底層都是用Winsocket通訊。
什麼時候在LR中選擇Winsocket協議呢?你要先了解LR是怎麼樣工作的:LR捕捉API請求然後再把它們回放。所以當你在建立LR WEB指令碼的時候,VUGEN捕捉從IE出去的所有的HTTP請求。除此之外lr還支援其他很多協議,例如Oracle,ODBC等。在選擇不同協議錄製指令碼的時候,LR是依靠hooks捕捉正確的API請求。所以既然大部分網路協議都是架構在winsocket協議之上的,那對於lr不支援的協議,我們都可以在winsocket層上錄製指令碼。所以當找不到合適協議的時候,可以選擇winsocket來錄製。
錄製WinSock協議指令碼!
Lr錄製新的虛擬使用者指令碼,選擇winsock協議;
在web虛擬使用者指令碼中錄製的是URL資訊,所以VUGEN啟動流覽器並執行就可以了,但選擇Winsocket錄製的時候,可能會是各種形式的應用,並不簡簡單單就是瀏覽器,所以在開始的時候我們不需要指定應用的地址。
下面的例子我們選擇winsock來錄製web應用,正如上面說的我們開始要指定ie的地址。因為本來lr是支援http協議的,所以這個例子並無具體的意義,只是為了使例子簡單。
winsock指令碼典型程式碼:
lrs_create_socket(“socket0”,”UDP”,”LocalHost=”0”“,”RemoteHost=doors:2084”,LrsLastArg);
lrs_create_socket(“socket1”,”TCP”,”LocalHost=0”,”RemoteHost=www2。yahoo。com:80”,LrsLastArg);
lrs_send(“socket0”,”buf0”,LrsLastArg);
lrs_receive(“socket0”,”buf1”,LrsLastArg);
lrs_send(“socket1”,”buf2”,LrsLastArg);
lrs_send(“socket0”,”buf3”,LrsLastArg);
lrs_receive(“socket0”,”buf4”,LrsLastArg);
這是訪問雅虎的一個應用,正如我們看到的,winsock先開啟一個winsocket連線,然後收發包。我們發現錄製的指令碼中比web指令碼(三個檔案)多一個檔案。
第四個檔案是data.ws,它裡面記載了在action裡面收發所有包的內容。
下面是一個data.ws的例子。
send buf0
“!”
recv buf1 1
“!”
send buf2
“GET / HTTP/1。1\r\n”
“Accept: /\r\n”
“Accept-Language: en-us\r\n”
“Accept-Encoding: gzip,deflate\r\n”
“User-Agent: Mozilla/4。0 (compatible; MSIE 5。01; Windows NT 5。0)\r\n”
“Host: www。yahoo。com\r\n”
“Connection: Keep-Alive\r\n”
“Cookie: B=”5oj83bst12l6m&b=”2;”Y=”v=1&n=8lln5lmi3f8g1&l=6ef8c0d34b0/o&p=m2a2s””
“qa4110004&r=3f&lg=us&intl=us; T=”z=4TVE6A4ZqE6A9dIIpt30。NQNTYGNDE3NTYwM081&””
“a=AAE&sk=DAAEwinHlDtEm/&d=c2wBTWpFQk16WXdNakUzTkRneQFhAUFBRQF6egE0VFZFNkFn”
“V0E-;I=”i1=010g1q1u24252e2i2k2p2r494a4g4m4q55565b5g6g6t6u7172737678797a7f7””
“g7k7n7o888f8k8p8q989c9f9i9k9l9n9qacanapb0b3bdbfbhblbqbrbuc0c1c4cgcmcscteie”
“jgr&ir=73\r\n”
“\r\n”
send buf3
“!”
recv buf4 1
“!”
recv buf5 2048
“HTTP/1。0 200 OK\r\n”
“Content-Length: 16030\r\n”
“Content-Type: text/html\r\n”
“\r\n”

buf2包含了發給www。yahoo。com的包,buf5包含了從server收到的迴應。正如看到的winsock錄製的指令碼並不像web指令碼那樣具有可讀性,因為winsock是我們最後的選擇。在buf序列號的後面是buf的位元組數。例如5號buffer後面的2048就是表示收到了2048個幀。
注意:在很多buffer裡面你會發現僅僅包含了一個“!”,這是一個網路常識,這個幀對於應用來說沒有任何的作用,完全可以把這些楨清除掉,在 data。ws清除這個幀是效果的,需要到action裡把這些楨註釋掉。譬如例子中收到和發出的buffer可以用//註釋掉。這樣可以使指令碼執行得更快。下邊的例子:buffers 0,1,3 和4 可以註釋掉:
lrs_create_socket(“socket0”,”UDP”,”LocalHost=”0”“,”RemoteHost=doors:2084”,LrsLastArg);
lrs_create_socket(“socket1”,”TCP”,”LocalHost=0”,”RemoteHost=www2。yahoo。com:80”,LrsLastArg);
// lrs_send(“socket0”,”buf0”,LrsLastArg);
// lrs_receive(“socket0”,”buf1”,LrsLastArg);
lrs_send(“socket1”,”buf2”,LrsLastArg);
// lrs_send(“socket0”,”buf3”,LrsLastArg);
// lrs_receive(“socket0”,”buf4”,LrsLastArg);
lrs_receive(“socket1”,”buf5”,LrsLastArg);
lrs_send(“socket0”,”buf6”,LrsLastArg);
6.LoadRunner之協議選擇
在學習LoadRunner協議選擇之前,我覺得我們有必要了解一下協議的基本概念。如目前因特網上廣泛使用的TCP/IP協議等,任何計算機連入網路後只要執行TCP/IP協議,就可訪問因特網。
瞭解了協議的基本概念和作用之後,我們來說說LoadRunner的協議選擇。LoadRunner首先是一個測試工具,其次是一個性能測試工具,然後是該工具是一個基於協議,也就是說LoadRunner測試的物件都需要使用通訊協議,對於那些不使用通訊協議僅僅進行本地處理的軟體例如 Microsoft Word,LoadRunner就不適用。
說到通訊協議我們來熟悉一下協議的分層,按照OSI的分層模型,分層結構如下:

OSI七層模型
TCP/IP協議
應用層
應用層(Application)
表示層
會話層
傳輸層
傳輸層(Transport)
網路層
網路層(Internet)
資料鏈路層
網路介面層(Network)
按照TCP/IP協議的分層,分層結構如下:
TCP/IP協議
對應的服務
應用層
WWW、SMTP、FTP、Telnet、Gopher、SNMP
Socket、NetBIOS
傳輸層
TCP、UDP
網路層
IP(ARP、RARP、ICMP)
網路介面層
Ethernet、X.25、PPP、SLIP

第一個分層是由OSI制定但不實用,後一個是目前廣泛使用且被業界認做既定標準的協議分層,下文探討的LoadRunner協議選擇即按TCP/IP協議的分層模型討論。
1
接著來說說LoadRunner VuGen中的協議分類,VuGen(LR8.1)中的協議分類如下表所示:

javascript:;” target=_self>應用程式部署解決方案
Citrix ICA
客戶端/ 伺服器
DB2 CLI、DNS、Informix、MS SQL Server、ODBC、Oracle(2 層)、Sybase Ctlib、Sybase Dblib 和 Windows Sockets 協議
自定義
C 模板、Visual Basic 模板、Java 模板、Javascript 和 VBScript 型別的指令碼。
分散式元件
適用於 COM/DCOM、Corba-Java 和 Rmi-Java 協議。
電子商務
FTP、LDAP、Palm、PeopleSoft 8 mulit-lingual、SOAP、Web(HTTP/HTML) 和雙 Web/WinSocket 協議。
Enterprise Java Bean
EJB 測試和 Rmi-Java 協議。
ERP/CRM
Baan、Oracle NCA、Peoplesoft-Tuxedo、SAP-Web、SAPGUI、Siebel-DB2 CLI、Siebel-MSSQL、Siebel-Web 和 Siebel-Oracle 協議
傳統
終端模擬 (RTE)。
郵件服務
Internet 郵件訪問協議 (IMAP)、MS Exchange (MAPI)、POP3 和SMTP。
中介軟體
Jacada 和 Tuxedo (6、7)協議。
流資料
Media Player (MMS) 和 Real 協議。
無線
i-Mode、VoiceXML 和 WAP 協議。

仔細研究發現LoadRunner VuGen中的協議與文章開頭所說的通訊協議還是有一定的區別的,例如像LoadRunner VuGen中的C 模板、Visual Basic 模板、Java 模板、Javascript 和 VBScript 型別的指令碼均為開發語言,非通訊協議,但LoadRunner即把它列在這兒,我們也就暫且認可。
瞭解了LoadRunner的協議型別之後,我們進入正式話題,即測試時如何選擇協議。
正式測試之前,測試人員都需要預先熟悉被測物件,我們需要知道我們的被測物件是一個什麼樣的結構,是B/S結構還是C/S結構,瞭解這個之後,我們還需要了解被測物件所使用的協議是什麼,也許有的人說我們的程式使用的是TCP/IP協議,其實他的回答跟我們需要知道的差別很大,因為我們知道,所有的通訊軟體都需要使用TCP/IP協議,為什麼呢,因為這個協議是底層協議,所有應用層資料都必須經過這個協議封裝之後才能向更底一層傳輸。我們需要知道的是被測物件在應用層使用的是什麼協議,就像我們使用郵件客戶端傳送郵件一樣,我們知道使用的應用層協議是SMTP,使用郵件客戶端接收郵件時使用的時POP3協議。瞭解上述資訊之後,我們的定位也就準確了,也就是說在LoadRunner中所說的協議基本上都是應用層協議(也有底層協議,例如 Windows Sockets),知道這點之後,我們在詢問開發人員時就避免了不少麻煩,省的開發人員告訴你我們使用的是TCP/IP協議或者其他底層協議。
一般來說協議選擇有如下原則:
B/S 結構,選擇WEB(Http/Html)協議;
C/S結構,可以根據後端資料庫的型別來選擇,如SybaseCTLib協議用於測試後臺的資料庫為Sybase的應用;MS SQL Server協議用與測試後臺資料庫為 SQLServer的應用;對於一些沒有資料庫的Windows應用,可選用Windows Sockets底層協議;使用了資料庫但使用的是ODBC連線的資料則選擇ODBC協議;
對於有些使用純JAVA編寫的C/S結構的東東,採用JAVA,而且不能錄製只能手工編寫程式碼(工作量和難度還是有的)。同樣不能錄製的還包括C、VB Script、VB、VBNet User協議。
對於Windows Sockets協議來說,最適合的那些基於Socket開發的應用程式;但是由於網路通訊的底層都是基於Socket的,因此幾乎所有的應用程式都能夠通過Socket來錄製,哪可能有人會問,哪既然Socket都能錄製下來,還要那麼多協議做什麼,價格還賊貴,其實最主要的原因就是Socket錄製的程式碼可讀性較差,如果Socket的指令碼可讀性較高的話,實話就沒有其他協議出現的必要性了。
對於郵件來說,首先要看你收郵件的途徑,如果你通過WEB頁面收發郵件,毫無疑問,你選擇協議時就需要選擇HTTP協議,如果你通過郵件客戶端,像 OutLook、FoxMail之類的,則需要根據操作不同選擇不同的協議了,例如發郵件你可能要選擇SMTP、收郵件你可能需要選擇POP3。
Loadrunner 不能錄製指令碼的解決方法
方法一:若果被測試系統在本機上,訪問地址為:http://127.0.0.1:埠/程式名稱,需要將URL改為:http://localhost:埠/程式名稱,這樣就可以產生指令碼了。這個現象我也覺得很奇怪,不知道到底為什麼?但是,改成(http://localhost:埠/程式名稱)的確可以產生指令碼了,呵呵!

方法二:關閉loadrunner和IE,在loadrunner的執行檔案目錄bin下找到檔案register_vugen.bat,執行改檔案,然後重啟loadrunner,嘗試錄製。
方法三:一種是IE設定可能有問題。IE的高階選項中有一個啟用第三方瀏覽器擴充套件(需要重啟),請不要選擇改選項。
方法四:如果實在被逼無奈。請重灌系統,重灌loadrunner。
方法五:重複方法一到三,方法四最多試一次

LR 9.5 折騰了一晚上,終於通過設定[我的電腦]–》【屬性】–》【高階】–》【效能】–>[資料執行保護]–》【只為關鍵的執行保護】,搞定
---------------------
作者:ai30001
來源:CSDN
原文:https://blog.csdn.net/u010574553/article/details/76559525
版權宣告:本文為博主原創文章,轉載請附上博文連結!