UFT(QTP)-总结点与自动化测试框架
目录
- 1、前言
- 2、简介
- 3、总结点
- 3.1、Accessibility Checkpoint可访问性检查点
- 3.2、Action Properties-Action属性设置
- 3.3、Active Screen测试界面信息设置
- 3.4、Active Screen插入位图检查点
- 3.5、Active Screen中的对象输出其对象属性
- 3.6、Active Screen中选择并添加对象到对象库
- 3.7、Active Screen中选择对象并添加测试步骤
- 3.8、Analog Recording-低级录制
- 3.9、Associate Repositories-关联Action的对象库
- 3.10、Check Syntax-语法检查
- 3.11、Comment-添加注释
- 3.12、Data Driver Wizard-数据驱动向导设置
- 3.13、Data Driver-数据驱动器
- 3.14、Data Table iterations设置数据表格的迭代方式
- 3.15、Database Checkpoint数据库检查点
- 3.16、DataTable参数化
- 3.17、DataTable参数化检查点
- 3.18、Documentation-导出测试步骤文档
- 3.19、Function Definition Generator-创建自定义函数
- 3.20、Image Checkpoint图像检查点
- 3.21、Insert Call to New Action-添加新的Action
- 3.22、Insert New Step-插入新的测试步骤
- 3.23、Insert Report-测试信息的输出
- 3.24、Insert Standard Checkpoint-插入标准检查点
- 3.25、Object Identification-识别对象
- 3.26、Object Repository-对象库
- 3.27、Object Spy-查看测试对象的属性和方法
- 3.28、Page Checkpoint页面检查点
- 3.29、Random Number随机数进行参数化
- 3.30、Record and Run Settings-windows应用程序设置
- 3.31、Recovery Scenario-场景恢复
- 3.32、Run-选择测试运行结果的存储位置
- 3.33、Run-运行部分测试
- 3.34、Run-运行方式设置
- 3.35、Screen Recorder-在报表中查看测试过程的截屏
- 3.36、Select Object for Step-为测试步骤选择对象
- 3.37、Silent Test Runner模拟Loadrunner的调用
- 3.38、Step Generator-插入新的测试步骤
- 3.39、Step Generator-添加函数调用
- 3.40、Table Checkpoint表格检查点
- 3.41、Test Batch Runner-批量运行测试脚本
- 3.42、Text Area Checkpoint文本区域检查点
- 3.43、Text Checkpoint文本检查点
- 3.44、Transaction添加事务
- 3.45、Virtual Objects-定义虚拟对象
- 3.46、Virtual Objects-虚拟对象管理
- 3.47、XML Checkpoint-XML检查点
- 3.48、导入导出环境变量文件
- 3.49、调用Action
- 3.50、定义和设置环境变量
- 3.51、关联Recovery Scenario到测试脚本
- 3.52、设置插件管理界面是否显示
- 3.53、添加Action的输入参数
- 3.54、运行过程中设置判断一个对象存在的最大时间
- 3.55、在测试步骤中绑定环境变量值
- 3.56、自动识别和完成VBScript语法的输入
- 3.57、把屏幕截图保存到指定文件
- 3.58、单步调试三种区别
- 3.59、定位并激活对话框
- 3.60、获取控件窗口的标题
- 3.61、检查点
- 3.62、检查结果写入测试报告中
- 3.63、判断控件是否存在
- 3.64、QTP对记事本的操作
- 4、自动化测试框架
1、前言
随着自动化测试技术的发展,新兴的开源自动化测试工具崛起,例如:Selenium、Cypress等。但是老牌的自动化测试工具也在不断的更新与迭代,本篇介绍一下作者之前在使用UFT(QTP)时的一些总结。
2、简介
Unified Functional Testing(UFT)称为统一功能测试,是一种自动化测试工具,可为软件应用程序提供自动化功能和回归测试。
UFT支持关键字和脚本界面,并具有图形用户界面。它使用Visual Basic Scripting Edition(VBScript)脚本语言来指定一个测试过程,并操纵被测试应用程序的对象和控件。
原名为QuickTest Professional(QTP)。Unified Functional Testing 11.5将HP QuickTest Professional和HP Service Test整合到一个软件包中,重新起名为Unified Functional Testing。
UFT是收费的,要licence,新版的免费使用时间为60天。
3、总结点
3.1、Accessibility Checkpoint可访问性检查点
3.2、Action Properties-Action属性设置
3.3、Active Screen测试界面信息设置
3.4、Active Screen插入位图检查点
3.5、Active Screen中的对象输出其对象属性
3.6、Active Screen中选择并添加对象到对象库
3.7、Active Screen中选择对象并添加测试步骤
3.8、Analog Recording-低级录制
3.9、Associate Repositories-关联Action的对象库
3.10、Check Syntax-语法检查
3.11、Comment-添加注释
3.12、Data Driver Wizard-数据驱动向导设置
3.13、Data Driver-数据驱动器
3.14、Data Table iterations设置数据表格的迭代方式
3.15、Database Checkpoint数据库检查点
3.16、DataTable参数化
3.17、DataTable参数化检查点
3.18、Documentation-导出测试步骤文档
3.19、Function Definition Generator-创建自定义函数
3.20、Image Checkpoint图像检查点
3.21、Insert Call to New Action-添加新的Action
3.22、Insert New Step-插入新的测试步骤
3.23、Insert Report-测试信息的输出
3.24、Insert Standard Checkpoint-插入标准检查点
3.25、Object Identification-识别对象
3.26、Object Repository-对象库
3.27、Object Spy-查看测试对象的属性和方法
3.28、Page Checkpoint页面检查点
3.29、Random Number随机数进行参数化
3.30、Record and Run Settings-windows应用程序设置
3.31、Recovery Scenario-场景恢复
3.32、Run-选择测试运行结果的存储位置
3.33、Run-运行部分测试
3.34、Run-运行方式设置
3.35、Screen Recorder-在报表中查看测试过程的截屏
3.36、Select Object for Step-为测试步骤选择对象
3.37、Silent Test Runner模拟Loadrunner的调用
3.38、Step Generator-插入新的测试步骤
3.39、Step Generator-添加函数调用
3.40、Table Checkpoint表格检查点
3.41、Test Batch Runner-批量运行测试脚本
3.42、Text Area Checkpoint文本区域检查点
3.43、Text Checkpoint文本检查点
3.44、Transaction添加事务
3.45、Virtual Objects-定义虚拟对象
3.46、Virtual Objects-虚拟对象管理
3.47、XML Checkpoint-XML检查点
3.48、导入导出环境变量文件
3.49、调用Action
3.50、定义和设置环境变量
3.51、关联Recovery Scenario到测试脚本
3.52、设置插件管理界面是否显示
3.53、添加Action的输入参数
3.54、运行过程中设置判断一个对象存在的最大时间
3.55、在测试步骤中绑定环境变量值
3.56、自动识别和完成VBScript语法的输入
3.57、把屏幕截图保存到指定文件
可以保存为“.png”或“.bmp”图像文件
代码语言:javascript复制Desktop.CaptureBitmap "C:aaa.png",true
3.58、单步调试三种区别
(1)Step Into
执行Step Into命令有三种方式:菜单 Debug>Step Into、点击Step Into按钮、按F11。通过Step Into命令,执行当前脚本步骤。如果当前脚本是一个调用 Function的语句,则Function脚本会在QTP窗口中打开,并且当前步骤指向Function的第1行代码。
(2)Step Out
执行Step Out命令有三种方式:菜单 Debug>step Out、点击Step Out按钮、按SHIFT+F11。只在当用户使用了Step Into命令执行了调用 Function语句,打开了Function后,才需要使用Step Out命令。Step Out自动运行到Function结束,然后返回到调用语句,并暂停运行脚本。
(3)Step Over
执行Step Over命令有三种方式:菜单 Debug>Step Over、点击Setp Over按钮、按F10。Step Over只能运行当前代码行,当运行到调用Function语句时,Function被自动完整执行,QTP不打开Function的脚本。
3.59、定位并激活对话框
代码语言:javascript复制Dialog("Login").Activate
3.60、获取控件窗口的标题
代码语言:javascript复制Dim LoginTitle
LoginTitle = Dialog("Login").GetROProperty("text")
Msgbox LoginTitle
3.61、检查点
(1)标准检查点(Standard Checkpoint):用于检查测试对象的属性
(2)图像检查点(Image Checkpoint):用于检查被测试应用程序的图像
(3)位图检查点(Bitmap Checkpoint):把检查被测试应用程序的某个区域当成位图来检查
(4)表格检查点(Table Checkpoint):用于检查表格信息
(5)文本检查点(Text Checkpoint):用于检查文本字符串是否在应用程序中的适当位置出现
(6)文本区域检查点(Text Area Checkpoint):用于检查文本字符串是否按既定的标准出现在应用程序的预定区域(不支持Web页面文字的检查,仅支持标准windows、vb、activeX以及插件支持的控件的文本检查)
(7)可访问性检查点(Accessibility Checkpoint):用于检查网页是否满足W3C的网页内容可访问性指南的要求
(8)页面检查点(Page Checkpoint):用于检查网页的属性
(9)数据库检查点(DataBase Checkpoint):用于检查应用程序所访问的数据库
(10)XML检查点(XML Checkpoint):用于检查XML文档
3.62、检查结果写入测试报告中
micDone为完成的
micFail为失败的
micPass为通过的
micWarning为警告的
代码语言:javascript复制Reporter.ReportEvent micPass,"ChecktextBox1 = Pass","被激活"
3.63、判断控件是否存在
代码语言:javascript复制If Dialog("Login").Exist(3) Then
MsgBox("Login窗口存在")
Else
MsgBox("Login窗口不存在")
End If
3.64、QTP对记事本的操作
代码语言:javascript复制定位到记事本的窗口
Window("记事本").Activate
最大化记事本的窗口
Window("记事本").Maximize
恢复记事本窗口大小
Window("记事本").Restore
获取记事本窗口的标题
msgbox Window("记事本").GetROProperty("text")
往记事本中输入一段文字
Window("记事本").WinEditor("Edit").Type"sdfsdfsfsdfassdfsfsfsdfsdf"
键入“Enter”键
Window("记事本").WinEditor("Edit").Type micReturn
4、自动化测试框架
自动化测试框架目录结构:
BizModule:功能模块(测试用例所调用的操作)
FuncLibrary:公共方法(脚本所要调用的方法)
Help:帮助文档与使用说明
Log:执行出错时,将报错截图自动保存到此目录里
TestData:存放测试数据
UFTTestCase:测试用例(程序执行的主流程入口)
1、测试用例,例如:主控流程
维护了两条操作:信息拟稿、信息编辑员
脚本代码:
按照表格条数进行循环执行,先登陆,之后匹配Case名称进行后续的测试
代码语言:javascript复制Dim strTestDir
strTestDir = Environment("TestDir") 'E:UFT_FrameworkUFTTestCase主控流程
Int Pos
Pos = Instr(1, strTestDir, "UFTTestCase") '18
Pos = Pos - 1 '17
Dim strRootPath
strRootPath = Left(strTestDir, Pos) "BizModule" 'E:UFT_FrameworkBizModule
Dim strLogFolderPath
strLogFolderPath = Left(strTestDir, Pos) "Log" 'E:UFT_FrameworkLog
Dim strTestCaseName
Dim strSysName
Dim strStepName
Dim strName
Dim strUser
Dim strPassWord
Dim strNextStep
Dim strNextUser
Dim strUserDepartment
Dim strTestModulePath
Dim strTitle
Dim strLoginPath
Dim strAttachmentPath
Int intCount
intCount = DataTable.GetSheet("Global").GetRowCount '2
For i = 1 To intCount '流程循环
DataTable.SetCurrentRow(i)
strTestCaseName = DataTable.Value("TestCaseName", "Global")
If strTestCaseName = Environment("TestName") Then 'Environment("TestName") = 主控流程
strSysName = DataTable.Value("SystemName", "Global")
strStepName = DataTable.Value("StepName", "Global")
strName = DataTable.Value("Name", "Global")
strUser = DataTable.Value("User", "Global")
strPassWord = DataTable.Value("PassWord", "Global")
strNextStep = DataTable.Value("NextStep", "Global")
strNextUser = DataTable.Value("NextUser", "Global")
strUserDepartment = DataTable.Value("UserDepartment", "Global")
strTestModulePath = Cstr(Trim(strRootPath & "" & strSysName & "" & strStepName)) 'E:UFT_FrameworkBizModule政务信息信息拟稿
strLoginPath = Cstr(Trim(strRootPath & "登录")) 'E:UFT_FrameworkBizModule登录
strAttachmentPath = Cstr(Trim(strRootPath & "上传附件")) 'E:UFT_FrameworkBizModule上传附件
LoadAndRunAction strLoginPath, "登录", oneIteration, strUser, strName, strPassWord
If Reporter.RunStatus = micFail Then
Reporter.ReportEvent micFail, Environment("ActionName") & "执行出错"
Qtp_capture(strLogFolderPath)
ExitTest
End If
If strTitle <> "" Then
strDaibanPath = Cstr(Trim(strRootPath & "待办事项"))
LoadAndRunAction strDaibanPath, "打开待办事项", oneIteration, strTitle
If Reporter.RunStatus = micFail Then
Reporter.ReportEvent micFail, Environment("ActionName") & "执行出错"
Qtp_capture(strLogFolderPath)
ExitTest
End If
End If
Select Case strStepName
Case "信息拟稿"
LoadAndRunAction strTestModulePath, "信息拟稿", oneIteration, strTestCaseName, strName, strNextStep, strAttachmentPath, strTitle
If Reporter.RunStatus = micFail Then
Reporter.ReportEvent micFail, Environment("ActionName") & "执行出错"
Qtp_capture(strLogFolderPath)
ExitTest
End If
Case "信息编辑员"
LoadAndRunAction strTestModulePath, "稿纸页面", oneIteration, strTitle, strNextStep, strAttachmentPath
If Reporter.RunStatus = micFail Then
Reporter.ReportEvent micFail, Environment("ActionName") & "执行出错"
Qtp_capture(strLogFolderPath)
ExitTest
Else
Reporter.ReportEvent micPass, Environment("TestName") & "执行通过"
ExitTest
End If
End Select
Else
Exit For
End If
Next
2、功能模块,例如:信息拟稿
脚本代码(部分):
代码语言:javascript复制strTestCaseName = Parameter("strTestCaseName")
strName = Parameter("strName")
strNextStep = Parameter("strNextStep")
strAttachmentPath = Parameter("strAttachmentPath")
Browser("Test").Page("Test").webElement("信息拟稿").Click
RunAction "信息拟稿页面", oneIteration, strTestCaseName, strName, strTitle
Parameter("strTitle") = strTitle
Browser("Test").CloseAllTabs
3、公共方法,例如:PublicFunction
脚本代码:
代码语言:javascript复制'**********************************************
'Description: 生成错误日志
Function Qtp_Capture(strLogFolderPath)
Dim strFolderPath, strdate
Dim strHour
Dim strMinute
Dim strSecond
Dim strTime
Dim strFile1
Dim strFile2
strTime = time()
strHour = Hour(strTime)
strMinute = Minute(strTime)
strSecond = Second(strTime)
strTime = Cstr(strHour) & "时" & Cstr(strMinute) & "分" & Cstr(strSecond) & "秒"
Set fso = CreateObject("SCripting.FileSystemObject")
strFolderPath = Trim(strLogFolderPath & "")
strdate = FormatDateTime(date(), 1)
Dim strDesFolder
strDesFolder = Cstr(strFolderPath) Cstr(strdate)
If fso.FolderExists(strDesFolder) Then
strFile1 = Cstr(strDesFolder) & "" & Environment("TestName") & "-" & Cstr(strTime)
Desktop.CaptureBitmap strFile1 & ".bmp", true
Else
fso.CreateFolder(strDesFolder)
strFile2 = Cstr(strDesFolder) & "" & Environment("TestName") & "-" & Cstr(strTime)
Desktop.CaptureBitmap strFile2 & ".bmp", true
End If
End Function
'**********************************************
'Description: 往EXCEL表中写数据
Function WriteFile(sFileName,SheetNum,x,y,Content)
Set xlsObj=CreateObject("Excel.Application")
Set xlsBook=xlsObj.Workbooks.Open(sFileName)
Set xlsSheet=xlsBook.Sheets(SheetNum)
xlsSheet.cells(x,y) = Content
xlsBook.Save
xlsBook.Close
Set xlsSheet = Nothing
Set xlsBook = Nothing
Set xlsObj = Nothing
End Function
'**********************************************
'Description: 读取EXCEL表中的数据
Function ReadFile(sFileName,sSheetName)
Dim oExcel
Dim oSheet
Dim oRange
Dim arrRange
On Error Resume Next '发生错误时 让程序继续执行下一句代码
Set oExcel = CreateObject("Excel.Application") '创建Excel应用程序对象
If err.Number <> 0 Then
MsgBox "未能初始化Excel" & vbCrLf & "请确保Excel已安装", vbCritical
Exit Function
End If
On Error Goto 0 '禁止当前过程中任何已启动的错误处理程序也就是关闭错误处理功能
On Error Resume Next
oExcel.Workbooks.Open(sFileName) '打开Excel文件
If err.Number <> 0 Then
MsgBox "未能加载Excel文件" & vbCrLf & "请确保Excel文件路径正确或格式正确", vbCritical
Exit Function
End If
On Error Goto 0
Set oSheet = oExcel.Worksheets(sSheetName).UsedRange '获取表格的使用范围
Set oRange = oSheet.Range("A1:Z1000") '获取从A列到Z列,从第1行到第1000行的范围i中的所有值
arrRange = oRange.Value '把Excel数据转换到数组
oExcel.WorkBooks.Item(1).Close '关闭工作簿
oExcel.Quit '退出Excel
ReadFile = arrRange '返回包含Excel数据的数组
Set oRange = Nothing
Set oSheet = Nothing
Set oExcel = Nothing
End Function
'***************************************************************************
'function:新建行
'methods:InsertRow Environment("TestDir") "datadatatable.xls","sheet1",1
'这个是插入新行的 一般情况下是用在写数据不重复的时候 会先新插入一行然后再往里面写数据
'***************************************************************************
Function InsertRow(sFileName,SheetNum,x)
Set xlsObj=createobject("Excel.Application")
Set xlsBook=xlsObj.WorkBooks.Open(sFileName)
Set xlsSheet=xlsBook.Sheets(SheetNum)
xlsSheet.Rows(x).Insert
xlsBook.Save
xlsBook.Close
Set xlsSheet = Nothing
Set xlsBook = Nothing
Set xlsObj = Nothing
End Function
''读写数据的时候,大部分是主要变更行值,比如你做循环操作的时候,写循环,那个保持变化的就是行值,比如你在第5行开始数据读写,那for就从5开始,列值保持不变
'For s = 5 to 7' 这个s就是循环的起始值
' '讲数据写入ActualData.xlsx---实际数据表
' WriteFile "D:Test自动化测试框架1ActualData.xls","Sheet1",s,2,"a"
' WriteFile "D:Test自动化测试框架1ActualData.xls","Sheet1",s,3,"b"
' WriteFile "D:Test自动化测试框架1ActualData.xls","Sheet1",s,4,"c"
' WriteFile "D:Test自动化测试框架1ActualData.xls","Sheet1",s,5,"d"
' WriteFile "D:Test自动化测试框架1ActualData.xls","Sheet1",s,6,"e"
'Next
'
''写数据到EXCEL中
'aa = "123"
'result_p = "结果"
'WriteFile "D:Test自动化测试框架1ActualData.xls","Sheet1",1,2,aa
'WriteFile "D:Test自动化测试框架1ActualData.xls","Sheet1",1,4,result_p
'
''读取EXCEL表中的数据
'arrRange = ReadFile("D:Test自动化测试框架1ActualData.xls","Sheet1")
'name = arrRange(1,2)
'Msgbox name
'
''新建行(sFileName, SheetNum, x)
'InsertRow "D:Test自动化测试框架1ActualData.xls","Sheet1",1