使用 VuGen JavaScript 引擎
适用于: Web - HTTP/HTML 和 SAP - 仅限使用 C 编写的 Web Vuser 脚本。
VuGen JavaScript 引擎是什么?
通常情况下,Web Vuser 脚本中包含 C 代码。内置的 JavaScript 引擎允许您向 C 代码中插入 JavaScript 代码段。
可以在 Vuser 脚本中对 JavaScript 执行什么操作?
可以将 JavaScript 代码 插入 Web - HTTP/HTML 或 SAP-Web Vuser 脚本,处理在客户端和服务器之间发送的请求和响应消息中包含的文本字符串。在执行关联和参数化操作时,经常需要处理字符串。典型的字符串处理包括:将十进制转换为十六进制、Base64 编码和解码、URL 编码和解码,以及访问 JSON 格式数据内的对象值。
注: 通过使用内置 DFE (数据格式扩展),可以执行上述的许多字符串处理程序。有关详细信息,请参阅数据格式扩展 (DFE) 概述。
此外,在 JavaScript 中实现客户端逻辑时,向 Vuser 脚本插入 JavaScript 代码可能也很有用。通过将原始客户端 JavaScript 代码段插入 Vuser 脚本,用户无须将 JavaScript 逻辑重新写入要包含到 Vuser 脚本中的 C 代码。
可以使用 Vuser 脚本中的 JavaScript 代码来执行 XMLHTTPRequest。这将允许您使用标准 JavaScript API 来生成和发送 HTTP 或 HTTPS 请求。例如,此类 API 包括发送异步请求、分配回调以处理响应、读取 XML 格式的响应。以该方式使用的 XMLHTTPRequest 可代替对操作步骤(如 web_url 或 web_custom_request)的调用。
为什么要使用 JavaScript 代码段?
虽然可以通过使用单独的 C 代码实现所需功能,但是由于下列原因,在 Vuser 脚本中包含 JavaScript 很有益:
- 相比于 C 代码,Javascript 通常可提供更直观、更容易实现的解决方案。
- JavaScript 正则表达式库简化了正则表达式的使用过程。
- 大量 JavaScript 库可供用户使用,帮助处理字符串。
- 客户端逻辑通常是以 JavaScript 实现的。插入原始 JavaScript 代码段后,无须将 JavaScript 客户端逻辑转换为 C 代码。
是否能在所有协议的 Vuser 脚本中使用 JavaScript 引擎?
不能,JavaScript 引擎仅允许您将 JavaScript 插入 Web - HTTP/HTML 和 SAP - Web Vuser 脚本。
JavaScript 引擎的一些有用使用场景包括哪些?
在下列场景中,在 Vuser 脚本中包含 JavaScript 代码可能很有用:
在客户端和服务器之间发送的请求和响应消息中含有使用 Base64 编码方案编码的数据。因为数据已编码,所以常常很难或无法对原始数据执行参数化或关联操作。必须首先解码数据,然后才能对其进行参数化或关联,之后再将数据重新编码并发送到服务器。在 Vuser 脚本中包含 JavaScript 代码段后,您可以访问用于实现所需 Base64 解码和编码功能的外部 JavaScript 库。
注: 可以使用内置 Base64 DFE (数据格式扩展) 实现 Base64 编码和解码。有关详细信息,请参阅数据格式扩展 (DFE) 概述。
在该场景中,在客户端和服务器之间发送的请求和响应消息中含有使用 JavaScript URL 编码方案编码的 URL。在 Vuser 脚本中包含 JavaScript 代码段后,您可以访问用于执行所需的解码和编码程序的 encodeURI() 和 decodeURI() 函数。
注: 可以使用内置 URL 编码 DFE (数据格式扩展) 实现 URL 编码和解码。有关详细信息,请参阅数据格式扩展 (DFE) 概述。
在该场景中,在客户端和服务器之间发送的请求和响应消息中含有 JSON 格式的数据。要访问 JSON 格式数据内的对象,可以在 Vuser 脚本中包含 JavaScript 代码段以访问 JavaScript eval() 函数。
注: 可以使用内置 JSON-To-XML DFE (数据格式扩展) 访问 JSON 格式数据内的对象。有关详细信息,请参阅数据格式扩展 (DFE) 概述。
可以使用 Vuser 脚本中的 JavaScript 代码来执行 XMLHTTPRequest,从指定网站下载股票报价。有关如何执行 XMLHTTPRequest 的示例,请参阅JavaScript 引擎:XMLHTTPRequest 示例。
要访问某个特定网站,Vuser 必须提交用户名和加密的密码。服务器向浏览器发送一个服务器哈希,使浏览器能够生成所需的加密密码。用于生成哈希的代码很复杂,存在于 JavaScript 中。此 JavaScript 代码可包含在 Vuser 脚本中,因而用户无须将 JavaScript 逻辑重新写入 C 代码。
可以在 Vuser 脚本中使用哪些 API 函数来执行 Javascript 代码?
下面的 API 函数可用于在 Vuser 脚本中包含 JavaScript:
-
web_js_run:运行指定的 JavaScript 代码。
-
web_js_reset:清除 JavaScript 上下文。
可以使用 web_js_run 函数在 Vuser 脚本中包含 JavaScript 代码。通过使用 web_js_run 函数,可以将所需的 JavaScipt 代码插入 Vuser 脚本,也可以引用其中包含所需 JavaScript 代码的文件。
下面是关于如何直接从 Vuser 脚本包含 JavaScript 代码的示例:
web_js_run( "Code=xor((LR.getParam('buffer'), 0xFFFF));", "ResultParam=param", LAST);
下面是关于如何通过调用含有 JavaScript 代码的文件来包含 JavaScript 代码的示例:
web_js_run( "File=XMLHTTPRequest_sync_sample.js;", "ResultParam=param", LAST);
有关上述函数的详细信息以及它们的使用示例,请参阅函数参考。
是否可以使用 JavaScript 访问任何“内部”API 函数?
Vuser 脚本中的 JavaScript 允许您访问一些“内部”LoadRunner API 函数,这些函数可以直接从 JavaScript 代码中的 web_js_run 函数调用。这些函数主要用于管理参数,但是也允许您记录指定消息、录制数据以及运行 XMLHTTPRequest。
API 函数 |
描述 |
参数 |
---|---|---|
LR.advanceParam
(parameter) |
将文件中的下一个值预先赋予指定参数。
|
parameter。要为其预先赋值的参数的名称。类型必须为文件或具有唯一编号。
|
LR.setParam(name, value)
|
将字符串保存到参数中。如果参数不存在,将创建该参数。
|
name。要将该值保存到的参数的名称。
value。要保存的值。
|
LR.freeParam(name) | 在运行时删除动态参数,释放其缓冲区。 |
name。参数名。
|
LR.getParam(name)
|
返回指定参数的值。
|
name。参数名。
|
LR.log(text, level)
|
记录消息。
|
text。消息内容。
level。为下列选项之一:
示例:LR.log("text", "Error");
|
LR.userDataPoint(name, value)
|
录制由用户定义以便于分析的数据点。
|
name。数据点的名称。数据点名称不能以下列字符串开头:HTTP、NON_HTTP、RETRY、mic_、stream_、mms_
value。数值。
|
要在 Vuser 脚本中运行 JavaScript,必须为 Vuser 脚本启用 JavaScript 引擎。要启用 JavaScript 引擎,请打开“回放”>“运行时设置”>“Internet 协议”>“首选项”视图。转到 JavaScript 部分,然后选择启用运行 JavaScript 代码选项。
注: 启用此选项会导致创建 JavaScript 运行时引擎,即使脚本中没有 JavaScript 步骤也是如此。
如何配置 JavaScript 引擎?
可以使用 Vuser 脚本的运行时设置配置产品的自定义 JavaScript 引擎。
要访问 JavaScript 引擎 (JSE) 运行时设置,请选择“回放”>“运行时设置”>“Internet 协议”>“首选项”,然后展开“JavaScript”部分。
- JavaScript 引擎运行时大小:指定所分配的 JavaScript 引擎运行时内存的大小 (以 KB 为单位)。运行大量 Vuser 时,可能需要增大该值。
- 每个线程的 JavaScript 引擎堆栈大小:指定 Javascript 引擎内存中每个 Vuser 线程的大小 (以 KB 为单位)。对于大型对象或较深的堆栈调用,可能需要增大该值。
有关用户界面的详细信息,请参阅首选项视图 - Internet 协议。
VuGen 的 JavaScript 引擎与 VuGen 的 JavaScript 协议之间有什么联系?
VuGen 的 JavaScript 引擎与 VuGen 的 JavaScript 协议之间没有联系。
疑难解答
如果在实现 JavaScript 引擎支持时遇到困难,请查看以下项获取可能的解决方案。
- 确保已启用 VuGen 的 JavaScript 引擎。有关详细信息,请参阅如何启用 JavaScript 引擎?
- JavaScript 限制您在一个函数中最多添加 9,000 个操作数。例如,如果要组合字符串("str1"+"str2"+"str3"+..."str9000"),则最多只能添加 9,000 个字符串。
-
内存问题
- 如果已选择“每次迭代模拟一个新用户”>“每次迭代清除高速缓存”运行时设置,则会在每次迭代开始时自动调用 web_js_reset。
- 如果未设置每次迭代模拟一个新用户 > 每次迭代清除高速缓存,可通过在不再需要保存的上下文时在 Vuser 脚本中插入 web_js_reset 调用,避免消耗过多的内存。
有关 web_js_reset 函数的详细信息,请参阅函数参考。
有关运行时设置的详细信息,请参阅运行时设置视图中选项下面的提示。
-
性能问题
如果遇到性能问题,请修改 JavaScript 运行时设置。有关详细信息,请参阅首选项视图 - Internet 协议。