2010-07-06 57 views
1

有在LoadRunner方案一对夫妇的来源随机:LR:我可以使LoadRunner确定性中的伪随机?

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

我使用这些功能,我可以和他们的伪随机性一起生活。然而,我不能忍受这样一个事实,即所有包含至少其中一种功能的场景运行是伪随机和不确定的,即对于给定的开始状态(随机种子),我希望两次运行产生完全相同的负载,包括时间(步调和思考时间)。 所以我想要两次运行基于完全相同的随机序列。 这意味着我想自己种下所有的随机生成器,作为每次运行初始化的一部分。

我可以使用srand()为rand()设置种子值。在初始化时设置特定的(硬编码的)种子值通常会导致所有虚拟用户通过rand()发送相同的序列。如果我使用VUser标识号进行播种,我甚至会为每个vuser获得不同的rand()序列,而对于每个用户来说,它们仍然是相同的。

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

我认为这将有很大的帮助。为了“平均”出结果统计中的随机性(你是否同意这一点?),我不得不计划很长时间和/或非常高流量的测试场景。整天做。

回答

2

已经涵盖。自4.51以来,我一直在使用LoadRunner,但我无法回想一个没有设置随机种子的版本。通常这是在控制器中设置的场景运行时间设置中。您应该能够找到适用于您的LoadRunner版本的文档,方法是打开Acrobat版本的控制器用户指南并搜索“种子”一词。

+0

哇,真酷。因为这是真的。我怎么能忽略这个。这是它应该是的地方,但我不知道它。下次,我会验证这是否真的有效,但我认为那正是我期待的指针。谢谢。 – TheBlastOne 2010-12-07 07:02:57

0

您的问题的简短回答是:

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? 

记住,命中/ sec是成正比的响应时间...因此预测命中/秒(或页/秒)变得非常困难和不准确

事情你无法控制

即使你达到另一个运行的“精确”的副本,你仍然必须处理与响应时间和网络延迟一样,无论情况如何(并且完全不受您的控制),效果总是不同。

更“现实”的方式本身定义负载

负载测试是不是一门精确的科学,空载测试都不能模拟真实世界完全,但我们可以亲近。我们这样做的方式是我们尽可能地模拟个人用户。通过这种方式,我们可以根据用户类型设置负载预期,这是“业务”人员通常所了解的情况。

我们还划分了“用户”分为不同的类型,如电源,正常或新手用户 - 这些差别是它们运行的​​速度(和他们使用的UI的方式)。

通过这样做,我们可以通过“负荷”目标具有一定的“预期的用户负载”,而不是页/秒或点击次数/秒值或其他技术应用米。

我们还执行长奔跑看到服务的行为随着时间的推移,这样一个72小时以上的测试是不寻常的耐力测试阶段。这也说明,如果有一段时间的服务器上,以及如何后台进程在“夜间”

+0

我看,并同意在“72小时以上的测试是不寻常的耐久性试验阶段”的声明,这就是我来自哪里。 然而,我强烈反对“随机意味着它说什么=>'随机'”,因为我们正在谈论伪随机生成器,它们是100%确定性的,因此如果你能够控制种子值就可以重现 - - 如果你不这样做,仍然是伪随机的。 因此,如果我*有*可以访问所有的种子,我不明白为什么我不应该通过产生完全相同的负载 - 取决于测试目标而使某个负载测试运行更加可重复。 – TheBlastOne 2010-07-07 16:55:09

+0

当前的情况是,随机选择的测试用例会导致非常非常不同的数据集(复杂性方面)需要处理,而且我没有一种便宜或可靠的方法来对我的测试用例数据集进行分类,以便只选择复杂的,或者只选择便宜的测试用例。因此,随机选择任何东西(而不是控制* all *种子)迫使我执行非常非常长的负载测试运行,因此测试用例之间的巨大差异“平均”和运行返回有用的结果。 – TheBlastOne 2010-07-07 16:59:56

+0

“通过这种方式,我们可以根据用户类型设置负载预期,这是”业务“人员通常所知道的。” - 是的,*通常*;) – TheBlastOne 2010-07-07 17:02:10

2

播种随机数生成器是必要像负载亚军的系统影响服务器性能的任何内存泄漏。完美的例子 - 我想要测试一个代码更改。我种下随机数发生器,然后在不更改代码的情况下运行。执行的功能序列将是随机的,但两种测试都将使用相同的序列。这使我能够看到我的代码更改的确切影响。如果没有能力看到随机数发生器,我将不得不在非常高的负载下运行非常长的测试来尝试平均随机性。

没有种子,第二个测试会选择一个完全不同的道路。而在另一次迭代中,又一次完全不同的道路。我想要RANDOM序列,但是可重复的RANDOM序列。这就是为什么所有现代语言都允许你种下随机数字生成器的原因。 Load Runner客户端只需添加一个文本字段,该字段允许您为其随机数生成器输入“种子值”。

+0

我完全同意。那么如何给VUgen提供VUGen脚本的随机生成器?特别是基于随机的参数?问题不是“如果”,而是“如何”。 – TheBlastOne 2010-11-09 14:32:56

+0

我现在很难接受K.Sandell的“否”答案和John的“YES。IMPERATIVE”答案。两者都是正确的 - 没有,因为它不能完成,是的,因为它需要得到稳定的,可比较的结果,而不会产生很长时间的负荷(所以随机“平均”)。 – TheBlastOne 2010-11-12 12:13:07

+1

我必须补充一点,即使你实现了一个精确的RND序列,控制器/ LoadGen上还有其他不同的东西,使得运行不同。 lr_think_time()使用(如果设置)随机X%到Y%,并且这个随机时间是你无法控制的,并且就我所知不可能的种子而言。 – 2010-11-23 08:29:31