首先讓我們先看一下loadrunner- winsock 函數 一覽表:
lrs_accept_connection 接受偵聽套接字連接
lrs_close_socket 關閉打開的套接字
lrs_create_socket 初始化套接字
lrs_disable_socket 禁用套接字操作
lrs_exclude_socket 重播期間排除套接字
lrs_get_socket_attrib 獲取套接字屬性
lrs_get_socket_handler 獲取指定套接字的套接字處理程序
lrs_length_receive 接收來自指定長度的緩沖區的數據
lrs_receive 接收來自套接字的數據
lrs_receive_ex 接收來自數據報或流套接字的數據(具有特定長度)
lrs_send 將數據發送到數據報上或流套接字中
lrs_set_receive_option 設置套接字接收選項
lrs_set_socket_handler 設置特定套接字的套接字處理程序
lrs_set_socket_options 設置套接字選項
緩沖區函數
lrs_free_buffer 釋放分配給緩沖區的內存
lrs_get_buffer_by_name 從數據文件中獲取緩沖區及其大小
lrs_get_last_received_buffer 獲取套接字上接收到的最后的緩沖區及其大小
lrs_get_last_received_buffer_size 獲取套接字上接收到的最后一個緩沖區的大小
lrs_get_received_buffer 獲取最后接收到的緩沖區或其一部分
lrs_get_static_buffer 獲取靜態緩沖區或其一部分
lrs_get_user_buffer 獲取套接字的用戶數據的內容
lrs_get_user_buffer_size 獲取套接字的用戶數據的大小
lrs_set_send_buffer 指定要在套接字上發送的緩沖區
環境函數
lrs_cleanup 終止Windows套接字 DLL 的使用
lrs_startup 初始化 Windows 套接字 DLL
關聯語句函數
lrs_save_param 將靜態或接收到的緩沖區(或緩沖區部分)保存到參數中
lrs_save_param_ex 將用戶、靜態或接收到的緩沖區(或緩沖區部分)保存到參數中
lrs_save_searched_string 在靜態或接收到的緩沖區中搜索出現的字符串,將出現字符串的緩沖區部分保存到參數中
轉換函數
lrs_ascii_to_ebcdic 將緩沖區數據從 ASCII 格式轉換成 EBCDIC 格式
lrs_decimal_to_hex_string 將十進制整數轉換為十六進制字符串
lrs_ebcdic_to_ascii 將緩沖區數據從 EBCDIC 格式轉換成ASCII 格式
lrs_hex_string_to_int 將十六進制字符串轉換為整數
超時函數
lrs_set_accept_timeout 為接受套接字設置超時
lrs_set_connect_timeout 為連接到套接字設置超時
lrs_set_recv_timeout 為接收套接字上的初始預期數據設置超時
lrs_set_recv_timeout2 為建立連接后接收套接字上的預期數據設置超時
lrs_set_send_timeout 為發送套接字數據設置超時
錄制會話之后,通過 VuGen 的內置編輯器可以查看錄制的代碼。您可以在腳本中滾動,查看應用程序生成的函數,並檢查傳輸的數據。在主窗口中查看腳本時,可以看到VuGen 錄制活動的順序。在典型的會話期間,將錄制下列函數順序:
lrs_startup 初始化 WinSock DLL
lrs_create_socket 初始化套接字
lrs_send 在數據報上或者向流套接字發送數據
lrs_receive 接收來自數據報或流套接字的數據
lrs_disable_socket 禁用套接字操作
lrs_close_socket 關閉打開的套接字
lrs_cleanup 終止 WinSock DLL 的使用
VuGen 在 Windows 上使用 Windows 套接字協議支持應用程序的錄制和重播;而在UNIX 平台上僅支持重播。
--------------------------------------------------------------------------------------------------------------------
那如何用LoadRunner使用winsock協議測試性能呢?
如何來測試使用windows sockets協議的性能呢?可以使用loadrunner來測試。步驟如下
首先、我們需要獲得傳送的數據包的內容,可以通過抓包工具來獲取(如sniffer)。也可以直接向開發人員索取。要理解數據包中每位數據的含義,如哪些是啟始位,哪些是正文,哪些是校驗,哪些是結束等。並統計數據包大小。
第二步、我們開始編寫腳本,
1、我們初始化Windows Sockets DLL:lrs_startup(version)。
2、然后建立socket連接:lrs_create_socket。
3、然后再把數據放在一個buffer中傳送到目標服務器:lrs_send,數據包內容放在data.ws中。這樣,一個發送就完成了。
4、然后我們再來接受服務器端給我們的返回數據:lrs_receive。
5、別忘記來個lrs_close_socket來關閉socket,做事有始有終嘛。
簡單吧,復雜的流程就是相互組合。最后不要忘記在一些關鍵點前后加上transaction,以方便得到關鍵點的性能。
第三步、我們開始執行,與其他協議一樣,把得到的結果進行分析。
下面這段是zee寫得關於手寫winsock腳本。轉載過來學習下
對winsock腳本來說,手寫腳本不是首選。為了理解如何建立腳本和Buffers,你需要知道服務器發送出來的協議
的細節。
為了自動產生腳本,需要錄制一個客戶端的應用。
如果你對服務器使用的協議非常的了解,那么也許你可以建立一個Data.ws文件和連貫的actions。但是這個過程
一定是單調而乏味的。你要有一些winsock腳本方面的經驗。
為了看一個winsock腳本的例子,先試着錄制一個簡單的WEB應用(比如一個訪問某站點首頁的動作)。它會生成一
個簡單的winsock腳本和buffer內容的格式。
為了建立LoadRunner的winsock腳本,錄制一個客戶端應用更可取。這樣可以讓LoadRunner從windows socket通
信中看到客戶端和服務器的底層通信。LoadRunner使用wsock32.dll庫錄制socket通信,這個庫包括windows
socket的API。
為了手寫LoadRunner的winsock腳本,需要非常熟悉使用的協議。錄制一個簡單的瀏覽器的操作可以看到低於HTT
P協議通信的腳本。
下面是一個簡單的例子:
以前的例子中未能接觸到socket協議,但這也是一個較為多用的協議,也是必須要學習掌握的。
此次例子采用本地及時通訊軟件飛秋來做學習。
通過我下面錄制的腳本來說明:
/********************************************************************* #include "lrs.h"
//這是第一步initializes a socket //取得緩沖區數據 lr_end_transaction("send", LR_AUTO); } return 0; |
下面我們來看buf中發送的數據,數據都會保存在data.ws文件中:
發送的明文內容:lihongtao,但是可以看出,這里顯示的都是密文,應該是按格式轉換了編碼。
;WSRData 2 1
send buf1 371
"1_lbt4_0#128#0016D3B50AA3#0#0#0:1246963533:Administrator:LND7DEMO:4194592:"
"20002:21b56c1d54100180afb94c84050a7f371f1010472b26092920ea2629699a74b2cbfe"
"242eb74b16e66e6fe90c4610ccb110ce400851e68e16c51470a91120dfcdf324444e647444"
"864e823810539413ed0b6b29a8ed46d2f95839047dbe4555b141afb80f5cf9c06e8af0aa90"
"afe852dbfedab05ee91932a95f6faef8207907fb:5f4c457c52738bfdfaf28c9303d292c6"
"\x00\x00"
recv buf2 87
"1_lbt4_0#131#001109AB80C9#0#0#0:1246475216:Administrator:MM-7QL3Z0JYUJN6:3"
"3:1246963533"
"\x00"
-1
遇到點問題,搜索到這里。看了博主的腳本實在忍不住要吐槽幾句。1.創建socket應該放在init里面關閉socket放在end里面,你都放在action里鬧哪樣啊。2.你想迭代設置一下就行了,干嘛要寫for循環。