51Testing软件测试论坛

标题: 新手求帮忙 为什么循环执行后出错? [打印本页]

作者: mhgzs    时间: 2010-8-26 13:40
标题: 新手求帮忙 为什么循环执行后出错?
那位高手 有时间 帮帮忙啊 !!!最近看看了QTP 写了个脚本 但是出现了和奇怪的错位!!!哪位高手帮忙解决下 !!!
如果只执行一次(最外面的循环)没有错, 但是循环就报错了,,弄了好久没明白!!!求解 说明:代码中的Parameter("chkname")为QTPro.exe,parameter("rltpath")为一个自己设的路径 E:\result.xls
整个代码如下:

For circ = 0 to 1

systemutil.Run "C:\WINDOWS\system32\taskmgr.exe","","C:\WINDOWS\system32","open"

If dialog("Windows 任务管理器").Exist  Then

Dim  i ,cntc ,chknam ,roname ,mytime , mydate ,cntl

mytime = time

mydate = date

chknam =  Parameter("chkname")

cntl = dialog("Windows 任务管理器").WinListView("SysListView32").GetROProperty("items count")

cntc = dialog("Windows 任务管理器").WinListView("SysListView32").ColumnCount

With dialog("Windows 任务管理器").WinListView("SysListView32")

For i = 0 To cntl - 1

dialog("Windows 任务管理器").WinListView("SysListView32").Select i

roname = dialog("Windows 任务管理器").WinListView("SysListView32").GetSelection

If chknam  =  roname Then

Dim  fso  ,f

Dim resultnames ,resultvelues ,iname() ,ivelue()

Set fso = CreateObject("scripting.filesystemobject")

Set f = fso.OpenTextFile(parameter("rltpath"),8,true,-2)

ReDim iname(cntc) ,ivelue(cntc)

f.Write vbcrlf & mydate & vbtab

f.Write mytime & vbcrlf

For j = 0 to cntc - 2

iname(j) = .GetColumnHeader(j)

f.Write iname(j)&vbtab

next

iname(cntc-1) = .GetColumnHeader(cntc-1)

f.Write iname(j) & vbcrlf

For j =0 to cntc-1

iname = .GetColumnHeader(j)

ivelue(j) = .GetSubItem(i,iname(j))

f.Write ivelue(j) & vbtab

Next

For j = 0 to cntc -1

If    iname(j) = "内存使用" or   iname(j) = "内存使用" or  iname(j) ="高峰内存使用" or  iname(j) ="虚拟内存大小" or  iname(j) ="页面缓冲池" or  iname(j) ="非页面缓冲池" or  iname(j) ="内存增量" Then

ivelue(j) = left (cstr ( ivelue(j)), len( ivelue(j))-1)

resultNames =resultNames +iname(j) +" (k) *"

resultVelues =resultVelues+ ivelue(j)+ "*"

elseif  iname(j) = "页面错误" or  iname(j) ="页面错误增量"or  iname(j) ="句柄数" or  iname(j) ="线程数" or  iname(j) ="USER 对象" or  iname(j) ="GDI 对象" or  iname(j) = "I/O 读取" or  iname(j) ="I/O 写入"or  iname(j) ="I/O 其它" or  iname(j) ="I/O 读取字节"or  iname(j) = "I/O 字节" or  iname(j) = "I/O 写入字节" or  iname(j) ="”I/O 其他字节"  then

resultNames =resultNames +iname(j) +"*"

resultVelues =resultVelues+ ivelue(j)+ "*"

Parameter("resultNames") = resultNames

Parameter("resultVelues") = resultVelues

End If

Next

Exit for

End If
next

End With

Set fso = nothing

Set f = nothing

If  chkname <> roname Then

reporter.ReportEvent micWarning, "warming","应用程序不存在"

End If

dialog("Windows 任务管理器").Close

End If

wait (2)

Next










提示信息见附件

[ 本帖最后由 mhgzs 于 2010-8-26 13:44 编辑 ]
作者: mhgzs    时间: 2010-8-26 13:51
标题: 自己先顶一个!!
帮忙 不胜感激啊!!
作者: wugecat    时间: 2010-8-26 14:01
最后一个wait时间长点试试 比如wait 10
作者: skyzhu    时间: 2010-8-26 14:22
试了一下,没出截图中的错误
下面这句,iname之前是数组,直接赋值出错
iname = .GetColumnHeader(j)

后面也发现该错误。。。的确比较妖怪,2个变量值相同,类型相同,但还是报错

不过像这样的扫描纪录用QTP做界面式的本来就不太合适,内存之类的数据都应该能通过系统直接拿到的

[ 本帖最后由 skyzhu 于 2010-8-26 14:52 编辑 ]
作者: TIB    时间: 2010-8-26 21:27
非report-style的listview不能用GetColumnHeader

建议通过WMI、dotNetFactory等方式取进程资源
作者: mhgzs    时间: 2010-8-27 14:54
原帖由 skyzhu 于 2010-8-26 14:22 发表
试了一下,没出截图中的错误
下面这句,iname之前是数组,直接赋值出错
iname = .GetColumnHeader(j)

后面也发现该错误。。。的确比较妖怪,2个变量值相同,类型相同,但还是报错

不过像这样的扫描纪录用QT ...

求教:怎么从系统 获得 内存之类的数据呢?可不可以写个具体点的方法 谢谢
作者: mhgzs    时间: 2010-8-27 14:55
标题: 回复 5# 的帖子
WMI、dotNetFactory 这些都不懂 呵呵!!

可以帮忙整一下么?给个类子 谢谢
作者: 474241558    时间: 2010-8-27 15:53
标题: 回复 1# 的帖子
vbs脚本里面一定有关于系统资源方面的对象。在qtp中使用那样的对象。我的思路。
作者: wugecat    时间: 2010-8-27 17:23
标题: 回复 8# 的帖子
::yiwusuoyou::: 你说的太对了
作者: blizzardlyk    时间: 2010-8-27 20:47
可以通过访问WMI,获得所有进程信息,具体详见:
http://blog.csdn.net/blizzardlyk/archive/2010/08/24/5834980.aspx
作者: sterson    时间: 2010-8-28 15:41
试一下:
1,将chknam与roname弹出来看一下
msgbox chknam
msgbox roname
2,试一下类型转换
If cstr(chknam)  =  cstr(roname) Then




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2