LoadRunner12_腳本中運行JavaScript


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


【系統及軟件配置】

  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。


免責聲明!

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



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