代码之家  ›  专栏  ›  技术社区  ›  TheBlastOne

LR:我能让LoadRunner中的伪随机变量具有确定性吗?

  •  1
  • TheBlastOne  · 技术社区  · 15 年前

    在LoadRunner场景中有几个随机源:

    • rand ()函数
    • 随机思考时间增量(运行时设置)
    • 随机起搏时间组件(运行时设置)
    • 随机参数(作为VuGen测试的一部分)

    我使用这些功能,我可以忍受它们的伪随机性。 但是,我不能接受这样一个事实:所有包含至少一个功能的场景运行都表现出伪随机和不确定性,即对于给定的开始状态(随机种子),我希望两次运行生成完全相同的负载,包括计时(起搏和思考时间)。 所以我希望两次运行都是基于完全相同的随机序列。 这意味着,作为每次运行初始化的一部分,我希望自己为所有随机生成器种子。

    我可以用 srand ()为设置种子值 兰德 ()在init上设置特定(硬编码)种子值始终会导致 兰德 ()--用于所有虚拟用户。如果我输入Vuser ID号,我甚至会得到不同的结果 兰德 每个Vuser的()序列,但它们在每个用户的运行过程中仍然相同。

    那么在LR中的其他伪随机源呢,那些 兰德 () 我是否有机会将它们全部播种,以便获得确定性场景行为?

    我认为这会有很大帮助。

    如果没有这样的机制,就必须计划很长时间和/或非常高的流量测试场景,以便“平均”结果统计中的随机性(您同意这一点吗?)我整天都在做。

    3 回复  |  直到 15 年前
        1
  •  2
  •   James Pulley    15 年前

    已经覆盖。我从4.51开始就和LoadRunner一起工作,如果没有设置随机种子的能力,我就无法调用一个版本。通常,这在控制器中设置的场景运行时设置中。您应该能够通过打开控制器用户指南的Acrobat版本并从术语“seed”中搜索,找到关于您的LoadRunner版本的文档。

        2
  •  2
  •   John    15 年前

    对于像负载运行器这样的系统,播种随机数生成器是必需的。完美的例子-我有一个我想要测试的代码变更。我为随机数生成器种子,然后使用和不使用更改的代码运行。执行的函数序列是随机的,但两个测试将使用相同的序列。这使我能够看到代码更改的确切影响。如果看不到随机数生成器,我将不得不在非常高的负载下运行非常长的测试,以尝试平均出随机性。

    如果没有种子,第二个测试将选择完全不同的路径。在另一个迭代中,还有另一条完全不同的路径。我想要随机序列,但是可以重复的随机序列。这就是为什么所有现代语言都允许你植入一个随机数生成器。LoadRunner客户机只需要添加一个文本字段,允许您为其随机数生成器输入“种子值”。

        3
  •  0
  •   K.Sandell    15 年前

    你问题的简短答案是: .

    Random implies just what it says => "Random". 
    

    如果您使用参数的“内置”随机特性,那么您将非常棘手,因为您无法控制如何初始化内部随机种子,而且这无法以任何方式预测下一个值。

    如果您最终想要实现的是推断结果并预测负载下的服务器行为,那么您将面临一条非常崎岖的道路。

    外推结果

    Your run with 100 vusers and achieve an avg. of 50-60 hits/sec with
    response times under 3 sec.
    
    Logically 1000 vusers (10x load) would give you 500-600 hits/sec ... 
    
    But what about the response times? How do you extrapolate them? How do you know
    when the web-server(s) chokes and achieves it's knee-point? 
    

    记住,点击/秒与响应时间成正比…因此,预测每秒点击量(或每秒页数)变得非常困难和不准确

    你无法控制的事情

    即使你得到了另一次运行的“精确”副本,你仍然需要处理响应时间和网络延迟,事实上,无论情况如何(也完全超出你的控制范围),这都是不同的。

    定义负载的更“现实”的方法

    负载测试本身并不是一门精确的科学,没有负载测试可以完全模拟现实世界,但我们可以接近。我们在这里的方法是尽可能地模拟单个用户。这样,我们就可以根据用户类型设置负载期望值,“业务”人员通常都会知道这一点。

    我们还将“用户”分为不同的类型,例如电源、普通用户或新手用户——它们的区别在于它们的运行速度(以及它们使用UI的方式)。

    通过这样做,我们可以用特定的“预期用户负载”来“加载”目标应用程序,而不是页面/秒、点击/秒值或其他技术指标。

    我们还执行更长的运行来查看服务随时间的变化情况,因此在耐久性测试阶段,72小时或更长时间的测试并不少见。这还显示了服务器上是否随时间发生内存泄漏,以及后台进程在“夜间”期间如何影响服务器性能。