`
makar
  • 浏览: 85794 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

QTP基础代码

    博客分类:
  • TEST
阅读更多

1 生产随机数列
第一种方法

CODE:

    randomize'更新反回的数据
    funcation rand(k,n)
        n=int((k-1)*rnd+1)
        rand=n
    end funcation

第二种方法

CODE:

    n=randomnumber.value(1,255)

2  当运行到表中的某一行,自动导出表中的所有数据

CODE:

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

3

CODE:

    webedit("txtpass").setsecure"sdsdf...."

如果参数化密码,可以直接在数据表中写入未加密的密码,它会自动识别,即不用把setsecure改为set
4 如果弹出对话框就获取上面提示信息并与表中的信息对比,不统一证明弹出的提示出错,主要用来验证

    '判断一个窗口是否存在
    if(Dialog(dialog_name).exist=true) then
    else
    end if
    '判断一个窗口是否激活
    if(window("window_name").active=true) then
    else
    end if

 

    导入一个EXCEL表
    datatable.Import(excel_name)'将该excel文件中的表全部导入
    datatable.ImportSheet(excel_name,sheet_name)'导入excel中名字为sheet_name的sheet表
    导出一个EXCEL表
    datatable.ExportSheet(excel_name,sheet_name)或
    datatable.ExportSheet(excel_name,sheet_index)
    获取表中当前的行数
    datatable.GetCurrentRow
    获取表中总行数
    datatable.GetRowCount
    返回EXCEL中表的数量
    DataTable.GetSheetCount
    获取运行的表中的某个值或者设置该值
    DataTable.Value(colume_name,sheet_name)'获取colume_name列中的当前光标处的值
    DataTable.value(colume_name,sheet_name)=New_Value'设置新值

    DataTable.GetSheet(sheet_name).GetParameter(colume_name).valueByRow(n)

    判断当前光标是否处于最后一列
    iRow=datatable.getCurrentRow
    if(dataTable.value(sheet_name).GetParameter(colume_name).ValueByRow(iRow)<>expected_value)     then
    for iRow=0 to iRow<datatable.getRowCount
        rowNum=iRow
    next
end if
    获取一列数据
    DataTable(colume_name,sheet_name)
    '一个登陆的对话框,首先为一个错误的判断,后来输入正确的值点击button_name按钮
    Dialog(dialog_name).WinEdit(login_name).set login_wrongname
    Dialog(dialog_name).WinEdit(login_pwd).set login_wrongpwd
    Dialog(dialog_name).Dialog(wrongdialog_name).WinButton(button_name).click
    Dialog(dialog_name).WinEdit(login_name).set login_correct_name
    Dialog(dialog_name).WinEdit(login_pwd).set login_correct_pwd
    Dialog(Dialog_name).WinButton(button_name).click

    window的方法和属性
    window(win_name).active

 

CODE:

 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)取一部份特征提示信息进行验证,这样我想可以节省处理时间,又可以避免长度以及空格等字符的处理

 

5  datatable.value("num")只在global形式下的一种省略形式;完整形式是:

CODE:

    datatable.value("num",dtlocalsheet)

        -----向某一列的单元格赋值:

CODE:

    datatable.value("column_name",dtlocalsheet)="nanjing"

        -----取得某一行具体值:

CODE:

    datatable.setcurrentrow(n)
    msgbox(datatable.getsheet("global").getparameter("column_name").Rawvalue)
    或者kk=datatable.Rawvalue("column_name","action1")

    ----在run-time时,动态添加表格与数据

CODE:

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

 

6  简化代码,明晰结构的方式with--end with 结构:

CODE:

with Dialog("name")
       c1=.button("b_name").click'//等价于Dialog("name").button("b_name").click
end with

 

7   wintreeview一些操作

CODE:

选择一个条目:wintreeview.select(item)'根是0
根的名称:wintreeview.getitem(0)

 

8   数据库检查点模块:

CODE:

sub database_check
set con=createobject("adodb.connection")
con.open "Description=IBM_ODBC;DRIVER=SQL Server;SERVER=IBM;UID=sa;"&_
                 "PWD=123456;APP=Quick Test Pro;WSID=IBM;DATABASE=IBM_table"
'access方式:con.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\test.mdb"
'Orocle方式:con.open "DRIVER={Oracle in OraHome92};SERVER=CESHI;UID=CND_TEST;PWD=CND;DBQ=CESHI;DBA=W;APA=T;EXC=F;XSM=Default;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BAM=IfAllSuccessful;MTS=F;MDI=Me;CSR=F;FWC=F;PFC=10;TLO=O;"
set record=createobject("adodb.recordset")
sql="select*from ibm_one_table"
record.open sql,con
DO
if(record("ibm_table_column")="kai")then'//查找表格中有多少kai
num=num+1;
end if
record.movenext
loop until record.eof=true
record.close
set record=nothing
con.close
set con=nothing
end sub

 

9   换行符

CODE:

vbcr----chr(13)回车符
    vblf----chr(10)换行符
    vbcrlf----chr(13)+chr(10)结合

 

10  Run from step有两种方式:

CODE:

在Keyword View模式会从本步骤运行到所有action结束
在expert view模式仅会将本action运行结束

 

11  对于属性是变化的,有时可以把该属性从识别对象里删除,来解决识别问题

 

12  对系统文件的操作

CODE:

-------从系统的文件中获取信息及删除文件
  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
--------获取文件夹里所有文件信息
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

 

13   等待某个对象出现方法

CODE:

y=......waitproperty("visible",true,10000)

 

14   防程序中断方法

CODE:

On error resume next
On error goto handle

 

15  数组的应用:

CODE:

name=array(1,2,"aa","bb")
name(2)="aa"

 

16  正则表达式应用模板

CODE:

进行日期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 select

 

17   返回一个字符串在另一字符串中的位置

CODE:

instr(string1,string2)

 

18   有时回放出现找不到对象时,可能不是由于你的代码问题,而是由于你的操作系统等设置问题;

CODE:

举例说明1:
比如:你录制一个选择磁盘中的文件动作
会录制为:
.winlistview("  ").drap 46,99
.winlistview("  ").draponitem "she.mp3"
下次录制的时候,如果你的系统文件改为不显示扩展名,下次执行的时候,QTP就找不到she.mp3,只能找到she;
举例说明2:
有时由于不同操作系统以及不同的ie,导致有些窗口不能识别,比如在2000下弹出的网页对话框的标题是:
“web对话框",而在2003上是”网页对话框"

 

19  "is+*"类型function

CODE:

isarray'是否是数组
isconnected'判断QTP是否连接到TD
isdate'是否是合法的日期类型
isempty'判断是否初始化
isNull'判断是否为空值
isNumeric'判断是否是数字型
isobject'判断是否一个功能对象
isready'判断设备是否准备就绪
isRootFolder'是否是根目录

 

QTP提供全局错误处理模式,有Popup  message box,Process next action iteration,Stop run,Process next step这四种。

QTP也提供On Error Resumt Next/On Error goto 0的局部错误处理模式。可以在局部范围内实现Process next step的效果,忽略错误继续执行后续步骤。这个局部错误处理模式,象局部变量优先于全局变量并且只在本函数内有效一样,优先级高于全局错误处理模式,同时只在本函数局部范围(Action本身也可以看成是个函数)内生效。它不会影响外层函数的错误处理模式,但会改变局部范围内调用的子孙函数,将子孙函数的错误处理模式改为Stop Run!

四种全局错误处理模式的区别在于:

1、Process next step
  这种模式忽略错误继续往下执行,可以通过Err.Number来判断是否发生了错误。
  因为Case函数的每个步骤都是密切相关的,不可能忽略错误继续往下执行下一步骤
  也不可能在每个步骤每个语句后面都加错误检查,这样错误处理代码太多了
  在很多个步骤后再检查也是不严谨的,会错上加错,并因此失去第一个错误的信息
  所以,这种模式不可取
  
2、Stop run
  这种模式发生错误后,就抛出异常(可用Err对象得到异常里的错误信息),中止本函数,并一层一层的返回到上一层函数,最后到达Action函数后(Action本身也可以看成是个函数),就停止整个Test的执行。
  在一层一层的返回上层函数的过程中,如果某个中间函数有On Error Resumt Next/On Error goto 0,就会把错误拦截下来,这个中间函数会继续往下执行,不会中止函数并返回上一层函数。
  
3、Popup  message box
  这种模式在发生错误时,弹出对话框让用户选择Stop、Retry、Skip、Debug。
  主控Test要全自动执行,不能要求人工干预,所以这种模式不可取
  
4、Process next action iteration
  这种模式跟Stop run类似,但是它只是退出本次Action循环,还会继续下一个Action循环。
  主控Test没有继续下一个Action循环的需求,所以这种模式不可取。

经过上述分析,我们可以得到结果,我们的主控Test,全局错误处理模式使用Stop run模式,同时在主控函数里使用On Error Resumt Next/On Error goto 0的局部错误处理模式来调用Case函数。这样使得Case函数和其子函数里发生错误时,会停止执行,并层层返回到主控函数这里,并由主控函数来拦截错误,记录错误。然后主控函数就可以正常的继续执行下一个Case函数了,不用担心会导致整个Test停止执行。

主控函数调用Case函数的详细过程如下:

Err.Clear
On Error Resume Next
call CaseFunctionName
If Err.Number <> 0 Then
  WriteLog Err.Number  '错误码
  WriteLog Err.Description  '错误描述
  WriteLog Err.Source  '错误来源对象,不过好像没啥用
End
Err.Clear
On Error goto 0

分享到:
评论

相关推荐

    【QTP】QTP基础代码.pdf

    ### QTP基础代码知识点概述 #### 一、生成随机数序列 在软件自动化测试中,经常需要使用随机数来模拟真实环境下的数据输入。QTP(Quick Test Professional)支持多种方式来生成随机数序列。 ##### 第一种方法 通过...

    常用QTP基础代码(文档)

    ### QTP基础代码知识点 #### 一、生成随机数列 **知识点1:随机数生成方法** 在QTP中,生成随机数列是一项常见的需求,主要用于自动化测试中的数据多样性模拟。文档中提到了两种方法: 1. **第一种方法:自定义...

    qtp 基础代码

    标题:“QTP基础代码” 描述:“QTP基础代码例子” 标签:“QTP” 根据给定的文件信息,我们可以深入探讨QTP(Quick Test Professional)的基础代码应用与实践,特别是通过具体的示例代码来理解QTP的功能和编程...

    软件测试工具QTP基础代码收集

    qtpQTP软件测试工具QTP基础代码收集1、将bug添加到QCDimTDConnectionSetTDConnection=CreateObject("TDApiOle.TDConnection")TDConnection.InitConnection..."bella","pino软件测试工具QTP基础代码收集1、将bug添加到...

    QTP的详细基础代码

    【QTP基础代码详解】 QuickTest Professional(QTP)是一款由HP公司开发的自动化测试工具,主要用于功能测试和回归测试。QTP通过录制、回放和脚本编辑,能够实现对应用程序的自动化测试。以下是对QTP基础代码的详细...

    QTP中一些基础代码的积累

    【QTP基础代码知识点】 QuickTest Professional(QTP),现称为Unified Functional Testing(UFT),是一种自动化测试工具,主要用于功能和回归测试。本篇将详细解释QTP中一些基础代码的积累,涵盖生成随机数列、...

    QTP编写代码样例

    8. **函数和方法**:理解VBScript的基础语法和QTP提供的内置函数,如` descriptive programming `、`RunKeyword`等,是编写高效测试脚本的关键。 通过学习和理解上述知识点,并结合提供的`public_func_CISS.vbs`和`...

    QTP小解(基础知识)

    在录制过程中,QTP会识别屏幕上的对象并将其转化为代码,用户可以根据需要调整识别规则和对象属性。 2.2.1 分析录制的测试脚本 录制的脚本通常需要进一步优化,如处理动态对象、添加异常处理和逻辑判断,以确保脚本...

    源代码,qtp实例教程

    本压缩包中的"源代码,qtp实例教程"提供了对QTP自动化测试的实战学习资料,特别是一个基础的登录实例,这个实例将帮助我们理解如何运用QTP的脚本语言VBScript来构建自动化测试场景。 在登录实例中,QTP会模拟用户的...

    QTP的基础设置

    **QTP基础设置详解** QuickTest Professional(QTP),现称为Unified Functional Testing(UFT),是HP公司推出的一款自动化测试工具,主要用于功能测试和回归测试。它提供了录制、回放和脚本编辑等功能,适用于多...

    QTP零基础到精通笔记

    【QTP基础概念】 QTP,全称为QuickTest Professional,是一款由HP公司开发的功能自动化测试工具,特别适合于回归测试和数据驱动测试。它基于Visual Basic Script (VBS)语言,采用关键字驱动的方式,能够识别并操作被...

    QTP基础教程学习

    ## QTP基础教程学习 ### QTP简介 **自动化测试的好处** 自动化测试是现代软件测试领域的一个重要组成部分,尤其体现在QuickTest Professional(QTP)这样的工具上。QTP的使用可以带来以下显著的优势: 1. **速度...

    QTP零基础教程

    【QTP零基础教程】 QTP,全称QuickTest Professional,是HP(现已被Micro Focus收购)推出的一款功能强大的自动化测试工具,专为软件测试人员设计,用于进行回归测试和性能测试。它允许用户通过录制、回放和编辑...

    《QTP自动化测试实践》源代码

    QTP使用VBScript作为脚本语言,因此,理解VBScript的基础是必不可少的。源代码中的每个例子都可能涉及到变量声明、条件语句、循环结构、函数调用等VBScript语法。此外,你还可以学习到如何编写测试步骤,如点击按钮...

    QTP自动化测试实践》源代码

    通过详细研究《QTP自动化测试实践》的源代码,读者不仅可以掌握QTP的基础操作,还能提升在实际项目中应用自动化测试的技能,实现高效、可靠的测试自动化。同时,这也为后续学习更高级的自动化测试工具和概念打下坚实...

    QTP进阶资料 最新

    qtp_基础代码 QTP-SystemUtil QTP操作 1 QTP操作 2 QTP操作 3 QTP操作 4 QTP操作 5 QTP操作 6 shell32 VBS基础 VBS提高 Win32_API wsh_ 错误处理 慢慢学习 VBScript (V1[ 1].0) 文件操作 正则表达

    这是一段qtp脚本代码

    QTP (Quick Test Professional) 脚本语言基础 QTP(现更名为UFT,即Unified Functional Testing)是一款广泛应用于自动化测试领域的工具,它支持多种开发环境如Web、Windows等,并能够录制和回放测试脚本来模拟...

Global site tag (gtag.js) - Google Analytics