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(){ |
备注:①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){ |
运行结果:
【测试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的更多相关文章
- 在 .NET Core 中运行 JavaScript
一.前言 在 .NET Framework 时,我们可以通过V8.NET等组件来运行 JavaScript,不过目前我看了好几个开源组件包括V8.NET都还不支持 .NET Core ,我们如何在 . ...
- Java中运行javascript代码
Java中运行javascript代码 1.Java 代码 2.JS代码 2.1demoWithParams.js 2.2demoWithListParams.js 原文作者:russle 原文地址: ...
- 在 sublime 中运行 JavaScript 代码
安装 Node 环境,参考 Node.js入门 打开 Sublime,选择 Tools > Build System > New Build System... 会打开一个新的文件,粘贴以 ...
- v8js-在PHP中运行javascript代码
起因之前写自动登录操作一个网站的PHP脚本,但是发现该网站用js代码做了cookie的计算和验证,所以使用了v8js. 安装安装v8.(Mac:brew install v8)使用pecl insta ...
- 在Swift中使用JavaScript的方法和技巧
本文作者Nate Cook是一位独立的Web及移动应用开发者,是继Mattt大神之后NSHipster的主要维护者,也是非常知名活跃的Swift博主,并且还是支持自动生成Swift在线文档的Swift ...
- kettle中使用JavaScript的一个例子
最近在使用kettle的时候遇到一个问题,需要对输入的一个字段进行格式化,逻辑比较复杂(需要做替换掉指定的字符串,然后将数字部分不足四位的数前边补0等操作),kettle中没有提供直接的插件来支持复杂 ...
- C#中让WebBrowser运行Javascript脚本
C#中可以让Webbrowser运行Javascript脚本来实现各种自动化操作,比如点击网页上的按钮,输入用户名密码等等.代码也很简单: >>>>>>>&g ...
- Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式
目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...
- 【已解决】在 Visual Studio 中设置 JavaScript/TypeScript 的断点 脚本出现自动中断错误
运行ASP.NET Core 程序出现错误如下: 已启用 Visual Studio 中的 Chrome 脚本调试 在 Visual Studio 中设置 JavaScript/TypeScript ...
随机推荐
- mysql存储过程(procedure)
#创建带参数的存储过程 delimiter // ),out p int) begin ; end // delimiter call pro_stu_name_pass(@n,@p); select ...
- 2017年Java学习总结
2017年Java学习 Java,是我学习的第三种计算机编程语言,刚拿到这本教材时,我被它的厚度与书中字体的密集程度吓了一跳,不过在学习过程中,有Python,C语言的学习基础上,加上老师的 ...
- file_get_contents无法请求https连接的解决方法 php开启curl
file_get_contents无法请求https连接的解决方法 方法1: PHP.ini默认配置下,用file_get_contents读取https的链接,就会如下错误: Warning: fo ...
- 通过snmp监控linux
一.linux snmpd安装 yum install -y net-snmp net-snmp-utils 二.snmp的配置(vim /etc/snmp/snmpd.conf) com2sec n ...
- Python遍历一个文件夹下有几个Excel文件及每个Excel文件有几个Sheet
一. 解决问题: 工作中常会遇到合并Excel文件的需求,Excel文件数量不确定,里面的Sheet 数量是可变的,Sheet Name是可变的,所以,需要用到遍历一个文件夹下有几个Excel文件,判 ...
- SpringBoot自定义拦截器实现
1.编写拦截器实现类,此类必须实现接口 HandlerInterceptor,然后重写里面需要的三个比较常用的方法,实现自己的业务逻辑代码 如:OneInterceptor package com ...
- hadoop分布式集群搭建前期准备(centos7)
那玩大数据,想做个大数据的从业者,必须了解在生产环境下搭建集群哇?由于hadoop是apache上的开源项目,所以版本有些混乱,听说都在用Cloudera的cdh5来弄?后续研究这个吧,就算这样搭建不 ...
- Part2_lesson4---ARM寻址方式
所谓寻址方式就是处理器根据指令中给出的信息来找到指令所需操作数的方式. 1.立即数寻址 ADD R0,R0,#0x3f; R0<-R0+0x3f 在以上指令中,第二个源操作数即为立即数,要求以“ ...
- Eclipse Failed to get the required ADT version number from SDK
之前本人的AndroidStudio和Eclipse使用的是同一个SDK,然后使用AndroidStudio的 SDK Manager对SDK进行了update,再打开Eclipse就报了“Eclip ...
- JavaWeb项目导入MyEclipse后变为JAVA项目项目【解决方法】
问题描述:之前有个项目是Java web的项目,但是后来我导入到我电脑里的myEclipse里后就变成了Java项目.查找了资料解决了,网上大部分都是说在eclipse里解决这个问题,在myEclip ...