版权声明:本文为博主原创文章,未经博主允许不得转载。


【系统及软件配置】

  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的更多相关文章

  1. 在 .NET Core 中运行 JavaScript

    一.前言 在 .NET Framework 时,我们可以通过V8.NET等组件来运行 JavaScript,不过目前我看了好几个开源组件包括V8.NET都还不支持 .NET Core ,我们如何在 . ...

  2. Java中运行javascript代码

    Java中运行javascript代码 1.Java 代码 2.JS代码 2.1demoWithParams.js 2.2demoWithListParams.js 原文作者:russle 原文地址: ...

  3. 在 sublime 中运行 JavaScript 代码

    安装 Node 环境,参考 Node.js入门 打开 Sublime,选择 Tools > Build System > New Build System... 会打开一个新的文件,粘贴以 ...

  4. v8js-在PHP中运行javascript代码

    起因之前写自动登录操作一个网站的PHP脚本,但是发现该网站用js代码做了cookie的计算和验证,所以使用了v8js. 安装安装v8.(Mac:brew install v8)使用pecl insta ...

  5. 在Swift中使用JavaScript的方法和技巧

    本文作者Nate Cook是一位独立的Web及移动应用开发者,是继Mattt大神之后NSHipster的主要维护者,也是非常知名活跃的Swift博主,并且还是支持自动生成Swift在线文档的Swift ...

  6. kettle中使用JavaScript的一个例子

    最近在使用kettle的时候遇到一个问题,需要对输入的一个字段进行格式化,逻辑比较复杂(需要做替换掉指定的字符串,然后将数字部分不足四位的数前边补0等操作),kettle中没有提供直接的插件来支持复杂 ...

  7. C#中让WebBrowser运行Javascript脚本

    C#中可以让Webbrowser运行Javascript脚本来实现各种自动化操作,比如点击网页上的按钮,输入用户名密码等等.代码也很简单: >>>>>>>&g ...

  8. Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  9. 【已解决】在 Visual Studio 中设置 JavaScript/TypeScript 的断点 脚本出现自动中断错误

    运行ASP.NET Core 程序出现错误如下: 已启用 Visual Studio 中的 Chrome 脚本调试 在 Visual Studio 中设置 JavaScript/TypeScript ...

随机推荐

  1. Spring中Aspect的切入点的表达式定义细节

    用过很多次切面aspect了,对于表达式总是记得很模糊,今天总结一下. 1.切面做如下设置则只会拦截返回值为String类型的方法 @Aspect public class MyInterceptor ...

  2. HQL多表查询

    ------------------siwuxie095 HQL 多表查询 以客户和联系人为例(一对多) 1.内连接 (1)hql 语句写法 from Customer c inner join c. ...

  3. 解题报告Best Time to Buy and Sell Stock with Cooldown

    题目 Say you have an array for which the ith element is the price of a given stock on day i. Design an ...

  4. Python binascii

    Python binascii模块 Python binascii模块 用处 包含的函数 相关内置函数 code使用示例 转载请标明出处(http://blog.csdn.net/lis_12/art ...

  5. Linux ftp Command

    一.ftp的get命令和mget命令有何不同? get一次只下载一个文件:mget一次可以下载多个文件,而且支持通配符,需要注意的是在mget的时侯,需要对每一个文件都选择y/n,如果想不交互的下载全 ...

  6. linux下两台服务器文件实时同步方案实现-乾颐堂

    假设有如下需求: 假设两个服务器: 192.168.0.1 源服务器  有目录 /opt/test/ 192.168.0.2 目标服务器  有目录 /opt/bak/test/ 实现的目的就是保持这两 ...

  7. SpringMVC 2.5.6 +Hibernate 3.2.0

    spring MVC配置详解 现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时 ...

  8. shared_ptr / weak_ptr 代码片段

    参考<<Boost程序库完全开放指南>> shared_ptr  类摘要(只列出了常用的部分)和相关说明 template <class T> class shar ...

  9. Ubuntu14.04-LTS 从系统安装到配置可用

    1.安装Ubuntu14.04LTS-64bit 使用U盘安装很方便快捷,可以使用老毛桃使用iso模式制作一个U盘启动盘,然后分区安装. 如果使用硬盘安装的话需要注意的问题是: 如果电脑上以前有Lin ...

  10. redis 通配符 批量删除key

    Redis 中 DEL指令支持多个key作为参数进行删除 但不支持通配符,无法通过通配符批量删除key,不过我们可以借助 Linux 的管道和 xargs 指令来完成这个动作. 比如要删除所有以use ...