斐力庇第斯从马拉松回雅典报信,虽然已是满身血迹,筋疲力尽,但他知道:没有出现在雅典人民面前,前面的路程都是白费。 最艰苦、最关键的时刻,把好最后一道关。

QTP的随机数问题

上一篇 / 下一篇  2008-09-22 14:50:28 / 个人分类:QTP

查看( 2943 ) / 评论( 9 )

QTPRandomNumber不能随机了?运行多少次都是一样的?

其实之前有人问过我,当时搞清楚了就给忘记了;现在又有人问起,想想就把自己的结论写下来

我们目前所用的随机数其实都是伪随机
由于我们所用的电子计算机基于冯诺依曼理论的
必须是按“规律”来运作
可是随机不就是“不规律”么?
于是就有了根据随机种子产生“伪随机”的方法
随机种子是一定的不重复序列(用时间戳就是很好的)
再经过“规律”的算法处理产生“不同”的结果,就可以得到“假装”的随机数(按照“规律”去“不同”)

为什么要说这个呢
因为QTP是运行在电子计算机上的,也自然无法突破上述限制了
所以QTP所用的随机种子就是影响产生的随机数的重要根源了
从我的试验得知:
可以肯定的结论是QTP所用的随机种子中一定包含使用的轮次和时间戳
当同一轮次使用(比如反复多次运行,但都只运行一次,也就等于都是第一次)以及时间相近(比如在1~2分钟之内)
得到的随机数可能是一样的。

所以没什么特别好的解决办法,其实也不需要解决:只要让脚本跑起来,它的随机数就是“随机”的了

开篇所说的现象,大家可以自己试验一下:

写一个脚本,就只有一个用RandomNumber的随机数相关的操作(找个地方显示一下随机数,比如msgbox)

点一下run,运行一次,记下随机数

马上再点一下run,再运行一次,记下随机数

一定可以发现,要么两次的随机数是一样的,要么就是刚好+1


TAG: QTP 随机数 RandomNumber

nanice发布于2008-09-23 13:08:34
牛叉~!刚开始我也以为QTP自带的这个函数不可靠,还自己写了一大堆代码进行优化,看来我的担心就是多余的。。。
heqingbluesky发布于2008-09-23 14:28:31
解决办法就是扩大随机数的上限和下限。
例如从Randomize(1,10)到(1,100)
这样得到相同结果的机率就比较底了。
xiaonan的个人空间 xiaonan 发布于2008-09-23 14:41:51
在使用RandomNumber之前,先Randomize 初始化一下,这样每次随机开始的数字就基本不会重复了
nanice发布于2008-09-23 19:22:36
我现在一般都用这个:
'获得随机数函数
Public Function Get_RandNum(fromNum,toNum)
If (fromNum<0) Or (toNum<0) Then
  MsgBox "只接受大于零的输入"
ElseIf fromNum>toNum then
  MsgBox "起始值必须小于结束值"
Else
  Dim RunTime
  Dim MyValue
  Randomize(Timer)  
  MyValue =(int(rnd*(toNum - fromNum + 1)))+fromNum
         Get_RandNum=MyValue
   End If
End Function
'''''For m=0 to 9    这个函数是QTP自带的随机数字的产生
'''''i=RandomNumber(0,9)
'''''print  i
'''''Next
ivanland的个人空间 ivanland 发布于2008-09-24 11:59:25
我也遇到过随机数的问题,解决方法是:
Randomize
{
}
RNDNUM=int(范围值*RND+1)
catappley发布于2008-09-24 17:19:35
随机数问题
Dim MyValue  '定义一个随机数
Randomize  '初始化
MyValue = int( (10000-1000+1)*Rnd+1000)   
'10000----上限,1000----下限 Rnd 是获取随机数的函数
这样定义每次MyValue的值就会不一样拉.
heqingbluesky发布于2008-09-25 10:53:51

QUOTE:

原帖由 nanice 于 2008-9-23 19:22 发表
我现在一般都用这个:
'获得随机数函数
Public Function Get_RandNum(fromNum,toNum)
If (fromNum
如果随机数的范围比较小,例如Get_RandNum(1,6),如果运行的间隔很短(Timer),还是会产生相同的值。
关键还是要扩大随机数的取值范围。
skyphoenix发布于2008-10-14 08:07:50
正解

QUOTE:

原帖由 catappley 于 2008-9-24 17:19 发表
Dim MyValue  '定义一个随机数
Randomize  '初始化
MyValue = int( (10000-1000+1)*Rnd+1000)   
'10000----上限,1000----下限 Rnd 是获取随机数的函数
这样定义每次MyValue的值就会不一样拉.

假装不在 假装不在 发布于2008-10-14 11:11:26
我觉得,QTP就是多可能模拟用户操作,所以我们才使用了随机来让我们发现更多的问题。至于它要怎么随机法,或者随机出来的数是什么,好像不用多大去考究它吧。 愚见。
我来说两句

(可选)

我的栏目

日历

« 2024-03-25  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 14721
  • 日志数: 8
  • 建立时间: 2008-01-25
  • 更新时间: 2008-09-22

RSS订阅

Open Toolbar