天天看點

LR11直接對資料庫通路操作方法在性能測試中的應用總結

項目背景概述

某測試項目,該項目的接口測試需要大量的訂單,并且需要訂單的狀态是已确認客戶的訂單,大量的訂單可以通過下單接口直接造訂單資料,但下的訂單要人工在背景頁面處理到已确認客戶的狀态才可以使用這些訂單資料,大量訂單人工處理到已确認客戶狀态,操作起來不太靠譜,後來從開發那了解到,訂單從開始處理到已确認客戶,主要會調用幾個sp和sql的操作便可以完成, LR11提供了對資料庫的直接通路和執行sp和sql的方法 ,可以使用 LR11通過模拟多線程的方式來批量的處理大量的訂單到已确認客戶的狀态,進而可以友善高效的制造測試資料;

LR11對資料庫的測試,主要使用到LR11提供的如下方法:

lr_db_connect();//建立同資料庫的連接配接通路;

lr_db_executeSQLStatement();//執行具體的sql操作(select,update,insert,delete)或sp存儲過程操作,

lr_db_disconnect();//斷開資料庫的連接配接;

需要注意的是LR11提供的對資料庫的這些操作方法的使用是需要在 LR的Web Services協定腳本中才可以使用的;

具體的使用後面執行個體中會展現,該項目中資料的制造準備主要是通過如下過程完成

  1. 首先通過調用下單接口完成訂單資料的制造;

測試環境擷取下單接口調用位址:

http://XXX.com/XXXX.Booking.API/SaveOrderService.asmx?wsdl

具體請求使用的封包可以讓開發人員提供具體的封包,封包比較長在此省略;

  1. 對生成的訂單通過調用相關SP和Sql語句直接批量操作完成訂單的處理到已确認客戶;

本次項目造資料的關鍵步驟為處理訂單到已确認客戶操作,主要涉及兩個SP:xxx..sp1_xxx_firstdealorder和sp2_xxx_AutoConfirmClient,兩個update操作;

具體LR11調用SP和Update操作的 腳本如下:

Action()

{  //資料庫的連接配接有如下兩種方式,目前測試環境連接配接測試庫使用的都是第一種方式//

  //////資料庫通路連接配接///// windows 認證方式的連接配接登入///

lr_db_connect("StepName=DatabaseConnection",

        "ConnectionString=Data Source=xxxdb.test.xx.com,55666;Integrated Security=SSPI;Initial Catalog=XXXOrderDB",

        "ConnectionName=XXXOrderDB",

        "ConnectionType=SQL",

                             LAST );

//////資料庫通路連接配接///// SQL server認證方式的連接配接登入參照如下//

/*  lr_db_connect("StepName=DatabaseConnection",

        "ConnectionString=Data Source=192.168.1.2;Initial Catalog=DataBase;User ID=User_temp;Password=******",   //通路資料庫的使用者名和密碼     

        "ConnectionName=ATDataBase",

        "ConnectionType=SQL",

                             LAST );

 */

///執行存儲過程///

//模拟背景中點開始處理訂單的sp操作

  lr_db_executeSQLStatement("StepName=StartDeal",

    "ConnectionName=XXXOrderDB",

    "SQLStatement=exec XXXorderdb..sp1_XXX_firstdealorder"

" @orderid='{ID}',"

"@operator='mazj',"

"@ProcessType = 'NOR',"

"@CorpConfirmType = '',"

"@CorporationID = NULL,"

"@BOS=NULL",

    "DatasetName=testDataset",

LAST );

///執行update ///

//更新RecordNo記錄号//

  lr_db_executeSQLStatement("StepName=UpdateRecord",

      "ConnectionName=XXXOrderDB",

      "SQLStatement=update XXXOrderDB.dbo.O_XXX set RecordNo='AA{Param}' where OrderID = {ID};",

      "DatasetName=testDataset",

      LAST );

//更新processstatus狀态//

  lr_db_executeSQLStatement("StepName=Updatestatus",

      "ConnectionName=XXXOrderDB",

      "SQLStatement=update XXXOrderDB.dbo.o_orders set processstatus = (processstatus | 1) where orderid={ID};",

      "DatasetName=testDataset",

      LAST );

///執行存儲過程///

//模拟前台頁面自動确認客戶的sp//

  lr_db_executeSQLStatement("StepName=orderConfirm",

    "ConnectionName=XXXOrderDB",

    "SQLStatement=sp2_XXX_AutoConfirmClient @OrderID ='{ID}', @Eid='System'",

    "DatasetName=testDataset",

    LAST );

//關閉連接配接//

  lr_db_disconnect("StepName=Disconnect",

        "ConnectionName=XXXOrderDB",

        LAST );

return 0;

}

腳本設計好後放入LR的Controller場景中即可對批量的訂單使用多線程的方式快速的把所有的訂單處理到已确認客戶的狀态,比起人工操作迅速千倍;

如果lr_db_executeSQLStatement()執行的是查詢操作并有dataset的結果傳回的話,需要在dataset使用後進行記憶體釋放,處理查詢結果集的方法:lr_db_dataset_action();方法中的Action取值為reset時表示重置指針傳回第一行,取值為remove表示釋放dataset占用的記憶體,取值print表示在回放日志中列印;

除了使用這種方式來使用LR快速制造資料外,LR11對資料庫這種操作更多的是應用在對SQL語句和SP存儲過程的性能測試驗證方面,可以通過這種方式直接測試SQL和SP存儲過程的性能。

(文中部分敏感内容的表述使用XXX代替)