• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    如何使用LoadRunner9.0動態訪問Oracle數據庫

    發布: 2009-9-14 09:41 | 作者: 網絡轉載 | 來源: 領測軟件測試網 | 查看: 137次 | 進入軟件測試論壇討論

    領測軟件測試網

    如何使用LoadRunner9.0動態訪問Oracle數據庫

     最近在公司搞loadrunner腳本,需要訪問數據庫取一個動態值,在網上看到的一個是通過loadrunner的parameters自動生成一個表格,但這個東西是靜態的,不會隨著腳本的運行而變化,還有就是大神kernzhang流傳的getdata.dll,但是執行sql無法獲得結果,他的個人主頁也打不開了-_-!!!無法得到源碼,根本不知道咋用。

      #include

      static LRD_INIT_INFO InitInfo={LRD_INIT_INFO_EYECAT};

      static LRD_DEFAULT_DB_VERSION DBTypeVersion[]={{LRD_DBTYPE_NONE,LRD_DBVERSION_NONE}};

      //這里的LRD_VAR_DESC數據結構聲明是很重要的,他是用來存儲sql結果數據集的結構體,第一個參數頭文件中就是這么寫的,第二個參數是最大行數,第三個參數是每一行的最大長度,如果獲得的查詢結果比定義的長,運行時就會報錯,提示列被截斷,最后一個參數是查詢結果的類型,可以再幫助中的索引輸入data types, database,列出的表格中是各種變量類型的名稱

      static LRD_VAR_DESC NUM ={LRD_VAR_DESC_EYECAT, 10, 32, LRD_DBTYPE_ORACLE, {1, 1, 0},DT_LONG_VARCHAR};

      //下面這些句柄等變量的申請都可以照著幫助中的例子寫

      static void FAR * OraEnv1;

      static void FAR * OraSvc1;

      static void FAR * OraSrv1;

      static void FAR * OraSes1;

      static void FAR * OraStm1;

      static void FAR * OraDef1;

      unsigned long rownum;

      vuser_init()

      {

      //初始化數據庫

      lrd_init(&InitInfo,DBTypeVersion);

      lrd_initialize_db(LRD_DBTYPE_ORACLE,3,0);

      lrd_env_init(LRD_DBTYPE_ORACLE,&OraEnv1,0,0);

      lrd_ora8_handle_alloc(OraEnv1,SVCCTX,&OraSvc1,0);

      lrd_ora8_handle_alloc(OraEnv1,SERVER,&OraSrv1,0);

      lrd_ora8_handle_alloc(OraEnv1,SESSION,&OraSes1,0);

      //設置數據庫名稱,我的是oracle,odbc中連接數據庫名稱就是這個

      lrd_server_attach(OraSrv1,"db_192.168.0.101",-1,0,0);

      lrd_ora8_attr_set_from_handle(OraSvc1,SERVER,OraSrv1,0,0);

      //用戶名和密碼

      lrd_ora8_attr_set(OraSes1,USERNAME,"eeim2",-1,0);

      lrd_ora8_attr_set(OraSes1,PASSWORD,"eeim2",-1,0);

      lrd_ora8_attr_set_from_handle(OraSvc1,SESSION,OraSes1,0,0);

      lrd_session_begin(OraSvc1,OraSes1,1,0,0);

      lrd_ora8_handle_alloc(OraEnv1,STMT,&OraStm1,0);

      return 0;

      }

      Action()

      {

      //這里寫上你的sql語句(我主要是需要查詢的結果,如果你是插入或修改記錄就不用往后看了)

      lrd_ora8_stmt(OraStm1,"select R_V from ce_receviablecharge where user_no = 2009070901",1,0,0);

      //執行定義的sql,并且將結果行數返回到rownum中

      lrd_ora8_exec(OraSvc1,OraStm1,0,0,&rownum,0,0,0,0,1);

      //綁定該列

      lrd_ora8_bind_col(OraStm1,&OraDef1,1,&NUM,0,0);

      //設定保存列中的某個數據到row中,第二個參數為第幾列,第三個參數為第幾行(只能保存一個值),最后一個參數就是你想要保存到的parameter名稱

      lrd_ora8_save_col(OraStm1, 1, 1, 0, "result");

      //這個遍歷剛才查詢的結果,第二個參數0表示就1行,負號表示遍歷所有結果,絕對值表示實際有多少行,第三個參數表示一次遍歷最大進行多少行(不能大于LRD_VAR_DESC中定義的第二個參數,即最大行數)

      lrd_ora8_fetch(OraStm1, -2, 2 &rownum, 0, 2, 0, 0);

      //這里我用error是為了看得醒目,不要認為是出錯了

      lr_error_message("sql result: %s", lr_eval_string("{result}"));

      return 0;

      }

      vuser_end()

      {

      lrd_session_end(OraSvc1, OraSes1, 0, 0);

      lrd_server_detach(OraSrv1, 0, 0);

      lrd_handle_free(&OraEnv1, 0);

      return 0;

      }

      最后通過lrd系列的函數解決了這個問題,現在跟大家分享一下!!!它是基于odbc訪問數據庫的原理,主要的東西除了在幫助中,還有就是看看lrd.h中的定義說明。

      到此就結束了,但是這個東西目前我只是支持取出一個結果放到parameter中,還搞不懂如和將所有數據放入parameter中,來作為自動化時多用戶使用的參數。在此拋磚引玉,希望有達人能夠解決!!!

      另外要注意的是,如果你是錄制了一個http協議的腳本,那么編譯時無法通過的,需要創建一個odbc和http協議的混合腳本寫入這些代碼,然后再創建一個http腳本進行錄制,然后將http中錄制的腳本內容拷貝過來。俺也不知道為什么,如果我先錄制腳本再插入這些代碼總是提示lrd_init()未知錯誤:

      vuser_init.c(19): Error: C interpreter run time error: vuser_init.c (19): Error -- Unresolved symbol : lrdfnc_init.

      vuser_init.c(19): Notify: CCI trace: Compiled_code(0): vuser_init()

      這個東西后來我將sql語句進行了參數化,這樣可以保證每個模擬的用戶得到不同的值(別忘了在參數中選擇Unique)。關聯也可以取得這些參數,但是我那個錄制的腳本中無法自動關聯,手動關聯只有調出所有日志,才能找到服務器發送的參數,一次20分鐘……而且長時間運行有時候會偶爾出現找不到參數信息,懷疑是由于發送消息超時的原因。

      使用數據庫會造成數據庫服務器的負荷,如果進行數據庫測試,建議使用關聯,否則可能影響服務器性能。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: oracle Oracle ORACLE 動態 訪問 數據庫


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>