LoadRunner中winsocket協議學習


首先讓我們先看一下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協議,但這也是一個較為多用的協議,也是必須要學習掌握的。

  此次例子采用本地及時通訊軟件飛秋來做學習。

  通過我下面錄制的腳本來說明:

/*********************************************************************
* Created by Mercury InteractiveWindowsSockets Recorder
*
* Created on: Tue Jul 07 10:44:31
*********************************************************************/

#include "lrs.h"


Action()
{
    int i;
    char *ActualBuffer;//定義字符指針
    int NumberOfBytes;//定義int型變量保存長度

    //這是第一步initializes a socket
    lrs_create_socket("socket1", "UDP", "LocalHost=2425", LrsLastArg);
//我這里是讓腳本連續運行多次
    for(i=0;i<8;i++)
    {
        lr_start_transaction("send");
  
        lr_think_time(7);
       //這里是第二步,通過建立的socket1將buf1中的數據發送給遠端MM-7QL3Z0JYUJN6用戶,端口2425
        lrs_send("socket1", "buf1", "TargetSocket=MM-7QL3Z0JYUJN6:2425", LrsLastArg);
      
        //取得緩沖區數據
        lrs_get_buffer_by_name("buf1", &ActualBuffer, &NumberOfBytes);
        //輸出緩沖區數據大小
        lr_output_message("The buffer's size is: %d/n", NumberOfBytes);
       //從buf2中接收返回的數據
        lrs_receive("socket1", "buf2", LrsLastArg);

        //取得緩沖區數據
        lrs_get_buffer_by_name("buf2", &ActualBuffer, &NumberOfBytes);
        //輸出緩沖區數據大小
        lr_output_message("The buffer's size is: %d/n", NumberOfBytes);

        lr_end_transaction("send", LR_AUTO);

    }
    //第三步關閉釋放socket連接
    lrs_close_socket("socket1");

    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循環。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM