1. 程式人生 > >LoadRunner12_腳本中運行JavaScript

LoadRunner12_腳本中運行JavaScript

password iter ted result ont time object put time()

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


【系統及軟件配置】

  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