Web页面功能自动化测试.docx
- 文档编号:5245983
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:32
- 大小:745.85KB
Web页面功能自动化测试.docx
《Web页面功能自动化测试.docx》由会员分享,可在线阅读,更多相关《Web页面功能自动化测试.docx(32页珍藏版)》请在冰豆网上搜索。
Web页面功能自动化测试
Web页面功能自动化测试
使用QTP进行Web页面自动化测试
案例分析–Discuz!
NT自动化测试
安装和配置Discuze!
NT
登录功能的测试
在Discuz论坛的首页面可以进行录制操作,如图所示:
用QTP录制的登录、退出脚本如下所示:
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebEdit("username").Click
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebEdit("username").Set"chennengji"
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebEdit("password").SetSecure"4b9f7c4409ed1976092d0fcecf136fdd301b"
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebButton("登录").Click
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").Link("退出").Click
可以看到密码设置是用的SetSecure方法,这个方法需要设置密文,不利于修改和参数化,应该改为用Set,另外,由于登录后有中转页面,不能马上“退出”,需要加入延时,调整后的脚本:
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebEdit("username").Click
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebEdit("username").Set"chennengji"
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebEdit("password").Set"123456"
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebButton("登录").Click
Wait5'由于登录后有中转页面,不能马上“退出”,需要加入延时
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").Link("退出").Click
对于等待重定向页面的处理,可以加入等待延时,也可以直接点击链接让浏览器转向,下面是重新录制并调整后的脚本(把点击链接让浏览器转向的过程录制下来):
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebEdit("username").Click
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebEdit("username").Set"chennengji"
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebEdit("password").Set"123456"
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebButton("登录").Click
Browser("Discuz!
NTASP.net|论坛-").Page("用户登录-Discuz!
NTASP.net|论坛").Link("如果浏览器没有转向,请点击这里.").Click
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").Link("退出").Click
Browser("Discuz!
NTASP.net|论坛-").Page("用户退出-Discuz!
NTASP.net|论坛").Link("如果浏览器没有转向,请点击这里.").Click
当然,这样的脚本还不够健壮,而且也没有完成登录功能的验证,需要加入检查点:
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebEdit("username").Click
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebEdit("username").Set"chennengji"
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebEdit("password").Set"123456"
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebButton("登录").Click
IfBrowser("Discuz!
NTASP.net|论坛-").Page("用户登录-Discuz!
NTASP.net|论坛").Link("如果浏览器没有转向,请点击这里.").Exist(5)Then
Browser("Discuz!
NTASP.net|论坛-").Page("用户登录-Discuz!
NTASP.net|论坛").Link("如果浏览器没有转向,请点击这里.").Click
Else
Reporter.ReportEventmicWarning,"对象不存在","Link对象不存在!
"
EndIf
'插入检查点,检查是否登录成功
IfBrowser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebElement("chennengji").Exist(5)Then
IfBrowser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebElement("chennengji").GetROProperty("innerText")="chennengji"Then
Reporter.ReportEventmicPass,"检查登录是否成功","Pass!
"
'退出
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").Link("退出").Click
Browser("Discuz!
NTASP.net|论坛-").Page("用户退出-Discuz!
NTASP.net|论坛").Link("如果浏览器没有转向,请点击这里.").Click
Else
Reporter.ReportEventmicFail,"检查登录是否成功","Fail!
"
EndIf
Else
Reporter.ReportEventmicFail,"对象不存在","WebElement对象不存在!
"
EndIf
在脚本中,加入了登录后的页面检查,通过检查“如果浏览器没有转向,请点击这里.”这个链接是否存在(Exist),来判断是否去到了重定向等待页面。
后面,再插入检查点,检查是否登录成功,通过GetROProperty获取登录后页面中的用户名这个WebElement对象(如图所示)的“innerText”属性的值,判断是否等于登录输入的用户名。
这样就相对完整地实现了登录功能的测试脚本设计。
*注:
这里也可以用QTP的检查点(CheckPoint)来检查登录是否成功,但是QTP的CheckPoint需要在录制过程中插入,而且缺乏灵活性,不易于后期修改。
参数化登录功能的脚本
前面实现了一个基本的登录功能的脚本设计,但是还存在很多问题,其中一个就是登录用户名和密码这些测试数据都是写死在脚本中的测试步骤,不利于后期维护脚本,为此,需要对脚本进行参数化更改:
DimUserName
DimPassWord
UserName="chennengji"
PassWord="123456"
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebEdit("username").Click
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebEdit("username").SetUserName
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebEdit("password").SetPassWord
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebButton("登录").Click
IfBrowser("Discuz!
NTASP.net|论坛-").Page("用户登录-Discuz!
NTASP.net|论坛").Link("如果浏览器没有转向,请点击这里.").Exist(5)Then
Browser("Discuz!
NTASP.net|论坛-").Page("用户登录-Discuz!
NTASP.net|论坛").Link("如果浏览器没有转向,请点击这里.").Click
Else
Reporter.ReportEventmicWarning,"对象不存在","Link对象不存在!
"
EndIf
'插入检查点,检查是否登录成功
IfBrowser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebElement("chennengji").Exist(5)Then
IfBrowser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebElement("chennengji").GetROProperty("innerText")=UserNameThen
Reporter.ReportEventmicPass,"检查登录是否成功","Pass!
"
'退出
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").Link("退出").Click
Browser("Discuz!
NTASP.net|论坛-").Page("用户退出-Discuz!
NTASP.net|论坛").Link("如果浏览器没有转向,请点击这里.").Click
Else
Reporter.ReportEventmicFail,"检查登录是否成功","Fail!
"
EndIf
Else
Reporter.ReportEventmicFail,"对象不存在","WebElement对象不存在!
"
EndIf
脚本中,把使用到用户名和密码的测试步骤中的数据都替换成用最前面定义的变量UserName和PassWord,这样,如果下次运行需要更改登录账号,只需要修改代码前面的数据即可。
*注意,这种用变量进行参数化的做法不是最好的,也不是最终的做法,后面我们还会回来修改,让脚本的测试数据与脚本测试步骤分离开来。
模块化脚本设计
再来分析一下我们的登录脚本,我们会发现,这个简单的登录功能的测试还不够理想,例如,我们需要预先打开浏览器,导航到Discuz的主页面,这样登录功能的脚本才能正确执行。
为此,我们应该再添加启动浏览器、导航等脚本:
StartNewBrowser
NavigateTo
Login
CloseBrowser
SubStartNewBrowser
SystemUtil.Run"Iexplore.exe"
EndSub
SubNavigateTo
Browser("Discuz!
NTASP.net|论坛-").Navigate"http:
//127.0.0.1:
88/dnt3/index.aspx"
EndSub
SubLogin
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebEdit("username").Click
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebEdit("username").Set"chennengji"
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebEdit("password").Set"123456"
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebButton("登录").Click
IfBrowser("Discuz!
NTASP.net|论坛-").Page("用户登录-Discuz!
NTASP.net|论坛").Link("如果浏览器没有转向,请点击这里.").Exist(5)Then
Browser("Discuz!
NTASP.net|论坛-").Page("用户登录-Discuz!
NTASP.net|论坛").Link("如果浏览器没有转向,请点击这里.").Click
Else
Reporter.ReportEventmicWarning,"对象不存在","Link对象不存在!
"
EndIf
'插入检查点,检查是否登录成功
IfBrowser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebElement("chennengji").Exist(5)Then
IfBrowser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebElement("chennengji").GetROProperty("innerText")="chennengji"Then
Reporter.ReportEventmicPass,"检查登录是否成功","Pass!
"
'退出
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").Link("退出").Click
Browser("Discuz!
NTASP.net|论坛-").Page("用户退出-Discuz!
NTASP.net|论坛").Link("如果浏览器没有转向,请点击这里.").Click
Else
Reporter.ReportEventmicFail,"检查登录是否成功","Fail!
"
EndIf
Else
Reporter.ReportEventmicFail,"对象不存在","WebElement对象不存在!
"
EndIf
EndSub
SubCloseBrowser
Browser("Discuz!
NTASP.net|论坛-").Close
EndSub
这次调整的脚本中,用VBScript的Sub过程来封装一个个的操作,例如启动浏览器(StartNewBrowser)、导航到指定页面(NavigateTo)、执行登录操作(Login)、关闭浏览器(CloseBrowser),这样的脚本设计遵循了分而治之的思想,把相对独立的过程分开编写脚本,最后统一调用,有利于降低脚本维护难度,代码的可读性也增强了。
模块化脚本设计–使用Action
QTP为模块化脚本设计提供了Action机制,可以把相对独立的测试操作放在一个个Action中,再由一个统一的Action来调用。
对于前面的模块化脚本,我们可以调整成用Action实现:
1、新建一个Action,命名为“StartNewBrowser”,在这个新建的Action中写如下脚本:
StartNewBrowser
SubStartNewBrowser
SystemUtil.Run"Iexplore.exe"
EndSub
2、新建Action“NavigateTo”,脚本如下:
NavigateTo
SubNavigateTo
Browser("Discuz!
NTASP.net|论坛-").Navigate"http:
//127.0.0.1:
88/dnt3/index.aspx"
EndSub
3、新建Action“Login”,脚本如下:
Login
SubLogin
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebEdit("username").Click
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebEdit("username").Set"chennengji"
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebEdit("password").Set"123456"
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebButton("登录").Click
IfBrowser("Discuz!
NTASP.net|论坛-").Page("用户登录-Discuz!
NTASP.net|论坛").Link("如果浏览器没有转向,请点击这里.").Exist(5)Then
Browser("Discuz!
NTASP.net|论坛-").Page("用户登录-Discuz!
NTASP.net|论坛").Link("如果浏览器没有转向,请点击这里.").Click
Else
Reporter.ReportEventmicWarning,"对象不存在","Link对象不存在!
"
EndIf
'插入检查点,检查是否登录成功
IfBrowser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebElement("chennengji").Exist(5)Then
IfBrowser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").WebElement("chennengji").GetROProperty("innerText")="chennengji"Then
Reporter.ReportEventmicPass,"检查登录是否成功","Pass!
"
'退出
Browser("Discuz!
NTASP.net|论坛-").Page("Discuz!
NTASP.net|论坛-").Link("退出").Click
Browser("Discuz!
NTASP.net|论坛-").Page("用户退出-Discuz!
NTASP.net|论坛").Link("如果浏览器没有转向,请点击这里.").Click
Else
Reporter.ReportEventmicFail,"检查登录是否成功","Fail!
"
EndIf
Else
Reporter.ReportEventmicFail,"对象不存在","WebElement对象不存在!
"
EndIf
EndSub
4、新建Action“CloseBrowser”,脚本如下:
CloseBrowser
SubCloseBrowser
Browser("Discuz!
NTASP.net|论坛-").Close
EndSub
5、最后,新建一个名为“Main”的Action,在这个Action中按顺序插入对其他Action的调用:
RunAction"StartNewBrowser",oneIteration
RunAction"NavigateTo",oneIteration
RunAction"Login",oneIteration
RunAction"CloseBrowser",oneIteration
最后在“TestFlow”视图中可以看到形成如图所示的测试流程:
QTP10中支持动态调用Action,因此也可以写成:
LoadAndRunActionEnvironment.Value("TestDir"),"StartNewBrowser",oneIteration
LoadAndRunActionEnvironment.Value("TestDir"),"NavigateTo",oneIteration
LoadAndRunActionEnvironment.Value("TestDir"),"Login",oneIteration
LoadAndRunActionEnvironment.Value("TestDir"),"CloseBrowser",oneIteration
其中使用了QTP的内置环境变量"TestDir"来获取当前测试脚本的目录。
使用QTP环境变量进行脚本参数化
前面提到使用QTP的内置环境变量,实际上QTP除了有内置环境变量还,还提供用户自定义环境变量(File–>Settings–>Environment),如图所示:
我们可以分析一下脚本中使用到的测试数据,定义一些全局的变量,例如页面地址、登录账号等。
还可以把这些环境变量导出到外部XML文件,或者从外部XML文件加载环境变量。
接下来需要对脚本做一些调整,用环境变量来替代某些测试数据:
1、在StartNewBrows
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Web 页面 功能 自动化 测试