一、文件目录位置分开 不同目录放置不同内容: case目录:放置测试用例。 Fucation目录:放置经常调用的库函数。 common目录:放置所测试系统的主函数,和利用描述述编程生成的对象库。 001login目录:放置QTP脚本自动生成的相关文件 data目录:放置测试数据,该数据与测试用例中需要数据驱动的项进行对照 capture目录:放置当系统出现错误时的截图 二、测试用例 将用例进行一定的整理,把数据驱动部分归纳为一个连续,并把实际结果做一个excel的数据有效性判断,即pass为绿色,fail为红色,具体用例如:
三、用例对应数据 对照数据驱动部分用例生成相关数据,增加期望值用于判断,并把实际结果做一个excel的数据有效性判断,即pass为绿色,fail为红色,具体示例如:
四、脚本过程 A、初始操作,可把这一部分写进common中 调用外部组件: 如:fucationPath="F:\qtptest\fucation\fucations.vbs" '函数组件 ExecuteFile fucationPath 定义case、data、capture位于系统的位置: 如:casePath="F:\qtptest\case\loginCase.xls" '用例位置 dataPath="F:\qtptest\data\001login.xls" '数据放置的位置 capturePath="F:\qtptest\Capture\" '截图放置的位置 调用初始函数: 如: CloseIE() '调用组件中的CloseIE(),结束IE进程 CloseExcel() '调用组件中的CloseExcel(),结束Excel进程 QTP_Small() '让QTP最小化运行
B、主体脚本过程,此处可使用描述性编程来书写,如使用描述性编程,需从common文件中调用相关的对象库(描述性编程) 确定录制的主体过程,此过程我是通过录制实现的,此处代码为测试脚本的主体部分提供基础代码,即为C部分(下方)的扩展操作提供基础代码。 如: ‘起动浏览器,进入系统登录界面 '打开IE wqs592452,在不同的机器上需要更改一下 SystemUtil.Run "C:\Program Files\Internet Explorer\iexplore.exe","","C:\Documents and Settings\wqs592452","open" Browser("Browser").Navigatehttp://10.9.146.182:8080/index.asp ‘点击登录链接 Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click ‘执行登录操作 Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("uname").Set “123” Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("pwd").Set “123456” Browser("Browser").Page("在线考试系统").Frame("main").WebButton("登 录").Click '返回登录界面,执行下一轮数据的操作 Browser("Browser").Page("在线考试系统").Frame("top").Link("【注销登录】").Click Browser("Browser").Dialog("Microsoft Internet Explorer").WinButton("确定").Click Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click C、按照case修改脚本,主要调用库函数中的写入Excel单元格的函数Write_Excel(pathway,sheetname,x,y,content)读取单元格的函数ReadExcelCell(file,sheet,x,y)以及截图函数Qtp_Capture,注意Qtp_Capture应在Write_Excel之前,否则截图时可能为读取Excel的界面 ‘点击登录链接 1、 '验证loginCase文档中login_001 Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click ‘如果登录后某对象存在,则case文件login_001 Pass,否则Fail,并截图 If Browser("Browser").Page("在线考试系统").Frame("main").WebButton("登 录").Exist Then '如果存在此对象,则将case中的actualresults置为pass Write_Excel casePath,"login",2,"D","Pass" Else '如果出现错误,则截图并保存到指定文件夹中 QTP_Capture capturePath,"login_001" '如果不存在此对象,则将case中的actualresults置为fail Write_Excel casePath,"login",2,"D","Fail" ‘出现错误后,说明错误的原因 Write_Excel casePath,"login",2,"E","登录系统链接失效" End If 2、'验证loginCase文档中login_002 ‘利用描述性编程,查看width in characters对象是否存在,并且为30 If Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("name:=uname","width in characters:=30").Exist then '如果存在此对象,则将case中的actualresults置为pass Write_Excel casePath,"login",3,"D","Pass" else '如果出现错误,则截图并保存到指定文件夹中 QTP_Capture capturePath,"login_002" '如果存在此对象,则将case中的actualresults置为fail Write_Excel casePath,"login",3,"D","Fail" ‘出现错误后,说明错误的原因 Write_Excel casePath,"login",3,"E","用户名输入框未设置为30位" end if 3、’验证loginCase文档中login_003 ‘利用描述性编程,查看width in characters对象是否存在,并且为30 If Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("name:=pwd","width in characters:=30").Exist then '如果存在此对象,则将case中的actualresults置为pass Write_Excel casePath,"login",3,"D","Pass" else '如果出现错误,则截图并保存到指定文件夹中 QTP_Capture capturePath,"login_002" '如果存在此对象,则将case中的actualresults置为fail Write_Excel casePath,"login",3,"D","Fail" ‘出现错误后,说明错误的原因 Write_Excel casePath,"login",3,"E","用户名输入框未设置为30位" end if
、’验证loginCase文档中login_004至login_009
For i=2 to 7 ‘读取data中,login的数据 Dim username,password,expected username=ReadExcelCell(dataPath, "login", i, 1) password=ReadExcelCell(dataPath, "login", i, 2) expected=ReadExcelCell(dataPath,"login",i,3) ‘执行登录操作,将读取到的username参数化给下面的数据 Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("username").Set username Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("pwd").Set password Browser("Browser").Page("在线考试系统").Frame("main").WebButton("登 录").Click ‘判断登录是否成功的文本字符 popok=Browser("Browser").Page("在线考试系统").Frame("left").WebElement("考生姓名:123状 态:已登录").Exist(3) popno=Browser("Browser").Page("在线考试系统").Frame("main_2").WebElement("操作失败").Exist(3) ‘依据期望结果进行判断 If expected="ok" Then If popok Then '将数据源中的期待结果写为pass Write_Excel dataPath,"login",i,"D","Pass" '将此结果在测试用例中进行体现 Write_Excel casePath,"login",i+3,"D","Pass" '返回登录界面,执行下一轮数据的操作 Browser("Browser").Page("在线考试系统").Frame("top").Link("【注销登录】").Click Browser("Browser").Dialog("Microsoft Internet Explorer").WinButton("确定").Click Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click else '如果出现错误,则截图并保存到指定文件夹中 QTP_Capture capturePath,"login_"&i+3 '将数据源中的期待结果写为fail Write_Excel dataPath,"login",i,"D","Fail" Write_Excel dataPath,"login",i,"E","正确用户名和密码登录失败" '将此结果在测试用例中进行体现 Write_Excel casePath,"login",i+3,"D","Fail" Write_Excel casePath,"login",i+3,"E","正确用户名和密码登录失败" '出错后,重新进入登录界面 Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click End If else If popno Then 'msgbox "no" '将数据源中的期待结果写为pass Write_Excel dataPath,"login",i,"D","Pass" '将此结果在测试用例中进行体现 Write_Excel casePath,"login",i+3,"D","Pass" ‘pass后返回登录界面,继续执行下一轮操作 Browser("Browser").Page("在线考试系统").Frame("main_2").WebButton("返回上一页").Click elseif popok then '如果出现错误,则截图并保存到指定文件夹中 QTP_Capture capturePath,"login_"&i+3 '将数据源中的期待结果写为fail Write_Excel dataPath,"login",i,"E","错误用户名或密码,登录成功" ' '将此结果在测试用例中进行体现 Write_Excel casePath,"login",i+3,"E","错误用户名或密码,登录成功" '返回登录界面,继续验证相关数据 Browser("Browser").Page("在线考试系统").Frame("top").Link("【注销登录】").Click Browser("Browser").Dialog("Microsoft Internet Explorer").WinButton("确定").Click Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click else '如果出现错误,则截图并保存到指定文件夹中 QTP_Capture capturePath,"login_"&i+3 '将数据源中的期待结果写为fail Write_Excel dataPath,"login",i,"D","Fail" Write_Excel dataPath,"login",i,"E","错误数据,但提示语不正确" '将此结果在测试用例中进行体现 Write_Excel casePath,"login",i+3,"D","Fail" Write_Excel casePath,"login",i+3,"E","错误数据,但提示语不正确" '出错后,重新进入登录界面 Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click End If End If Next D、执行脚本后,关闭网页和发送相关文档到相关人员的邮箱之中 '执行完之后,关闭网页 Browser("Browser").Close '执行完此模块的测试后,将测试结果发送到指定的邮件之中 Dim Body '邮件的内容 Dim sendto'收件人的地址 Dim subject '邮件主题 Body="Hi:"&vbCrLf&"此文件为本次自动化测试的Case结果。请查收!谢谢!"&vbCrLf&vbCrLf&"from qwen"&vbCrLf&Now() sendto="wen.qingshan@byd.com" subject=now()&"自动化测试的结果" SendMail sendto,subject, Body, casePath 一直以来不清楚大家是怎么去使用QTP测试的,甚至也不太清楚我这么去做是否能称得上算一个QTP的框架,不过我就是这样使用QTP去做测试的。最后,十分感谢您能够有耐心地看到这里,谢谢。 另外,不知道是不是因为51这个发表日志框将回车后剩余的空格也认成字符了, 一次发表所有内容老被截断,这点挺另人晕的. |
|