LoadRunner 中的参数化、函数、事务
录制的脚本可以模拟虚拟用户;然而,仅仅录制可能不足以复制“真实的用户行为”。
录制脚本时,它会涵盖主题应用程序的单一和直接流程。然而,真实用户在注销之前可能会执行任何流程的多次迭代。单击按钮之间的延迟(思考时间)因人而异。一些真实用户可能通过 DSL 访问您的应用程序,而另一些则通过拨号访问。因此,为了获得最终用户的真实感受,我们需要增强我们的脚本,使其与真实用户完全匹配,或至少在行为上非常接近真实用户。
以上是进行“性能测试”,但 VU 脚本还有更多内容。当 SUL 进行性能测试时,您如何衡量 VUser 所花费的精确时间?您如何知道 VUser 是否已通过或在某个点失败?失败背后的原因是什么,是某个后端进程失败还是服务器资源有限?
我们需要增强我们的脚本来帮助回答上述所有问题。
使用事务
事务是衡量任何操作的服务器响应时间的机制。简而言之,“事务”的使用有助于衡量系统处理特定请求所花费的时间。它可以小到单击按钮或在文本框失去焦点时进行 AJAX 调用。
应用事务很简单。只需在向服务器发出请求之前编写一行代码,并在请求结束时关闭事务。LoadRunner 只需要一个字符串作为事务名称。
要打开交易,请使用以下代码行:
lr_start_transaction(“Transaction Name”);
要关闭交易,请使用以下代码行:
lr_end_transaction(“Transaction Name”, <status>);
这告诉 LoadRunner 此特定事务是否成功。可能的参数包括:
- LR_AUTO
- LR_PASS
- LR_失败
示例:
lr_end_transaction(“我的登录”,LR_AUTO);
lr_end_transaction(“001_Opening_Dashboard 名称”,LR_PASS);
lr_end_transaction(“Business_Workflow_Transaction 名称”,LR_FAIL);
注意事项:
- 不要忘记,您正在使用“C”,这是一种区分大小写的语言。
- 事务名称中不允许使用句点 (.) 字符,但可以使用空格和下划线。
- 如果您已很好地分支代码并添加了检查点来验证服务器的响应,则可以使用自定义错误处理,例如 LR_PASS 或 LR_FAIL。否则,您可以使用 LR_AUTO,LoadRunner 将自动处理服务器错误(HTTP 500、400 等)
- 在应用交易时,确保没有 思考时间 声明被夹在中间,否则您的交易将始终包括该期间。
- 由于 LoadRunner 要求使用常量字符串作为事务名称,因此应用事务时常见的问题是字符串不匹配。如果在打开和关闭事务时给出不同的名称,则至少会出现 2 个错误。由于您打开的事务从未关闭,因此 LoadRunner 将产生错误。此外,您尝试关闭的事务从未打开,因此导致错误。
- 你能用你的智慧回答自己上述哪个错误会首先出现吗?为了验证你的答案,为什么不犯自己的错误呢?如果你回答正确,你就走在正确的道路上。如果你回答错误,你需要集中注意力。
- 由于 LoadRunner 自动处理请求和响应的同步,因此在应用事务时您不必担心响应。
了解思考时间、集合点和注释
集合点
集合点的意思是“会合点”。它只是一行语句,告诉 LoadRunner 引入并发性。您可以将集合点插入 VUser 脚本中,以模拟服务器上繁重的用户负载。
集合点指示 VUser 在测试执行期间等待多个 VUser 到达某个点,以便他们可以同时执行任务。例如,为了模拟银行服务器上的峰值负载,您可以插入一个集合点,指示 100 个 VUser 同时将现金存入他们的账户。这可以通过集合点轻松实现。
如果集合点位置不正确,VUser 将访问应用程序的不同部分 - 即使是同一个脚本。这是因为每个 VUser 的响应时间都不同,因此很少有用户会落后。
语法:lr_rendesvous(“逻辑名称”);
最佳实践:
- 在会合点前面加上“rdv_”以提高代码的可读性;例如“rdv_Login”
- 删除任何立即思考时间语句
- 在脚本视图中应用会合点(录制后)
评论
添加注释来描述活动、一段代码或一行代码。注释有助于让将来引用代码的任何人理解代码。它们提供有关特定操作的信息,并将两个部分分开以进行区分。
您可以添加评论
- 录制时(使用工具)
- 录制后(直接写在代码中)
最佳实践:在每个脚本文件的顶部标记所有注释
通过菜单插入功能
虽然您可以直接编写简单的代码行,但您可能需要线索来回忆函数。您还可以使用 Steps Toolbox(在版本 12 之前称为“插入函数”)查找任何函数并将其直接插入到脚本中。
您可以在视图à步骤工具箱下找到步骤工具栏。
这将打开一个侧窗,查看快照:
什么是参数化?
A 参数 VUGen 中有一个容器,其中包含为不同用户替换的记录值。
在脚本执行期间(在 VUGen 或 Controller 中),来自外部源(如 .txt、XML 或数据库)的值将替换参数的先前值。
参数化在向服务器发送动态(或唯一)值时很有用,例如;希望业务流程运行 10 次迭代,但每次都选择唯一的用户名。
它还有助于刺激主题系统产生类似现实的行为。请看下面的例子:
问题示例:
业务流程仅适用于来自服务器的当前日期,因此不能作为硬编码请求传递。
有时,客户端应用程序会将唯一 ID 传递给服务器(例如 session_id)以使进程继续(即使对于单个用户)——在这种情况下,参数化会有所帮助。
通常,客户端应用程序会维护发送到服务器和从服务器收到的数据的缓存。因此,服务器不会收到真实的用户行为(如果服务器根据搜索条件运行不同的算法)。虽然 VUser 脚本将成功执行,但得出的性能统计数据将毫无意义。通过参数化使用不同的数据有助于模拟服务器端活动(程序等)并锻炼系统。
录制期间在 VUser 中硬编码的日期在过了该日期后可能不再有效。参数化日期允许通过替换硬编码日期来成功执行 VUser。此类字段或请求是参数化的合适候选对象。
点击 点击这里 如果视频无法访问
运行时设置及其对 VU 模拟的影响
运行时设置与 VUGen 脚本同样重要。通过不同的配置,您可以获得不同的测试设计。这就是为什么如果运行时设置不一致,您可能会得到不可重复的结果。让我们逐一讨论每个属性。
运行逻辑
运行逻辑定义了除 vuser_init 和 vuser_end 之外的所有操作的执行次数。
这或许更清楚地解释了为什么 LoadRunner 建议将所有登录代码保留在 vuser_init 中,并将注销部分保留在 vuser_end 中,并且两者均保留。
如果您创建了多个操作,比如登录、打开屏幕、计算租金、提交资金、检查余额和注销,那么每个 VUser 都会发生以下场景:
所有 VUser 都将登录、执行打开屏幕、计算租金、提交资金、检查余额 - 然后 - 再次打开屏幕、计算租金...等等 - 迭代 10 次 - 然后注销(一次)。
这是一个强大的设置,可以让你更像一个真正的用户。请记住,真正的用户不会每次都登录和注销——他通常会重复相同的步骤。
在退出之前,您在检查电子邮件时点击了多少次“收件箱”?
起搏
这很重要。大多数人无法理解节奏和思考时间之间的区别。唯一的区别是, “步调是指迭代之间的延迟”,而思考时间是任意两个步骤之间的延迟。
推荐设置取决于测试设计。但是,如果您希望进行激进的负载,请考虑选择“上一次迭代结束后立即执行”
历史记录
日志(一般理解)是运行 LoadRunner 时记录的所有事件。您可以启用日志来了解应用程序和服务器之间发生的事情。
LoadRunner 提供了强大的日志记录机制,该机制本身就很强大且可扩展。它允许您仅保留“标准日志”或详细的可配置扩展日志,或者完全禁用它。
标准日志信息丰富且易于理解。它包含您排除 VUser 脚本故障所需的适当知识量。
对于扩展日志,所有标准日志信息都是子集。此外,您还可以进行参数替换。这告诉 LoadRunner 组件包含所有参数(来自参数化)的完整信息,包括请求以及响应数据。
如果包含“服务器返回的数据”,则日志会很长。这将包括日志中包含的所有 HTML、标签、资源、非资源信息。此选项仅在需要进行严肃的故障排除时才有用。通常,这会使日志文件非常大,不易理解。
您现在可能已经猜到了,如果您选择“高级跟踪”,您的日志文件将非常庞大。您必须尝试一下。您会注意到 VUGen 所花费的时间也显著增加了,尽管这不会影响 VUGen 报告的事务响应时间。但是,这是非常先进的信息,如果您了解主题应用程序、应用程序与硬件之间的客户端到服务器通信以及协议级别详细信息,可能会很有用。通常,这些信息本质上是无效的,因为它需要极大的努力才能理解和排除故障。
提示:
- 无论 VUGen 在启用日志时需要多少时间,都不会对交易响应时间产生影响。HP 称这种现象为“最先进的技术”。
- 如果不需要,请禁用日志。
- 完成脚本后禁用日志。启用日志的脚本将导致控制器运行速度变慢并报告烦人的消息。
- 禁用日志将增加您可以从 LoadRunner 模拟的最大用户数量。
- 考虑使用“仅在发生错误时发送消息”——这将静音不必要的信息消息并仅报告与错误相关的消息。
思考时刻
思考时间只是两个步骤之间的延迟。
思考时间有助于复制用户行为,因为没有真正的用户可以像机器一样使用任何应用程序(VUGen)。VUGen 自动生成思考时间。您仍然可以完全控制删除、增加或波动思考时间的持续时间。
为了进一步理解,例如,用户可能会打开一个屏幕(即响应后跟请求),然后在按回车键之前提供用户名和密码。应用程序与服务器的下一次交互将发生在用户单击“登录”时。用户输入用户名和密码所花的时间在 LoadRunner 中称为思考时间。
如果您希望模拟应用程序上的激进负载,请考虑完全禁用思考时间。
但是,为了模拟真实的行为,您可以“用户随机思考时间”并根据需要设置百分比。
考虑将思考时间限制在合理的时间段内。通常,30 秒就足够了。
速度模拟
速度模拟只是指每台客户端机器的带宽容量。
由于我们通过 LoadRunner 模拟了数千个 VUser,因此 LoadRunner 在控制带宽/网络速度模拟方面做得非常简单,这令人感到惊讶。
如果您的客户以 128 Kbps 的速度访问您的应用程序,您可以从这里控制它。您将模拟“真实的行为”,这将有助于获得正确的性能统计数据。
最好的建议是设置为使用最大带宽。这将有助于忽略任何与网络相关的性能瓶颈,并首先关注应用程序中的任何潜在问题。您可以随时多次运行测试,以查看不同情况下的不同行为。
浏览器模拟
用户体验并不取决于最终用户使用的浏览器。显然,这超出了性能衡量的范围。但是,您可以选择要模拟的浏览器。
您能否回答自己,在这种配置下,选择正确的浏览器对您来说到底有多重要?
如果您的主题应用程序是 Web 应用程序,则可以使用此配置,它会为不同的浏览器返回不同的响应。例如,您可以为 IE 和 Firefox 等等
另一个重要设置是模拟浏览器缓存。如果您想衡量启用缓存时的响应时间,请选中此框。如果您正在寻找最坏的情况,这显然不是一个考虑因素。
下载非 HTML 资源将允许 LoadRunner 下载任何 CSS、JS 和其他富媒体。这应该保持选中状态。但是,如果您想从性能测试设计中消除这一点,您可以取消选中它。
代理
最好彻底消除代理 测试环境 – 这将使测试结果不可靠。但是,您可能会遇到不可避免的情况。在这种情况下,LoadRunner 确实可以通过代理设置为您提供便利。
您将(或应该)在没有代理设置的情况下工作。您可以从默认浏览器中获取它。但是,不要忘记检查哪个浏览器设置为默认浏览器以及默认浏览器的代理配置是什么。
如果您正在使用代理并且它需要身份验证(或脚本),那么您可以单击“身份验证”按钮,这将打开一个新窗口。请参阅下面的屏幕截图。
使用此屏幕提供用户名和密码以在代理服务器上进行身份验证。单击“确定”关闭屏幕。
恭喜。您已完成 VUGen 脚本的配置。不要忘记为所有 VUser 脚本进行配置。