rcpp 发表于 2008-9-22 14:50:28

QTP的随机数问题

QTP的RandomNumber不能随机了?运行多少次都是一样的?
其实之前有人问过我,当时搞清楚了就给忘记了;现在又有人问起,想想就把自己的结论写下来
我们目前所用的随机数其实都是伪随机
由于我们所用的电子计算机基于冯诺依曼理论的
必须是按“规律”来运作
可是随机不就是“不规律”么?
于是就有了根据随机种子产生“伪随机”的方法
随机种子是一定的不重复序列(用时间戳就是很好的)
再经过“规律”的算法处理产生“不同”的结果,就可以得到“假装”的随机数(按照“规律”去“不同”)
为什么要说这个呢
因为QTP是运行在电子计算机上的,也自然无法突破上述限制了
所以QTP所用的随机种子就是影响产生的随机数的重要根源了
从我的试验得知:
可以肯定的结论是QTP所用的随机种子中一定包含使用的轮次和时间戳
当同一轮次使用(比如反复多次运行,但都只运行一次,也就等于都是第一次)以及时间相近(比如在1~2分钟之内)
得到的随机数可能是一样的。

所以没什么特别好的解决办法,其实也不需要解决:只要让脚本跑起来,它的随机数就是“随机”的了
开篇所说的现象,大家可以自己试验一下:
写一个脚本,就只有一个用RandomNumber的随机数相关的操作(找个地方显示一下随机数,比如msgbox)
点一下run,运行一次,记下随机数
马上再点一下run,再运行一次,记下随机数
一定可以发现,要么两次的随机数是一样的,要么就是刚好+1

nanice 发表于 2008-9-23 13:08:34

牛叉~!刚开始我也以为QTP自带的这个函数不可靠,还自己写了一大堆代码进行优化,看来我的担心就是多余的。。。

heqingbluesky 发表于 2008-9-23 14:28:31

解决办法就是扩大随机数的上限和下限。
例如从Randomize(1,10)到(1,100)
这样得到相同结果的机率就比较底了。

xiaonan 发表于 2008-9-23 14:41:51

在使用RandomNumber之前,先Randomize 初始化一下,这样每次随机开始的数字就基本不会重复了

nanice 发表于 2008-9-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)
'''''printi
'''''Next

ivanland 发表于 2008-9-24 11:59:25

我也遇到过随机数的问题,解决方法是:
Randomize
{
}
RNDNUM=int(范围值*RND+1)

catappley 发表于 2008-9-24 17:19:35

随机数问题

Dim MyValue'定义一个随机数
Randomize'初始化
MyValue = int( (10000-1000+1)*Rnd+1000)   
'10000----上限,1000----下限 Rnd 是获取随机数的函数
这样定义每次MyValue的值就会不一样拉.

heqingbluesky 发表于 2008-9-25 10:53:51

原帖由 nanice 于 2008-9-23 19:22 发表 http://bbs.51testing.com/images/common/back.gif
我现在一般都用这个:
'获得随机数函数
Public Function Get_RandNum(fromNum,toNum)
If (fromNum

如果随机数的范围比较小,例如Get_RandNum(1,6),如果运行的间隔很短(Timer),还是会产生相同的值。
关键还是要扩大随机数的取值范围。

skyphoenix 发表于 2008-10-14 08:07:50

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

假装不在 发表于 2008-10-14 11:11:26

我觉得,QTP就是多可能模拟用户操作,所以我们才使用了随机来让我们发现更多的问题。至于它要怎么随机法,或者随机出来的数是什么,好像不用多大去考究它吧。:lol 愚见。
页: [1]
查看完整版本: QTP的随机数问题