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


【系统及软件配置】

  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. Scala开发Hadoop示例

    import org.apache.hadoop.conf.{Configuration, Configured}; import org.apache.hadoop.util.{ToolRunner ...

  2. Linux实战教学笔记45:NoSQL数据库之redis持久化存储(一)

    第1章 redis存储系统 1.1 redis概述 REmote DIctionary Server(Redis)是一个基于key-value键值对的持久化数据库存储系统.redis和大名鼎鼎的Mem ...

  3. css垂直居中方案

    先介绍几种常见的垂直布局方式: 已知盒子具体宽度(宽度可以为百分比)(适用于居中浮动元素) 第一种: 给父元素相对定位,给子元素绝对定位 父布局 { position: relative; } 子布局 ...

  4. 【bzoj3239】Discrete Logging

    [吐槽] 这题和[bzoj]2480一毛一样. 就是输入顺序和输出变了一下. 传送门:http://www.cnblogs.com/chty/p/6043707.html

  5. DBArtist之Oracle入门第4步: Oracle创建数据库

    刚开始进去后,我是懵逼的状态,不知道要干嘛,之前常用的是MSSQL,感觉两者还是有区别的: oracle中:1.查询数据库名:select name,dbid from v$database;或者sh ...

  6. CENTOS 配置好SVN服务环境后,其他服务器无法访问 Error: Can't connect to host '192.168.1.103': 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

    CENTOS 配置好SVN服务环境后,其他服务器无法访问   根据 下面的步骤配置好服务后,使用本机可以正常 连接到 SVN 服务, 但是使用局域网的其他服务器访问时出现下面的错误, Error: C ...

  7. 第一个Django应用程序_part2

    一.数据库配置 此文延续第一个Django应用程序_part1. 打开mystic/settings.py.这是一个普通的Python模块,其模块变量表示Django配置 默认情况下,配置使用SQLi ...

  8. eclipse 环境安装

    eclipse 安装SVN http://blog.csdn.net/rilaohn/article/details/70312827 eclipse server 不见了 http://www.jb ...

  9. Use formatter to format your JAVA code

    In order to make the codes looks unified and make it easy to understand, it's better to use the same ...

  10. html 图片拖动不出来的脚本

    function imgdragstart() { return false; } $(function(){ for (i in document.images) document.images[i ...