77范文网 - 专业文章范例文档资料分享平台

Web页面功能自动化测试

来源:网络收集 时间:2018-11-07 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

www.gdtesting.com 亿能测试技术 www.automationqa.com

Web页面功能自动化测试

使用QTP进行Web页面自动化测试 案例分析 – Discuz!NT自动化测试 安装和配置Discuze!NT 登录功能的测试

在Discuz论坛的首页面可以进行录制操作,如图所示:

用QTP录制的登录、退出脚本如下所示: Browser(\ASP.net|论坛 -\Browser(\ASP.net|论坛-\Browser(\ASP.net|论坛

-\-\-\

ASP.net|ASP.net|ASP.net|

论论论

坛 坛 坛

-\

Browser(\ASP.net|论坛 -\ASP.net|论坛 -\登录\

Browser(\.net|论坛 -\.net|论坛 -\退出\

www.gdtesting.com 亿能测试技术 www.automationqa.com

www.gdtesting.com 亿能测试技术 www.automationqa.com

可以看到密码设置是用的SetSecure方法,这个方法需要设置密文,不利于修改和参数化,应该改为用Set,另外,由于登录后有中转页面,不能马上“退出”,需要加入延时,调整后的脚本:

Browser(\ASP.net|论坛 -\ASP.net|论坛 -\Browser(\ASP.net|

-\-\

ASP.net|ASP.net|

论论

坛 坛

-\Browser(\ASP.net|论坛

-\

Browser(\ASP.net|论坛 -\ASP.net|论坛 -\登录\

Wait 5 ' 由于登录后有中转页面,不能马上“退出”,需要加入延时

Browser(\.net|论坛 -\.net|论坛 -\退出\

对于等待重定向页面的处理,可以加入等待延时,也可以直接点击链接让浏览器转向,下面是重新录制并调整后的脚本(把点击链接让浏览器转向的过程录制下来): Browser(\ASP.net|论坛 -\ASP.net|-\Browser(\ASP.net|

-\-\

ASP.net|ASP.net|

论论论

坛 坛 坛

-\Browser(\ASP.net|论坛

-\

Browser(\ASP.net|论坛 -\ASP.net|论坛 -\登录\

Browser(\.net|论坛 -\用户登录 - Discuz!NT ASP.net|论坛\如果浏览器没有转向, 请点击这里.\

Browser(\.net|论坛 -\.net|论坛 -\退出\Browser(\.net|论坛 -\用户退出 - Discuz!NT ASP.net|论坛\如果浏览器没有转向, 请点击这里.\

当然,这样的脚本还不够健壮,而且也没有完成登录功能的验证,需要加入检查点: Browser(\ASP.net|-\Browser(\ASP.net|

论论

坛坛

-\-\-\

ASP.net|ASP.net|ASP.net|

论论论

坛 坛 坛

-\Browser(\ASP.net|论坛

-\

Browser(\ASP.net|论坛 -\ASP.net|论坛 -\登录\

If Browser(\.net|论坛 -\用户登录 - Discuz!NT ASP.net|论坛\如果浏览器没有转向, 请点击这里.\ Browser(\.net|论坛 -\用户登录 - Discuz!NT ASP.net|论坛\

www.gdtesting.com 亿能测试技术 www.automationqa.com

www.gdtesting.com 亿能测试技术 www.automationqa.com

如果浏览器没有转向, 请点击这里.\

Else Reporter.ReportEvent micWarning,\对象不存在\对象不存在!\End If

' 插入检查点,检查是否登录成功 If

Browser(\

ASP.net|

-\

ASP.net|

-\ If Browser(\ASP.net|论坛 -\ASP.net|论坛 -\ Reporter.ReportEvent micPass,\检查登录是否成功\

' 退出

Browser(\ASP.net|论坛 -\ASP.net|论坛 -\退出

\ Browser(\ASP.net|论坛 -\用户退出 - Discuz!NT ASP.net|论坛\如果浏览器没有转向, 请点击这里.\

Else Reporter.ReportEvent micFail,\检查登录是否成功\

End If Else Reporter.ReportEvent micFail,\对象不存在\对象不存在!\

End If

在脚本中,加入了登录后的页面检查,通过检查“如果浏览器没有转向, 请点击这里.”这个链接是否存在(Exist),来判断是否去到了重定向等待页面。后面,再插入检查点,检查是否登录成功,通过GetROProperty获取登录后页面中的用户名这个WebElement对象(如图所示)的“innerText”属性的值,判断是否等于登录输入的用户名。这样就相对完整地实现了登录功能的测试脚本设计。

* 注:这里也可以用QTP的检查点(CheckPoint)来检查登录是否成功,但是QTP的CheckPoint需要在录制过程中插入,而且缺乏灵活性,不易于后期修改。

参数化登录功能的脚本

前面实现了一个基本的登录功能的脚本设计,但是还存在很多问题,其中一个就是登录用户名和密码这些测试数据都是写死在脚本中的测试步骤,不利于后期维护脚本,为此,需要对脚本进行参数化更改: Dim UserName Dim PassWord

UserName = \

www.gdtesting.com 亿能测试技术 www.automationqa.com

www.gdtesting.com 亿能测试技术 www.automationqa.com

PassWord = \

Browser(\

ASP.net|

论论

坛坛

-\-\-\

ASP.net|ASP.net|ASP.net|

论论论

坛 坛 坛

-\Browser(\ASP.net|

-\Browser(\ASP.net|论坛

-\

Browser(\ASP.net|论坛 -\ASP.net|论坛 -\登录\

If Browser(\.net|论坛 -\用户登录 - Discuz!NT ASP.net|论坛\如果浏览器没有转向, 请点击这里.\ Browser(\.net|论坛 -\用户登录 - Discuz!NT ASP.net|论坛\如果浏览器没有转向, 请点击这里.\

Else Reporter.ReportEvent micWarning,\对象不存在\对象不存在!\End If

' 插入检查点,检查是否登录成功 If

Browser(\

ASP.net|

-\-\

ASP.net|

-\ If Browser(\ASP.net|论坛

ASP.net|论坛

-\ Reporter.ReportEvent micPass,\检查登录是否成功\ ' 退出

Browser(\ASP.net|论坛 -\ASP.net|论坛 -\退出

\ Browser(\ASP.net|论坛 -\用户退出 - Discuz!NT ASP.net|论坛\如果浏览器没有转向, 请点击这里.\

Else Reporter.ReportEvent micFail,\检查登录是否成功\End If

Else Reporter.ReportEvent micFail,\对象不存在\对象不存在!\

End If

脚本中,把使用到用户名和密码的测试步骤中的数据都替换成用最前面定义的变量UserName和PassWord,这样,如果下次运行需要更改登录账号,只需要修改代码前面的数据即可。

* 注意,这种用变量进行参数化的做法不是最好的,也不是最终的做法,后面我们还会回来修改,让脚本的测试数据与脚本测试步骤分离开来。

www.gdtesting.com 亿能测试技术 www.automationqa.com

www.gdtesting.com 亿能测试技术 www.automationqa.com

模块化脚本设计

再来分析一下我们的登录脚本,我们会发现,这个简单的登录功能的测试还不够理想,例如,我们需要预先打开浏览器,导航到Discuz的主页面,这样登录功能的脚本才能正确执行。为此,我们应该再添加启动浏览器、导航等脚本: StartNewBrowser NavigateTo Login

CloseBrowser

Sub StartNewBrowser

SystemUtil.Run \End Sub

Sub NavigateTo

Browser(\.net|论坛 -\End Sub

Sub Login Browser(\

ASP.net|

论论

坛坛坛

-\-\-\

ASP.net|ASP.net|ASP.net|

论论论

坛 坛 坛

-\ Browser(\ASP.net|

-\ Browser(\ASP.net|论

-\ Browser(\ASP.net|论坛 -\ASP.net|论坛 -\登录\

If Browser(\ASP.net|论坛 -\用户登录 - Discuz!NT ASP.net|论坛

\如果浏览器没有转向, 请点击这里.\ Browser(\ASP.net|论坛 -\用户登录 - Discuz!NT ASP.net|论坛\如果浏览器没有转向, 请点击这里.\

Else Reporter.ReportEvent micWarning,\对象不存在\对象不存在!\End If

' 插入检查点,检查是否登录成功

If Browser(\ASP.net|论坛

-\ASP.net|论坛

-\ If Browser(\ASP.net|论坛 -\ASP.net|论坛 -\ Reporter.ReportEvent micPass,\检查登录是否成功\ ' 退出

Browser(\ASP.net|论坛 -\ASP.net|论坛 -\

www.gdtesting.com 亿能测试技术 www.automationqa.com

www.gdtesting.com 亿能测试技术 www.automationqa.com

退出\

Browser(\ASP.net|论坛 -\用户退出 - Discuz!NT ASP.net|论坛\如果浏览器没有转向, 请点击这里.\

Else Reporter.ReportEvent micFail,\检查登录是否成功\End If

Else Reporter.ReportEvent micFail,\对象不存在\对象不存在!\End If

End Sub

Sub CloseBrowser Browser(\.net|论坛 -\End Sub

这次调整的脚本中,用VBScript的Sub过程来封装一个个的操作,例如启动浏览器(StartNewBrowser)、导航到指定页面(NavigateTo)、执行登录操作(Login)、关闭浏览器(CloseBrowser),这样的脚本设计遵循了分而治之的思想,把相对独立的过程分开编写脚本,最后统一调用,有利于降低脚本维护难度,代码的可读性也增强了。

模块化脚本设计 – 使用Action

QTP为模块化脚本设计提供了Action机制,可以把相对独立的测试操作放在一个个Action中,再由一个统一的Action来调用。对于前面的模块化脚本,我们可以调整成用Action实现:

1、新建一个Action,命名为“StartNewBrowser”,在这个新建的Action中写如下脚本: StartNewBrowser Sub StartNewBrowser

SystemUtil.Run \End Sub

2、新建Action“NavigateTo”,脚本如下: NavigateTo

Sub NavigateTo

Browser(\.net|论坛 -\End Sub

3、新建Action“Login”,脚本如下: Login

Sub Login Browser(\

ASP.net|

论论

坛坛

-\-\

ASP.net|ASP.net|

论论

坛 坛

-\ Browser(\ASP.net|

-\

www.gdtesting.com 亿能测试技术 www.automationqa.com

www.gdtesting.com 亿能测试技术 www.automationqa.com

Browser(\ASP.net|论坛 -\ASP.net|论坛

-\ Browser(\ASP.net|论坛 -\ASP.net|论坛 -\登录\

If Browser(\ASP.net|论坛 -\用户登录 - Discuz!NT ASP.net|论坛\如果浏览器没有转向, 请点击这里.\

Browser(\ASP.net|论坛 -\用户登录 - Discuz!NT ASP.net|论坛\如果浏览器没有转向, 请点击这里.\

Else Reporter.ReportEvent micWarning,\对象不存在\对象不存在!\End If

' 插入检查点,检查是否登录成功

If Browser(\ASP.net|论坛

-\ASP.net|论坛

-\ If Browser(\ASP.net|论坛 -\ASP.net|论坛 -\ Reporter.ReportEvent micPass,\检查登录是否成功\ ' 退出

Browser(\ASP.net|论坛 -\ASP.net|论坛 -\退出\

Browser(\ASP.net|论坛 -\用户退出 - Discuz!NT ASP.net|论坛\如果浏览器没有转向, 请点击这里.\

Else Reporter.ReportEvent micFail,\检查登录是否成功\

End If Else Reporter.ReportEvent micFail,\对象不存在\对象不存在!\

End If End Sub

4、新建Action“CloseBrowser”,脚本如下: CloseBrowser Sub CloseBrowser Browser(\.net|论坛 -\End Sub

5、最后,新建一个名为“Main”的Action,在这个Action中按顺序插入对其他Action的调用:

RunAction \RunAction \

RunAction \

RunAction \

最后在“Test Flow”视图中可以看到形成如图所示的测试流程:

www.gdtesting.com 亿能测试技术 www.automationqa.com

www.gdtesting.com 亿能测试技术 www.automationqa.com

QTP10中支持动态调用Action,因此也可以写成: LoadAndRunAction Environment.Value(\LoadAndRunAction Environment.Value(\ LoadAndRunAction Environment.Value(\LoadAndRunAction Environment.Value(\其中使用了QTP的内置环境变量\来获取当前测试脚本的目录。

使用QTP环境变量进行脚本参数化

前面提到使用QTP的内置环境变量,实际上QTP除了有内置环境变量还,还提供用户自定义环境变量(File –> Settings –> Environment),如图所示:

我们可以分析一下脚本中使用到的测试数据,定义一些全局的变量,例如页面地址、登录账号等。还可以把这些环境变量导出到外部XML文件,或者从外部XML文件加载环境变量。 接下来需要对脚本做一些调整,用环境变量来替代某些测试数据:

1、在StartNewBrowser这个Action中,把浏览器应用程序名替换成从环境变量读取: StartNewBrowser Environment.Value(\Sub StartNewBrowser( browserApp )

SystemUtil.Run browserApp End Sub

这样,如果下次测试需要在其他浏览器进行,只需要修改环境变量即可

www.gdtesting.com 亿能测试技术 www.automationqa.com

www.gdtesting.com 亿能测试技术 www.automationqa.com

2、在NavigateTo这个Action中,把访问论坛的首页地址替换成从环境变量读取: NavigateTo Environment.Value( \Sub NavigateTo( url )

Browser(\.net|论坛 -\

End Sub

这样,如果下次测试的是部署在另外一个地址的Discuz论坛,只需要修改环境变量即可。

3、修改Login这个Action中的脚本,把测试步骤中使用的登录用户名和密码改成从环境变量读取:

Login Environment.Value(\alue(\

Sub Login( UserName, PassWord ) Browser(\ASP.net|-\ Browser(\ASP.net|

论论

坛坛坛

-\-\-\

ASP.net|ASP.net|ASP.net|

论论论

坛 坛 坛

-\ Browser(\ASP.net|论

-\ Browser(\ASP.net|论坛 -\ASP.net|论坛 -\登录\

If Browser(\ASP.net|论坛 -\用户登录 - Discuz!NT ASP.net|论坛\如果浏览器没有转向, 请点击这里.\ Browser(\ASP.net|论坛 -\用户登录 - Discuz!NT ASP.net|论坛\如果浏览器没有转向, 请点击这里.\

Else Reporter.ReportEvent micWarning,\对象不存在\对象不存在!\End If

' 插入检查点,检查是否登录成功

If Browser(\ASP.net|论坛

-\ASP.net|论坛

-\ If Browser(\ASP.net|论坛 -\ASP.net|论坛 -\ Reporter.ReportEvent micPass,\检查登录是否成功\

' 退出

Browser(\ASP.net|论坛 -\ASP.net|论坛 -\

退出\

Browser(\ASP.net|论坛 -\用户退出 - Discuz!NT ASP.net|论坛\如果浏览器没有转向, 请点击这里.\

Else Reporter.ReportEvent micFail,\检查登录是否成功\

End If Else Reporter.ReportEvent micFail,\对象不存在\对象不存在!\

www.gdtesting.com 亿能测试技术 www.automationqa.com

www.gdtesting.com 亿能测试技术 www.automationqa.com

End If

End Sub

4、最后修改一下Main这个Action的脚本。

我们把环境变量导出到文件,存在测试脚本中的Configs目录下,命名为“Config.xml”,导出的XML文件内容如下:

HomePageURL

http://127.0.0.1:88/dnt3/index.aspx

LoginPassWord 123456

LoginUserName chennengji

browser

Iexplore.exe

这样,在Main这个Action的脚本中,只需要调用Environment对象的LoadFromFile来动态加载配置文件即可:

EnvFile = Environment.Value(\fileName = Environment.ExternalFileName If (fileName = \

Environment.LoadFromFile(EnvFile) End If

' Msgbox Environment.Value(\ Main

Sub Main

LoadAndRunAction Environment.Value(\LoadAndRunAction Environment.Value(\ LoadAndRunAction Environment.Value(\ LoadAndRunAction Environment.Value(\

End Sub

由于环境变量的配置文件是在脚本中动态加载的,因此,可以编写多个配置文件用于准备不

www.gdtesting.com 亿能测试技术 www.automationqa.com

www.gdtesting.com 亿能测试技术 www.automationqa.com

同类型或用途的测试之用。或者在测试执行之前修改好配置文件中的测试数据即可。

用函数返回值控制测试流程

前面我们用了模块化的思想把相对独立的测试步骤分隔到不同的Action中,这样的脚本还存在不够完善的地方,例如启动浏览器这个脚本,我们没有判断是否启动成功,如果启动浏览器失败了,那么后续的脚本实际上是不应该执行的,执行的话也会导致失败。

为此,我们需要把Sub改成Function,用函数返回一个值,用于判断浏览器是否启动成功了(注意Sub是不能返回值的),修改后的StartNewBrowser的脚本如下所示: Function StartNewBrowser( browserApp ) SystemUtil.Run browserApp

StartNewBrowser = Browser(\End Function

脚本中的函数StartNewBrowser中用了QTP的描述性编程,通过IE浏览器对象的Exist来判断是否启动了浏览器,然后返回(通过给函数名赋值的方式)。这只是第一步,由于StartNewBrowser这个Action需要在Main这个Action中调用,因此Main需要调用StartNewBrowser这个Action,StartNewBrowser应该返回一个值,让Main知道浏览器是否启动了,从而决定是否继续测试:

LoadAndRunAction

Environment.Value(\ If isBrowserOpened=True Then ' 如果浏览器打开了,则继续测试

因此,需要在StartNewBrowser这个Action中定义一个输出参数(Output parameters),如图所示:

在StartNewBrowser这个Action的脚本中,把浏览器是否成功启动的标记赋值给输出参数“BrowserOpened”:

If StartNewBrowser (Environment.Value(\ True Then Parameter(\End If

www.gdtesting.com 亿能测试技术 www.automationqa.com

www.gdtesting.com 亿能测试技术 www.automationqa.com

Function StartNewBrowser( browserApp )

SystemUtil.Run browserApp StartNewBrowser = Browser(\End Function

类似地,把NavigateTo这个Action修改一下,定义一个输出参数“PageOpened”,脚本修改成:

Parameter(\alue( \

Function NavigateTo( url )

Browser(\.net|论坛 -\

NavigateTo = Browser(\ASP.net|论坛 -\ASP.net|论坛 -\End Function

再把Login的脚本修改一下,定义两个输入参数UserName和PassWord,一个输出参数“LoginPassed”用于返回是否登录成功,脚本修改如下:

'Parameter(\= ( Environment.Value(\alue(\Parameter(\

Function Login( UserName, PassWord ) Login = True Browser(\ASP.net|论-\ Browser(\ASP.net|

Login

坛坛坛

-\-\-\

ASP.net|ASP.net|ASP.net|

论论论

坛 坛 坛

-\ Browser(\ASP.net|论

-\ Browser(\ASP.net|论坛 -\ASP.net|论坛 -\登录\

If Browser(\ASP.net|论坛 -\用户登录 - Discuz!NT ASP.net|论坛\如果浏览器没有转向, 请点击这里.\

Browser(\ASP.net|论坛 -\用户登录 - Discuz!NT ASP.net|论坛\如果浏览器没有转向, 请点击这里.\

Else Reporter.ReportEvent micWarning,\对象不存在\对象不存在!\End If

' 插入检查点,检查是否登录成功

If Browser(\ASP.net|论坛 -\ASP.net|论坛

-\ If Browser(\ASP.net|论坛 -\ASP.net|论坛 -\

www.gdtesting.com 亿能测试技术 www.automationqa.com

www.gdtesting.com 亿能测试技术 www.automationqa.com

Reporter.ReportEvent micPass,\检查登录是否成功\

' 退出 Browser(\ASP.net|论坛 -\ASP.net|论坛 -\退出\ Browser(\ASP.net|论坛 -\用户退出 - Discuz!NT ASP.net|论坛\如果浏览器没有转向, 请点击这里.\

Else Reporter.ReportEvent micFail,\检查登录是否成功\ Login = False End If

Else Reporter.ReportEvent micFail,\对象不存在\对象不存在!\ Login = False End If

End Function

CloseBrowser这个Action的脚本也可适当修改,返回一个值用于判断浏览器是否正确关闭了:

' 通过ExitAction返回值 If CloseBrowser Then

ExitAction = \else ExitAction \End If

Function CloseBrowser Browser(\.net|论坛 -\

CloseBrowser = Browser(\.net|论坛 -\

End Function

在这里,没有用输出参数来实现,而是用来ExitAction来返回值,效果是一样的,但是调用的时候取返回值的方式不一样,见Main这个Action的脚本: EnvFile = Environment.Value(\fileName = Environment.ExternalFileName If (fileName = \

Environment.LoadFromFile(EnvFile) End If

Main

' 换一个配置文件再执行一次

EnvFile = Environment.Value(\Environment.LoadFromFile(EnvFile)

Main

www.gdtesting.com 亿能测试技术 www.automationqa.com

www.gdtesting.com 亿能测试技术 www.automationqa.com

Sub Main LoadAndRunAction Environment.Value(\ If isBrowserOpened=True Then ' 如果浏览器打开了,则继续测试

LoadAndRunAction

Environment.Value(\ If isPageOpened=True Then ' 如果主页打开了,则继续测试 username = Environment.Value(\

password = Environment.Value(\

LoadAndRunAction Environment.Value(%username,password ,isLoginPassed Print isLoginPassed '登录测试是否通过 isBrowserClosed = LoadAndRunAction ( Environment.Value(\浏览器是否关闭

Else

Reporter.ReportEvent micFail,\

Print isBrowserClosed

Else Reporter.ReportEvent micFail,\End If

End If End Sub

应用函数库结构框架思想

由于浏览器的启动、关闭和相关控制的脚本是经常使用的,可重用性很高,因此可以这些操作封装到函数中,写入VBS脚本文件中,例如: ' 启动IE浏览器

Function StartNewBrowser( browserApp )

SystemUtil.Run browserApp

StartNewBrowser = Browser(\

End Function

' 关闭IE浏览器

Function CloseBrowser Browser(\ CloseBrowser = Browser(\

End Function

然后就可以在QTP的Test中加入这个函数库文件(File -> Settings -> Resources),如图所示:

www.gdtesting.com 亿能测试技术 www.automationqa.com

www.gdtesting.com 亿能测试技术 www.automationqa.com

这样StartNewBrowser这个Action的脚本就可以简化成: If StartNewBrowser (Environment.Value(\ Parameter(\End If

另外,QTP支持将可重用的函数用RegisterUserFunc注册到测试对象中,因此可以把StartNewBrowser和CloseBrowser这两个函数注册到Browser对象中: ' 启动IE浏览器

Function StartNewBrowser( objBrowser, browserApp ) SystemUtil.Run browserApp StartNewBrowser = Browser(\End Function

RegisterUserFunc \

' 关闭IE浏览器

Function CloseBrowser( objBrowser ) Browser(\

CloseBrowser = Browser(\End Function

RegisterUserFunc \

这样就可以通过浏览器对象Browser来直接访问StartNewBrowser 和CloseBrowser函数,例如:

If Browser(\ASP.net|论坛 -\Environment.Value(\ ) = True Then

Parameter(\End If

www.gdtesting.com 亿能测试技术 www.automationqa.com

www.gdtesting.com 亿能测试技术 www.automationqa.com

随机参数化

前面我们用了环境变量来参数化脚本,让测试数据与测试步骤分离,现在,让我们考虑一下如图所示的管理员控制台登录的页面测试:

登录时需要验证码,我们可以写一段脚本,用于随机地产生和输入验证码来尝试登录。 1、首先编写一个用于产生随机字符串的函数: ' 产生随机字符串的函数

Function makestring( inputlength )

If IsNumeric(inputlength) Then

For I = 1 To inputlength A

=

Array(\\

Randomize

x=RandomNumber (0,UBound(A)) B = A(x)

makestring =makestring +B Next 'Print (\ Else

'Print (\

makestring = \ End If End Function

这个函数负责根据传入的参数inputlength(要生成的随机字符串的长度),产生指定长度的随机字符串,字符串中可包括字母和数字。

www.gdtesting.com 亿能测试技术 www.automationqa.com

www.gdtesting.com 亿能测试技术 www.automationqa.com

2、用管理员账号登录论坛、进入系统设置,输入随机的验证码尝试登录管理员控制台: ' 登录论坛

Browser(\

ASP.net|

论论

坛坛坛

-\-\-\

ASP.net|ASP.net|ASP.net|

论论论

坛 坛 坛

-\Browser(\ASP.net|

-\Browser(\ASP.net|论

-\

Browser(\ASP.net|论坛 -\ASP.net|论坛 -\登录\Wait 5

' 进入系统设置

Browser(\ASP.net|论坛 -\ASP.net|论坛 -\系统设置\

' 不断尝试验证码

For I=1 to 10 Browser(\管理员控制台登录\管理员控制台登录\\ Browser(\管理员控制台登录\管理员控制台登录\makestring(5) ' 调用makestring产生随机的5个字符 Browser(\管理员控制台登录\管理员控制台登录\ If Browser(\管理员控制台登录\系统设置 - Powered by Discuz!NT\系统设置 - Powered by Discuz!NT\

Print \Else Print \

End If Next

脚本中调用了前面编写的makestring函数获取随机字符串作为验证码输入,循环10次,尝试不同的验证码看能否登录。

* 注意:关于验证码的测试将在后面讲述,这里仅介绍如何使用随机参数化设计脚本。

数据驱动脚本设计

除了使用环境变量、随机数来参数化外,还可以使用QTP的DataTable来存储数据和参数化脚本,这种脚本设计思想也称为“数据驱动”(Data Driven),下面以如图所示的登录功能为例(这次我们主要测试的是用户在登录5次失败后将被禁止登录的功能),介绍如何使用DataTable实现数据驱动:

www.gdtesting.com 亿能测试技术 www.automationqa.com

www.gdtesting.com 亿能测试技术 www.automationqa.com

首先在QTP的DataTable视图中填写测试数据,如图所示

录制脚本并用DataTable参数化数据:

'Browser(\.net|论坛 -\.net|论坛 -\登录\Browser(\ASP.net|论坛 -\用户登录 - Discuz!NT ASP.net|论坛\

Browser(\ASP.net|论坛 -\用户登录 - Discuz!NT ASP.net|论坛\

Browser(\ASP.net|论坛 -\用户登录 - Discuz!NT ASP.net|论坛\登录\

'msg = Browser(\ASP.net|论坛 -\用户登录 - Discuz!NT ASP.net|论坛\出现了1个错误\用户不存在\ msg = Browser(\ASP.net|论坛 -\用户登录 - Discuz!NT ASP.net|论坛\出现了1个错误\If msg <> DataTable(\

www.gdtesting.com 亿能测试技术 www.automationqa.com

www.gdtesting.com 亿能测试技术 www.automationqa.com

Print \

Else If Browser(\ASP.net|论坛 -\用户登录 - Discuz!NT ASP.net|论坛\返回上一步\ Browser(\ASP.net|论坛 -\用户登录 - Discuz!NT ASP.net|论坛\返回上一步\

Else Browser(\.net|论坛 -\End If

'浏览器回退

End If

脚本中获取错误提示信息的方法是通过DOM访问“出现了1个错误”这个页面元素的相邻的下一个元素(nextSibling)的innerHTML属性。可以通过IE Developer Toolbar看到“出现了1个错误”这个页面元素与“用户不存在”这个页面元素之间的关系是“兄弟”关系,如图所示,因此可以用“nextSibling”来访问到。

我们的数据是填写在GlobalSheet中的,是针对全局的脚本设置,QTP默认设置为迭代所有行,如图所示:

www.gdtesting.com 亿能测试技术 www.automationqa.com

www.gdtesting.com 亿能测试技术 www.automationqa.com

因此运行脚本后,将循环迭代DataTable中的数据,每次取一行数据,替换测试步骤中相应的数据,直到所有数据都遍历完毕。

由于多次登录失败后,将提示“您已经多次输入密码错误, 请15分钟后再登录”,系统将暂时锁住用户。为此,如果需要重复执行测试或执行其他的测试用例,则需要在Discuz的数据库中修改数据,解除锁定,方法是找到dnt_failedlogins表,修改其中的errcount为0,如图所示,或者删除记录:

当然,这些操作应该写成数据恢复的脚本函数,在每次执行前面的数据驱动的登录脚本后,调用清空数据的脚本,让后续的测试场景可以正常执行。

场景恢复设计

Web页面测试通常会碰到页面访问过程中断网的情况,请求页面无法显示,而这种情况是不可预料的,它可能发生在任何时刻,例如下面的脚本: SystemUtil.Run \

Browser(\.net|论坛 -\

Browser(\

ASP.net|

-\

ASP.net|

-\

www.gdtesting.com 亿能测试技术 www.automationqa.com

www.gdtesting.com 亿能测试技术 www.automationqa.com

图15.20 登录论坛

图15.21 输入验证码

因此可以在QTP脚本中编写数据库查询语句,在登录管理员控制台之前从数据库dnt_online表获取到管理员的验证码,具体的QTP脚本如下所示:

' 登录论坛

Browser(\ASP.net|-\Browser(\ASP.net|

论论

坛坛

-\-\

ASP.net|ASP.net|

论论

坛 坛

-\Browser(\ASP.net|论坛 -\ASP.net|论坛 -\

Browser(\ASP.net|论坛 -\ASP.net|论坛 -\登录\

www.gdtesting.com 亿能测试技术 www.automationqa.com

www.gdtesting.com 亿能测试技术 www.automationqa.com

' 从数据库读取到验证码

verifycode = GetVerifyCode (\

' 登录管理员控制台

Browser(\ASP.net|论坛 -\ASP.net|论坛 -\系统设置\

Browser(\管理员控制台登录\管理员控制台登录\Browser(\管理员控制台登录\管理员控制台登录\置验证码

Browser(\管理员控制台登录\管理员控制台登录\

' 退出

Browser(\管理员控制台登录\Discuz!NT\退出\

' 函数GetVerifyCode:从数据库表中读取验证码

Function GetVerifyCode( username ) Dim Conn ' 数据库连接对象 Dim Rst ' 数据记录集对象 Dim str_Link_DBSource ' 数据库连接串 Dim SqlStr ' SQL查询语句 str_Link_DBSource=\

' 设

系统设置 - Powered by

Security

Info=True;User ID=sa;Initial Catalog=dnt;Data Source=CHENNENGJI\ SqlStr = \ Set Conn=CreateObject(\ Conn.Open str_Link_DBSource Set Rst=CreateObject(\ Rst.Open SqlStr,Conn,2,2

Rst.MoveFirst

GetVerifyCode = Rst.Fields(0) ' 取得验证码

Rst.Close Conn.Close

Set Rst=Nothing

Set Conn=Nothing End Function

作者:广州亿能测试技术有限公司(www.gdtesting.com) 旗下工作室:TIB自动化测试工作室、PrefTest性能测试工作室、HackChecker安全测试工作室,联合编制。 主要编写人员包括:陈能技、易德财、席飞剑

www.gdtesting.com 亿能测试技术 www.automationqa.com

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库Web页面功能自动化测试在线全文阅读。

Web页面功能自动化测试.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/258385.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: