LoadRunner12_指令碼中運行JavaScript

來源:互聯網
上載者:User

標籤:rom   pass   reference   數值   jdk   著作權   function   padding   傳遞   

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

【系統及軟體配置】

  LR版本:12.53

  JDK版本:1.8

  函數:web_js_run,該函數僅在LR12版本提供支援,LR11不支援JavaScript的運行。

  LR配置:開啟了允許JavaScript運行:Replay→RunTime Settings→Preferences→Javascript→勾選“Enabe running JavaScript code”

【測試1】-----執行JavaScript內建對象。

web_js_run(
        "Code=alert(‘Hello world‘);",
        LAST);

  備忘: 該函數"Code="的等號前後不能有空格,否則該函數會報錯:argument (number 1) is unrecognized or misplaced [MsgId: MERR-26396]

  運行結果:

 

【測試2】-----執行JavaScript內建對象的方法,並擷取傳回值。

web_js_run(
        "Code=new Date().getTime();",
        "ResultParam=timestamp",
        LAST);
 lr_output_message(lr_eval_string("{timestamp}"));

  運行結果:

 

【測試3】-----執行外部js檔案中的無參函數,並擷取傳回值。

web_js_run(
        "Code=getString()",
        "ResultParam=string1",
        SOURCES,
        "File=000.js", 
        ENDITEM,
        LAST);
 lr_output_message(lr_eval_string("{string1}"));
000.js內容如下:

function getString(){
    var date = "This is LoadRunner12";
    return date;
}

   備忘:①File參數中的js檔案放在工作目錄下即可使用相對路徑;②電腦-組織-檔案夾和搜尋選項-取消“隱藏已知檔案的副檔名”,否則可能會出現找不到檔案的錯誤,測試使用的檔案屬性如下;

  運行結果:

 

【測試4】執行外部js檔案中的有參函數且參數固定,並擷取傳回值。

web_js_run(
        "Code=getSum(1,2)",
        "ResultParam=sum",
        SOURCES,
        "File=000.js",   
        ENDITEM,
        LAST);
 lr_output_message(lr_eval_string("{sum}"));
000.js檔案的內容如下:

function getSum(arg1,arg2){
    var date = arg1*1 + arg2*1;   
    return date;
}
//若直接使用arg1+arg2,則Javscript會執行字串的相加;

  運行結果:

 

【測試5】執行外部js檔案中的有參函數且參數需要動態關聯,並擷取傳回值。

web_js_run(
        "Code=getSum(LR.getParam(‘Param‘),LR.getParam(‘Param‘))",
        "ResultParam=sum2",
        SOURCES,
        "File=000.js",   
        ENDITEM,
        LAST);
 lr_output_message(lr_eval_string("{sum2}"));

   備忘:①使用LR.getParam()函數,作用是將LoadRunner的參數值提取出來,用為web_js_run函數運行時Code中的函數參數,傳遞給本地js檔案,類似於LoadRunner的lr_eval_string();

  運行結果:

 

  參數格式嘗試及結果:

"Code=getSum({Param},{Param})", Error from JS Engine: ":0:SyntaxError: invalid object initializer
" [MsgId: MERR-26000]
"Code=getSum(\"{Param}\",\"{Param}\")", Action.c(35): web_js_run started [MsgId: MMSG-26355]
Action.c(35): web_js_run was successful [MsgId: MMSG-26392]
Action.c(42): NaN

 【測試6】執行多個js函數,且函數的參數需要動態關聯,並需要擷取傳回值。

web_js_run(
        "Code=" 
        "let rsaKey = new RSAKey();" 
        "rsaKey.setPublic(b64tohex(LR.getParam(‘exponent‘)),b64tohex(LR.getParam(‘modulus‘)));" 
        "hex2b64(rsaKey.encrypt(LR.getParam(‘password‘)));", //
        "ResultParam=NewPassword",
        SOURCES,
        "File=sec.min.js",   
        ENDITEM,
        LAST);
 lr_output_message(lr_eval_string("{NewPassword}"));

   備忘:Code參數中連續執行了3條Javascript語句;

  目前上面的語句還留有問題,雖指令碼未報錯,但NewPassword值為空白;

【測試7】函數一次定義多次使用

web_js_run(
        "Code=myFunc(1, 2);",
        "ResultParam=sum4",
         SOURCES,
         "Code=var myFunc=function(x,y) { return x*1+y*1; }",
         ENDITEM,
         LAST);
 lr_output_message(lr_eval_string("{sum4}"));
 
 web_js_run("Code=myFunc(3, 4);",
 "ResultParam=sum5",
 LAST);
 lr_output_message(lr_eval_string("{sum5}"));

   運行結果:

 

  在這個例子中,myFunc()一次定義,多次使用,那麼我們就會問該函數的生命週期是什麼呢?多次迭代會產生多個該函數嗎?如果是,那麼重複定義造成的資源浪費怎麼處理呢?其實:LoadRunner在設計時已經考慮了這些,為此有一個函數web_js_reset,如下。

【擴充:web_js_reset】

  作用:①清理web_js_run執行後,產生的“變數、函數”等內容,釋放其所在記憶體,否則之前定義過的函數和儲存的變數會一直存在,會消耗本地資源的記憶體;

  備忘:如果在“Replay→RunTime Settings→Browser→Browser Emulation”中勾選了“simulate a new user on each iteration”,在開始新一次的迭代時,LoadRunner會自動執行web_js_reset。

LoadRunner12_指令碼中運行JavaScript

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.