【软件自动化测试-QTP实战技能 10】== QTP用到的一些特殊方法

1.使用print来实现批量的察看信息但是不影响程序运行.

x = "test"

print x

~~~~~~~~~~~~~~~~~~~~~~~~~

2. 生产随机数列
 第一种方法
Randomize   '更新返回的数据(Initialize random-number generator)
 Function rand(k)
 n = Int((k-1)* Rnd +1)
 rand = n
 End Function

第二种方法
n=randomnumber.value(1,255)  //当运行到表中的某一行,自动导出表中的所有数据

row=datatable.getcurrentrow
 if row="5" then
   datatable.export("d:\data.xml")
 end if 3

webedit("txtpass").setsecure"sdsdf...."如果参数化密码,可以直接在数据表中写入未加密的密码,它会自动识别,即不用把setsecure改为set

3.取datatable特定行的数据可以这样使用
DataTable.GetSheet("Action1").GetParameter("test").ValueByRow(4)

4.从系统的文件中获取信息及删除文件
   get_file_infor("c:\she.mpg")
    function get_file_infor(url)
     dim fso,f
     set fso=createobject("scripting.filesystemobject")
     set f=fso.getfile(url)
    f.name:f.size:f.type:f.datacreated'///获取文件信息
     fso.deletefile(url)'/////删除文件
    end function

~~~~~~~~~~~~~~~~~~
5.Wait Seconds [, Milliseconds]可以精确到毫秒.
~~~~~~~~~~~~~~~~~~
6.在自定义的function里面数组作为返回值.
circuit = "123456"
Function trimString(circuit)
    Dim holdArray(5)
    holdArray(0) = Left(circuit, 2)
    holdArray(1) = Right(circuit, 2)
    msgbox holdArray(0) 'showed 12
    trimString = holdArray' I get an out of range error here
End Function
dim myArray
'here I want to assign the return array to another array
    myArray = trimString(circuit)
' and then call one element from it
msgbox myArray(1)

~~~~~~~~~~~~~~~

7、 childobject的应用

childobject可以返回界面上满足条件的对象集合,而且与对象库里是否有这些对象无关,这就可以简化对象库;返回的对象集合的count方法可以返回对象个数,这就可以通过下标对单个对象进行操作;在出现index标识对象时可以进行运用
 如:Set m_WinCheck=Description.Create()
       m_WinCheck("nativeclass").Value="Button"
       set All_WinCheck=Window("").Dialog("").Childobject(m_WinCheck)
       n=All_WinCheck.Count()
      for i=0 to n-1
       All_WinCheck(i).Set "ON"
      next

8、 获取文件夹里所有文件信息
     get_folder_infor("c:\kai")
 function get_folder_infor(folder)
     dim fso,f,f1,n
     set fso=createobject("scripting.filesystemobject")
     set f=fso.getfolder(folder)
     set fc=f.files
    
     for each f1 in fc
         select case f1.name
         case"kai.mpg","she.mpg","dd.mp3"'//检查文件夹里是否含有这些文件
         end select
     next
 end function

9.计算一个操作的时间.
Browser("Browser").Page("Page").Image("getRates").Click
var_StartTime = Timer
Browser("Browser").Page("Page").Sync
Browser("Browser").Page("Page").Check CheckPoint("Check1")
var_EndTime = Timer
intRespTime = round ((var_EndTime - var_StartTime), 2 )
msgbox (intRespTime)

~~~~~~~~~~~~~~~

10、如果弹出对话框就获取上面提示信息并与表中的信息对比,不统一证明弹出的提示出错,主要用来验证

 if browser("web_name").dialog("dialog_name").exist(1) then'如果不出现=false
      error_message=browser("web_name").dialog("diaglog_name").static("用户密码错误!".getRoproperty("text")
    if error_message<>(datatable.value("error_info"))then
          msgbox(error_message)
       end if
      browser("web_name").dialog("diaglog_name").close
   end if

这里我总结了两点技巧:
   一是:对于dialog中,虽然提示信息对象名称是"用户密码错误",但如果信息对象名称是“该用户不存在”,不用更改会自动识别,我想主要是录制第 一遍时,“用户密码错误”只是让运行时能找到这个控制,而不管它是什么内容,因为在对象仓库中,text不是决定该对象的属性
     二是:如果对于提示信息比较长的,可以用mid(error_message,n,m)取一部份特征提示信息进行验证,这样我想可以节省处理时间,又可以避免长度以及空格等字符的处理

11、正则表达式应用模板

进行日期YYYY-MM-DD的格式检查 :
 Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches      ' Create variable.
   Set regEx = New RegExp         ' Create a regular expression.
   regEx.Pattern = patrn         ' Set pattern.
   regEx.IgnoreCase = True         ' Set case insensitivity.
   regEx.Global = True         ' Set global applicability.
   Set Matches = regEx.Execute(strng)   ' Execute search.
   For Each Match in Matches      ' Iterate Matches collection.
     RetStr = RetStr & "Match found at position "
     RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
     RetStr = RetStr & Match.Value & "'." & vbCRLF
   Next
   RegExpTest = RetStr
 End Function
 date_pattern="^((((19|20)(([02468][048])|([13579][26]))-02-29))|((20[0-9][0-9])|(19[0-9][0-9]))-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((01,3-9])|(1[0-2]))-(29|30)))))$"
 result_message=RegExpTest(date_pattern, inputbox("请你输入要检查的时间:"))'用其它正则表达式更改此处

 Select case result_message
    Case ""
      msgbox("你输入的日期格式与标准不匹配")
   case else  MsgBox(result_message)
 end select16  

6.取得指定sheet(datatable)的行数和列数(也可以理解为参数个数)
paramcount = DataTable.GetSheet("Action1").GetParameterCount
msgbox "There are " &paramcount&"columns in the data sheet."
rowcount = DataTable.GetSheet("Action1").GetRowCount
msgbox "There are " &rowcount&"rows in the data sheet."
~~~~~~~~~~
7.一种设置全局变量的方法GlobalDictionary
'Part 1.
'***********************************************************************************************************
Dim WshShell
Set WshShell =CreateObject("WScript.Shell")
WshShell.RegWrite "HKCU\Software\Mercury Interactive\QuickTest Professional\MicTest\ReservedObjects\GlobalDictionary\ProgID", "Scripting.Dictionary","REG_SZ"
Set WshShell = Nothing
'*********************************************************************************************************************
'Part 2.
'*****************************************************************************************
GlobalDictionary.Add "ParamName", "ParamValue"
Msgbox GlobalDictionary.Item("ParamName")
GlobalDictionary.Item("ParamName")="***********"
Msgbox GlobalDictionary.Item("ParamName")
Msgbox GlobalDictionary.Exists("ParamName")
GlobalDictionary.Remove("ParamName")
Msgbox GlobalDictionary.Exists("ParamName")
'*********************************************************************************************
~~~~~~~~~~~
8.关掉多余的IE窗口
   SystemUtil.CloseProcessByWndTitle "testing", True
~~~~~~~~~~~~~~~~~~
9.Execute 的用法,这个用法在一些特殊时候很有用的.
x="1"
Execute "Dim A_" & x
Execute "A_" & x &"=88"
Msgbox Eval("A_" & x)
~~~~~~~~~~~~~~~~~~~
10.GetLastError的介绍,看字面就是取运行最后一个错误
x = GetLastError
msgbox(DescribeResult(x))
这样可以在程序里面判断程序运行时候是否出错了.
~~~~~~~~~~~~~~~~~
11.把weblist抓图下来

Setting.WebPackage("ReplayType") = 2 'Default is 1
Browser(".").Page(".").WebList(".").Click
Desktop.CaptureBitmap "C:\Test.bmp",True
Setting.WebPackage("ReplayType") = 1
~~~~~~~~~~~~~~~~~~~~~~~~~~
12.Reporter.ReportEvent的新用法
transNumber = 12345
Reporter.ReportEvent micPass, "TransactionNumber", "<DIV style='font-size: 7pt; color: white'>&</DIV>"&"<B> <FONT COLOR=#000000>"&transNumber&"</FONT></B>"
Reporter.ReportEvent micPass, "TransactionNumber", "<DIV style='font-size: 7pt; color: white'>&</DIV>"&"<B> <FONT COLOR=red>"&transNumber&"</FONT></B>"
~~~~~~~~~~~~~~~~~~~~~~~~~~
13.For循环中step的用法
For K = 1 To 10 step 2
msgbox k
Next

~~~~~~~~~~~~~~~~~~~~~~~

14、等待某个对象出现方法
y=waitproperty("visible",true,10000)

15、防程序中断方法
On error resume next
On error goto handle

15.申明使用的变量,用Option Explicit
Option Explicit ' Force explicit variable declaration.
Dim MyVar ' Declare variable.
MyInt = 11 ' Undeclared variable generates error.
MyVar = 11 ' Declared variable does not generate error.

~~~~~~~~~~~~~~~~~~~~~~~

16、 模板的应用

新建一个文本,输入一些新建Action时常包含的信息,然后保存为ActionTemplate.MST文件,并复制到QTP/dat目录下;这样每次新建action都会包含固定的信息了;
 例如:
 '-------------------脚本说明---------------
 '产品版本:      __Build(  )
 '开发者:
 '编写日期:
 '测试功能:
 '脚本类型:
 '被测试对象初始状态:
 '进展程度:
 '基本思路:
 '主要功能函数:
 '历史修改:
 '没解决的问题:
 '--------------------脚本内容-------------

17.从TXT文件里面读取特定行的数据.
Dim fso, myfile,msg
Set fso=CreateObject("scripting.FileSystemObject")
Set myfile = fso.openTextFile("C:\login.txt",1,false)
'这里设置一个循环看需要读取第几行
for i=1 to 10
myfile.SkipLine
next
msg=myfile.ReadLine
myfile.close

18、单元格操作
 datatable.value("num")只在global形式下的一种省略形式;完整形式是:
 datatable.value("num",dtlocalsheet)    //向某一列的单元格赋值:
 datatable.value("column_name",dtlocalsheet)="nanjing"       // 取得某一行具体值:

datatable.setcurrentrow(n)
 msgbox(datatable.getsheet("global").getparameter("column_name").Rawvalue)
 或者kk=datatable.Rawvalue("column_name","action1")5.3 在run-time时,动态添加表格与数据

代码:
kk=datatable.addsheet("sheet_name").addparameter("column_name","value").name;


 



你可能感兴趣的:(测试,qtp,scripting)