Web页面功能自动化测试.docx

上传人:b****6 文档编号:5245983 上传时间:2022-12-14 格式:DOCX 页数:32 大小:745.85KB
下载 相关 举报
Web页面功能自动化测试.docx_第1页
第1页 / 共32页
Web页面功能自动化测试.docx_第2页
第2页 / 共32页
Web页面功能自动化测试.docx_第3页
第3页 / 共32页
Web页面功能自动化测试.docx_第4页
第4页 / 共32页
Web页面功能自动化测试.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

Web页面功能自动化测试.docx

《Web页面功能自动化测试.docx》由会员分享,可在线阅读,更多相关《Web页面功能自动化测试.docx(32页珍藏版)》请在冰豆网上搜索。

Web页面功能自动化测试.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1