1.runaction
后面能不能接变量(动态调用action,所以从数据库取数据做action名字了,但是调用总是找不到)?
A:脚本中原有RunAction "testbase [case1]", oneIteration把引号中的内容放到Global表中的第22行,然后将代码修改为:datatable.getsheet("Global")
datatable.setcurrentrow(22)
strLogin=DataTable("ActionName","Global")
RunAction strLogin, oneIteration help中也有相关帮助如:Syntax
RunAction ActionName, [IterationMode , IterationRange
, Parameters] ActionName : String : The name of the action
2.QTP8.2 中调用VB函数的问题(用VBscrīpt写了一些测试脚本需要的几个通用函数,有没有办法可以用类似include的方式进行调用,而不需要每次都把这些函数Copy到新的脚本中)?
A:程序开头加上ExecuteFile "……\……\……\project\DeVariable.vbs"
3.QTP 如何做回归测试(300多个TestCase,TD是否可以管理) ?
A:TD可以实现,可以生成测试集,一个测试集可以包含若干个测试脚本QTP8.2本身提供一个工具Test Batch
Runner但是运行完没有报告。
MI有另一个工具叫MTM(multitestmanager)
5.在QTP中如何设置使用别的浏览器(XP系统,用IE访问程序时,每次总提示屏蔽安装ActiveX插件,需要手动安装。但把这个过程录制到QTP后,回放一次是成功的。当我给某个输入框参数化了好多数据后,回放过程中,某些就会失败。
可能有两个方面可以解决这问题1、每个动作设置延迟时间 2、设置为用别的浏览器。)
(失败的提示信息是 object not visible)
A:1.延迟可用WAIT X(X单位是秒)
2.可以安装插件添加新的浏览器SystemUtil.Run "file“ "params"
"dir" "op'' "mode" QTP运行可执行文件的方法及其参数ps:
建议是用IE浏览器,或者IE内核浏览器做测试6.checkpoint 检查网页,是否能实现只要网页出现乱码就返回错误报告?
A:Text not displayed能解决问题关于 Text Checkpoint 的总结。
1)Text Checkpoint 的检查部分分为三个部分。Checked Text 、Text Before
、Text After.在默认的情况下,Checked Text执行的是精确检查,其余两个部分执行的是模糊检查。Text
Before(After)检查的内容可以比实际的内容少。但是不能有和是实际内容不相符的地方,否则就失败。
2) Exact match选项。如果选择了这个选项,三部分完全都进行精确检查。个人觉得和只检查checked
Text部分没有区别。
3) Text not displayed.这个选项本质上就是一个结果取反的过程。就是把检查的结果给反过来,把pass变成Fail,Fail变成pass.我觉得这样就很容易理解。
7.WSH 的应用方法A:WSH 实际上是一个脚本语言的运行环境,它之所以具备强大的功能,是在于其充分挖掘了脚本语言的潜力。因此,如果抛开脚本语言而空谈
WSH ,那实际上就没有了意义。而如果再展开来讲述脚本语言,显然就离开了今天的主题。
在这种情况下,只好采取一种折衷的方法:给大家推荐几个脚本文件利用 WSH 执行任务的实例,希望大家能通过这些例子对
WSH 的使用有一个初步的认识。
脚本文件的编写十分方便,你可以选用任意一个文字编辑软件进行编写,编写完成后,只需将它保存为 WSH 所支持的文件名就可以了(如。js
文件和。vbs 文件)。最常用的就是记事本编辑器,下面的实例都是以它作为工具编写的。
打开记事本编辑器,在上面编写如下内容:Wscrīpt.Echo("走近 WSH")
将它保存为以 .vbs 或 .js 为后缀名(千万不要写成了 .txt)的文件并退出记事本。双击执行这个文件。
这一次,我们要利用 WSH 完成一次创建十个文件夹的工作。代码如下:dim objdir set ōbjdir=wscrīpt.createobject("scrīpting.filesystemobject")
for k=1 to 10 anewfolder="c:\chapter" &
k objdir.createfolder(anewfolder)
next同样,将它存为 .vbs 文件并退出。运行后,我们会发现,C 盘根目录下一次性多出了十个新文件夹。
最后,再举一个在服务器上的运用。下面的代码将帮助你重新启动指定的 IIS 服务: ' define a
constant for stopped services Const ADS_SERVICE_STOPPED
= 1 ' get an ADSI object for a computer Set ōbjComputer
= GetObject("WinNT://MYCOMPUTER,computer")
' get an object for a service Set ōbjService = objComputer.GetObject("Service","MYSERVICE")
' check to see if the service is stopped If (objService.Status
= ADS_SERVICE_STOPPED) Then ' if the service is stopped,
then start it objService.Start End If将它以 startsvc.vbs
为名保存在 C: 盘根目录。并通过如下命令执行:Cscrīpt C:\STARTSVC.VBS.运行后,经你指定的
IIS 服务项将被重新开启。
其实,在 Windows 的 samples 目录下,有个 WSH 文件夹,那里面有不少很具代表性的 .vbs
和。 js 脚本文件。
此外,利用 WSH 还可以自己编写脚本文件来提高网络管理方面的效率。
8.从 EXCEL 中导出数据进行测试datatable.AddSheet("51sheet")
datatable.ImportSheet "f:\test.xls","testsheet","51sheet"
Dim i,RowCount ' 定义两个变量i=0 RowCount=datatable.GetSheet("51sheet")。GetRowCount
' 设置 RowCount 等于 51sheet 中的行数。
msgbox RowCount Do while i<rowcount i=i+1 ' 第一次进入循环,执行这句后,
i=1 'datatable.getsheet("51sheet")。setcurrentrow(i)
这句话被我注释掉了,正确的写法应该是下面这样,分开写。
datatable.getsheet("51sheet")
datatable.setcurrentrow(i)
' 执行过上面两句后, CurrentRow 是第一行。
tempData=DataTable.GetSheet("51sheet")。GetParameter("Name")。
Value ' 现在,我们调用 msgbox 看看下面这种调用方法得到的是什么值?没错,是第一行的值,下一次循环呢?
' 得到的是第二行的值么?
msgbox "GetParameter-Name:"&tempData
' 这里弹出我们要看的值。
' 下面我们用另外一种方法来得到。
msgbox "GetParameter-i:"&DataTable.GetSheet("51sheet")。GetParameter(1)。Value
' 这里我用 GetParameter(1) 去得到 sheet 中第一列的值。
loop 9.关于 dtGlobalsheet 与 dtLocalsheet 1) dtGlobalsheet
只有一个,它的 index 值比较特殊,它有两个 index 值,一个是 1 还有一个是内置的默认的 1000
.你可以用 1 或者 1000 去引用它都是正确的。当然了,如果你用 dtGlobalsheet 来引用它也是正确的。这个
sheet 的 Name 叫做 "Global" .注意: SheetName 是区分大小写的。
2) dtLocalsheet 可以用 index:1001 来引用,当然,也可以用 2 来引用。至于其它自定义的
sheet 嘛,你就只能用 index:3 来引用了。
它没有内置的默认的类似前两个那样的 index 值。
3) datatable 这个对象只有一个。就是所有 sheet 的集合。或许你把它理解为 excel
文件比较好。
dtsheet 呢?就是其中的每个 sheet .所不同的就是 MI 为他们做了一些默认值。在我们的应用中,可能会有多个
action, 如: actiion1,actiion2,actiion3这些 action 也分别对应有各自默认的
LoaclSheet. 即: actiion1 , actiion2 , actiion3 .如果每个
action 中,我们都只用到一个 sheet ,那就好办了,在每个 action 中都可以用 localsheet
来引用,但是如果我们有两个及两个以上的 sheet. 那么就比较容易乱套了。
10.移动当前位置的行For i=1 to 3 datatable.getsheet("Global")
datatable.setcurrentrow(i)
DataTable("C","Global") = DataTable("nodename","Global")
‘把表Global中的nodename字段中的内容取出来。
Next 11.如何能记录到页面的校验码?(Output value能不能得到web页面的校验码,一般的校验码是由图片随即生成的
,用QTP怎么录脚本在登陆前得到校验码并输入到校验码一栏)
A:1)一个很简单的方法:测试时叫开发屏蔽掉检验码的功能后,再录制脚本。检验码的功能可以手工很简单测试出来。
2)想得到图片的校验码,唯一的方法就是跟程序员拿程序,然后自己在脚本里面写FUCNTION!
其它就要手动输入了!
13. 自动测试实施计划1)分析实施自动化测试可能存在的风险:就是决定是否实施, 用成本 时间 效果
……
2)制定实施的时机:也就是在什么阶段3)研究所要测试的功能 性能4)分析在测试中可能遇到的问题 和困难5)预估所需要的人时和相应的硬件7)确定负责人员和相关测试人员6)制定详细的测试计划
方案7)最后是执行计划14. 一个Action里如何调用在另一个Action中定义的函数、过程(或变量、常量)
例如:
-----------------------------------
'Action_A Public strURL…… ……
Function QueryList()
…… ……
…… ……
End Function
------------------------------------
'Action_B '如何调用 QueryList函数和strURL A:1)可以把这些变量和Function放在vbs文件作为resource文件共享,在每个Action中添加该文件。
如果function中出现控件调用,那么必须确保该控件在相应的Action的object repository中是存在的。
2)定义一个可被调用的ACTION里面唯一的放一个FUNCTION 15.如何管理QTP的源代码?(QTP生成的源代码比较多,而且和环境控件都有关,假如需要多人同时开发,
请问如何管理源代码?)
A: 一个是代码你可以通过vss,cvs等来进行管理一个是通过td或者qc的基于用例的代码管理其实第一种方法是基于版本控制来进行的,第二种方法是基于用例管理进行的角度不同,管理方法也不同,不过团队协作需要的大家分工明确,进度控制。代码管理可以借鉴开发的方法。
16: 脚本不能回放,IE中的AtiveX设置有问题??
A: TOOL——OPTIONS——Ative screen然后点开advanced……,把LOAD
ACTIVEX CONTROLS打勾TOOL——OPTIONS——Ative screen然后点开advanced……,run
scrīpts——>disabled!
17 .如何参数化link Browser("Browser")。Page("Page")。Sync
Browser("Browser")。Navigate "http://www.51testing.com/cgi-bin/index.php"
Browser("Browser")。Page("51Testing 软件测试论坛——软件测试,软件质量工程师")。Sync
Set tags=Browser("Browser")。Page("51Testing软件测试论坛——软件测试,软件质量工程师")。Object.links
Dim i,j, arr()
i=0 For Each element in tags If Ucase(element.tagname)="A"
and left(element.InnerText,1)="[" Then ReDim
Preserve arr(i+1)
arr(i)=element.InnerText i=i+1 end if Next For j=0
to i Browser("Browser")。Page("51Testing软件测试论坛——软件测试,软件质量工程师")。Link("[
版主讨论区 ]")。SetTOProperty "Text",arr(j)
Browser("Browser")。Page("51Testing软件测试论坛——软件测试,软件质量工程师")。Link("[
版主讨论区 ]")。Click Browser("Browser")。Back
Next这段代码先是打开一个空的页面,然后输入url.到达论坛首页。
然后得到所有版面的名称,也就是link的名称。
存到数组里面。
然后使用SetTOProperty更换录制时候录下的link的属性。
这时候再click 18. QTP 在Debug状态,在Export View 区域不能写入任何东西A:
如果你的目的是在debug过程中修改已执行过的命令,可以在Debug view的Command中执行命令,如重新执行已经执行过的命令,修改变量的值等等。
如:Window("Flight Reservation")。WinEdit("Name:")。Set
"51testing"已经执行,如果现在想修改“51testing”为“testing”,可以在command中执行Window("Flight
Reservation")。WinEdit("Name:")。Set "testing"
19 . 动态变化值如何获取A:VAL=Browser("欢迎使用我的工作台")。Page("欢迎使用我的工作台")。Frame("managePlace_7")。WebRadioGroup("userAccountId_0")。GetROProperty("Value")
Browser("欢迎使用我的工作台")。Page("欢迎使用我的工作台")。Frame("managePlace_7")。WebRadioGroup("userAccountId_0")。select
val 20 .如何一一获得Table中 某栏 link 的 text?
A:通过上面link 的学习。 我终于融会贯通,完成了我的问题: 与大家共享://////////////////////////////////////////////////////////////////////////////////////
Browser("Login")。Page("Page")。Frame("contents")。ViewLink("treeview")。Image("Tplus")。Click
Browser("Login")。Page("Page")。Frame("contents")。ViewLink("treeview")。Image("Tplus_2")。Click
Browser("Login")。Page("Page")。Frame("contents")。ViewLink("treeview")。Link("开课设置")。Click
Browser("Login")。Page("Page")。Frame("main")。WebList("drpStatus")。Select
"任意" Browser("Login")。Page("Page")。Frame("main")。WebButton("查找")。Click
Browser("Login")。Page("Page")。Sync
Dim finded,findCode,Nowout 'define a constrat for find
findCode = 110901 finded = false Function MaxPage(pageString)
'msgbox pageString Dim ilen,i,j ilen = len(pageString)
i=ilen While i>0 j = mid(pageString,i,1)
'msgbox j If instr("123456789",j)>0 Then
MaxPage = j 'msgbox MaxPage Exit function End If i=i-1
Wend End Function Dim trowcount,maxp trowcount = Browser("Login")。Page("Page")。Frame("main_8")。WebTable("开课代码")。RowCount
msgbox "Rowcount: "&trowcount Nowout =
Browser("Login")。Page("Page")。Frame("main_8")。WebTable("开课代码")。GetCellData(trowcount,1)
Nowout = trim(Nowout)
maxp = MaxPage(Nowout)
msgbox "max page: "& maxp Dim nowPage,checkid
For nowPage = 1 to maxp If finded Then Exit for End
If ' link to the 当前所需page If nowpage>1 Then Browser("Login")。Page("Page")。Frame("main_8")。Link("[2]")。SetTOProperty
"Text","["&nowpage&"]"
Browser("Login")。Page("Page")。Frame("main_8")。Link("[2]")。Click
Browser("Login")。Page("Page")。Sync
end if ' Get the rowcount of table in now page trowcount
= Browser("Login")。Page("Page")。
Frame("main_8")。WebTable("开课代码")。RowCount
msgbox "Rowcount: "&trowcount 'link every
record in the table of the page for i = 2 to trowcount
- 2 Nowout = Browser
|