51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3347|回复: 7
打印 上一主题 下一主题

[原创] 如何改变系统时间?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-6-14 22:27:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,比如我的网页中有个功能必须在未来的某个时间里才会发生,所以我测试的时候需要改变系统的时间在这个时间之后去

QTP怎么实现啊?还是需要用VBScripts调用系统组件来实现?

具体怎么实现呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-6-15 09:40:42 | 只看该作者
修改系统时间很容易
点击右下的时间,修改就可以了
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2007-6-15 13:49:01 | 只看该作者
希望这段代码对你有用
编程中常常会与时间打交道,VB编程自然也不例外。以下就谈谈我在这方面的一点经验。
   VB中提供了很多变量类型,DATE型就是专门用了存储时间的。
   1、DATE型变量及其相关函数。
   在内部,一个Date占8个字节的内存,你可以方便地用它来存储日期和时间。给Date变量赋值是很容易的。但请保证输入顺序与系统默认的时间表示顺序相同。例如:
   Dim d As Date
   d = #5/23/99 11:45:34 AM#
   DateSerial函数可以把年、月、日的数字组合成一个Date值。TimeSerial函数可把小时、分、秒的数字组合成一个Date值。且两函数可以叠加。
   d = DateSerial(1999, 5, 23) + TimeSerial(11, 45, 34)
   而DateValue 和TimeValue 函数则可将代表日期和时间的字符串转化为Date型,并且也可以叠加。
   d = DateValue(“1999/ 5/ 23”) + TimeValue(“11: 45: 34”)
   Format函数可按预定的格式显示或打印一个Date变量。如:
   Print Format(d, “general date”) `99-5-23 11:45:34
   Print Format(d, “long date”) `1999年5月23日
   Print Format(d, “medium date”) `99-05-23
   Print Format(d, “short date”) `99-5-23
   Print Format(d, “long time”) `11:45:34
   Print Format(d, “medium time”) `11:45 AM
   Print Format(d,“short time”) `11:45
   Format函数也允许你自己规定显示格式。如:
   Print Format(d, “mmmm”) `may 产生日期中月份的英文
   以以上日期为例,如想显示其中的一部分信息可使用以下函数:
   Print Month(d) `5
   Print Day(d) `23
   Print Year(d) `1999
   Print Hour(d) `11
   Print Minute(d) `45
   Print Second(d) `34
   Print WeekDay(d)`1
   Weekday 提供了一组内部常量,vbSunday代表1,直到 vbSaturday代表7。
   Now 函数可返回今天的日期及时间。如:
   Private Sub Form_Click()
   Dim d As Date
   d = Now
   Print d
   End Sub
   灵活地应用以上的函数,可以大大地简化你的程序。例如想计算10000秒等于几小时几分几秒可写为:
   Private Sub Form_Click()
   Dim d As Date
   d = TimeSerial(0, 0, 10000)
   Print d
   End Sub
   结果为2:46:40。
   2、与时间相关的常用控件。
   Timer控件是一个奇特的控件。Timer 控件会在固定时间间隔中运行Timer事件。此间隔是由Interval属性决定的,其单位为千分之一秒。但不要以为将其值设为0事件就可不间断地运行了。结果恰恰相反,事件将一次也不运行。同时还要注意变量的声明。如:
   Private Sub Timer1_Timer()
   Dim a As Integer
   a = a + 1
   Print a
   End Sub

   Dim a As Integer
   Private Sub Timer1_Timer()
   a = a + 1
   Print a
   End Sub
   试试看,其结果是完全不同的。
   当需要用户输入时间时,为避免出现错误的时间,可以使用日历控件。它只允许用户在日历表中选择日期,避免了错误的发生。
   3、记录时间的API函数。
   GetTickCount Windows API函数可返回 Windows 启动以来消失的毫秒数。其精度高于VB的Timer 函数。且Timer 函数会在午夜清零,而GetTickCount 函数只有当机器连续使用49.7天后才返回零。这为我们编程提供了很大的方便。例如想知道你的电脑连续工作多久了,可新建一工程,然后添加以下代码:
   Private Declare Function GetTickCount Lib “kernel32" () As Long
   Private Sub Form_Load()
   Dim d As Date
   Dim t As Integer
   Form1.Show
   t = GetTickCount \ 1000
   d = TimeSerial(0, 0, t)
   Print d
   End Sub
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2007-6-18 23:24:32 | 只看该作者
感谢LS的热心回答,你说的方法是取得时间的,没法改变时间啊

而且通过直接录制的方法没法达到把当前时间改到未来10秒或20秒之后,进行了某个操作之后,再把时间改回去。
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2007-6-19 11:34:20 | 只看该作者
QTP和VBScript仅仅提供了获取系统时间的方法,没有提供改变系统时间的方法。可能是因为系统时间是重要资源,不宜轻易改动吧。
要从脚本里面改变时间,只能调用一些系统的资源和方法。下面的例子是将当前时间增加1小时,中间的注释部分是其他可以使用的时间变量:

  1. Set WmiService = GetObject("WinMgmts:{(Systemtime)}\\.\root\cimv2")
  2. Set DateTime = CreateObject("WbemScripting.SWbemDateTime")
  3. Set ObjectsList = WmiService.InstancesOf("Win32_OperatingSystem")
  4. For Each ObjService in ObjectsList
  5.         DateTime.Value = ObjService.LocalDateTime

  6.         'Aquire currenct time: Hours, Minutes, Seconds, Day, Month, Year
  7.         MsgBox DateTime.Hours       
  8.         'MsgBox DateTime.Minutes
  9.         'MsgBox DateTime.Seconds       
  10.         'MsgBox DateTime.Day
  11.         'MsgBox DateTime.Month
  12.         'MsgBox DateTime.Year
  13.        
  14.         'Add 1 hour to the current time and update the local time
  15.         DateTime.Hours = DateTime.Hours + 1
  16.         NewDate = DateTime.Value
  17.         If Not (ObjService.SetDateTime(newDate) = 0) Then
  18.                  MsgBox "System time was not set"
  19.         End If
  20. Next
复制代码


改变了系统时间以后,接下来的问题是如何恢复到原有时间。可以利用重新启动Windows Time服务来实现,前提是运行测试脚本的当前帐号有权限运行Net命令:

  1. Set WshShell = CreateObject("WScript.Shell")
  2. WshShell.Run "net stop" & Chr(34) & "Windows Time" & Chr(34)
  3. Wait(5)
  4. WshShell.Run "net start" & Chr(34) & "Windows Time" & Chr(34)
复制代码

可能是Windows Time服务更新系统时间的速度较慢,在实验的时候我等了很久系统时间也没有恢复。
可能用手工恢复系统时间,或者再次使用前面的代码恢复时间效果更好一些。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2007-6-28 22:30:33 | 只看该作者
已经解决了,我直接用CMD就可以了,CMD下有个TIME命令,可以设置当前时间
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2007-6-29 09:10:28 | 只看该作者
QTP中有CMD?
我怎么没找到?
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    8#
    发表于 2007-6-29 09:17:57 | 只看该作者
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-9 09:51 , Processed in 0.077742 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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