51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 8549|回复: 9
打印 上一主题 下一主题

[原创] QTP的随机数问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-9-22 14:50:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
QTP的RandomNumber不能随机了?运行多少次都是一样的?
其实之前有人问过我,当时搞清楚了就给忘记了;现在又有人问起,想想就把自己的结论写下来
我们目前所用的随机数其实都是伪随机
由于我们所用的电子计算机基于冯诺依曼理论的
必须是按“规律”来运作
可是随机不就是“不规律”么?
于是就有了根据随机种子产生“伪随机”的方法
随机种子是一定的不重复序列(用时间戳就是很好的)
再经过“规律”的算法处理产生“不同”的结果,就可以得到“假装”的随机数(按照“规律”去“不同”)

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

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

使用道具 举报

该用户从未签到

2#
发表于 2008-9-23 13:08:34 | 只看该作者
牛叉~!刚开始我也以为QTP自带的这个函数不可靠,还自己写了一大堆代码进行优化,看来我的担心就是多余的。。。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2008-9-23 14:28:31 | 只看该作者
解决办法就是扩大随机数的上限和下限。
例如从Randomize(1,10)到(1,100)
这样得到相同结果的机率就比较底了。
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2008-9-23 14:41:51 | 只看该作者
在使用RandomNumber之前,先Randomize 初始化一下,这样每次随机开始的数字就基本不会重复了
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 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)
'''''print  i
'''''Next
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2008-9-24 11:59:25 | 只看该作者
我也遇到过随机数的问题,解决方法是:
Randomize
{
}
RNDNUM=int(范围值*RND+1)
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2008-9-24 17:19:35 | 只看该作者

随机数问题

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

使用道具 举报

该用户从未签到

8#
发表于 2008-9-25 10:53:51 | 只看该作者
原帖由 nanice 于 2008-9-23 19:22 发表
我现在一般都用这个:
'获得随机数函数
Public Function Get_RandNum(fromNum,toNum)
If (fromNum


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

使用道具 举报

该用户从未签到

9#
发表于 2008-10-14 08:07:50 | 只看该作者
正解
原帖由 catappley 于 2008-9-24 17:19 发表
Dim MyValue  '定义一个随机数
Randomize  '初始化
MyValue = int( (10000-1000+1)*Rnd+1000)   
'10000----上限,1000----下限 Rnd 是获取随机数的函数
这样定义每次MyValue的值就会不一样拉.
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2008-10-14 11:11:26 | 只看该作者
我觉得,QTP就是多可能模拟用户操作,所以我们才使用了随机来让我们发现更多的问题。至于它要怎么随机法,或者随机出来的数是什么,好像不用多大去考究它吧。 愚见。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-27 04:20 , Processed in 0.078058 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表