软件测试论文.docx
《软件测试论文.docx》由会员分享,可在线阅读,更多相关《软件测试论文.docx(24页珍藏版)》请在冰豆网上搜索。
软件测试论文
《软件质量与测试基础》期末论文
姓名:
梁文琦
学号:
12110125120
班级:
12计算机(专升本)
日期:
2013-10-26
目录
1.AutoRunner工具简介3
2.AutoRunner工具的安装5
3.AutoRunner工具的测试过程7
3.1创建项目7
3.2录制脚本8
3.3对象库11
3.3脚本回放13
3.4回放日志查看14
3.5注意事项16
4.测试用例与执行18
4.1创建用例18
4.2设置检查点24
5.使用AUTORUNNER的体会27
1.AutoRunner工具简介
AutoRunner是黑盒测试工具,可以用来执行重复的手工测试。
主要用于:
功能测试、回归测试等工作的自动化。
它采用数据驱动和参数化的理念,通过录制用户对被测系统的操作,生成自动化脚本,然后让计算机执行自动化脚本,达到提高测试效率,降低人工测试成本。
自动化测试是当今测试发展的方向,能够帮助软件开发团队实现:
●节省测试时间
自动测试通过执行测试脚本来实现测试自动化,单个脚本的执行速度比人工执行快10倍以上,能够为我们节省大量的测试时间,我们不必为了测试时间的deadline而加班加点。
●24小时执行
通过24小时执行模式,实现夜间执行模式,实现夜间自动执行,从而达到“每日构建测试”的目标,可以即使发现每天出现的缺陷。
项目经理及时获取项目质量数据,掌握项目进展情况。
●降低成本
自动化测试不需要人员来执行测试用例,因此可以节省大量的执行成本。
对测试人员而言,不需要发布新版本带来的加班。
对于整个产品开发团队,只使用很少的测试人员就可以达到高质量的产品,获得大量成本的节省。
产品可以对以下类型对象进行GUI功能性测试:
1Windows类型对象,一般为用C++/Delphi/VB/VFP/PB/.NetForm等技术开发的桌面程序。
2IE网页对象,一般性的网站,比如大的门户类网站。
3Java对象,一般为用AWT/Swing/SWT等技术开发的桌面程序。
4Flex对象,网页的内容是用Flex开发的。
5Silverlight对象,网页的内容是用Silverlight开发的。
6WPF对象,一般为用WPF技术开发的桌面程序。
7QT对象,一般为用QT技术开发的桌面程序。
系统要求:
windows(32位/64位)2000/xp/vista/2003/7/2008
2.AutoRunner工具的安装
1.进入网站注册账户,注册之后登录即可下AutoRunner,如图2-1所示
图2-1
2.双击安装图示,按照提示安装完成,在安装的过程中由于本软件要录制网页脚本,因而加入了必需的网页插件,在安装插件时有些杀毒软件会出现拦截提示,这是正常现象,放行即可安装,如果禁止则不能正常录制网页脚本,如图2-2,2-3所示
图2-2
图2-3
3.AutoRunner工具的测试过程
3.1创建项目
打开安装好的AutoRunner工具,打开之后因为第一个运行,需要指定一个工作空间给它。
好了之后软件界面如3-1所示。
图3-1
点击菜单文件-新建-项目,打开编辑项目界面,输入项目名称,点击确定,在项目资源管理下会出现新建的项目。
如图3-2,3-3所示
图3-2
图3-3
3.2录制脚本
点击项目test1单击右键-新建脚本,脚本取名clac,目的是测试系统自带的计算器程序,如图3-4所示
图3-4
打开系统自带的计算器程序,点击autorunner上的红色录制按钮
开始录制,此时屏幕的右下角会出现一个录制跟踪器。
如图3-5,3-6,3-7所示
图3-5
图3-6
图3-7
例如录制一个计算器9/3=3的脚本。
如图3-8所示
图3-8
在录制好脚本后,在项目目录下会存在如下几个文件。
如下图所示
第一个为脚本文件,保存了脚本编辑器中的脚本;第二个为参数表文件,是一个excel表格,所有的参数化数据都将被保存到这里,当然在我们没用到参数化时,此文件中无数据。
第三个为对象库文件,是一个xml格式,前面我们看到的对象库信息会被保存到这里,对象库可以进行编辑,编辑后也会被保存下来。
上面的三个文件都可以在软件中修改,不建议在软件外编辑。
3.3对象库
对象库中保存了所有对象的详细信息,不同对象的信息都不完全相同,在回放时就是根据这些属性来准确找到对应窗口中的控件,使之响应相应的动作。
对于Windows程序来说某一个对象的属性包含如下内容。
Java程序对象的属性包含如下内容。
网页对象的属性包含如下内容。
3.3脚本回放
回放脚本的过程,实质是对先前的录入动作的一次重复操作,只是这个过程是根据录入的脚本自动完成的。
对于回放来说,不管是回放Windows程序脚本还是Java程序脚本还是IE程序脚本都基本相同。
下面就以先前录入的计算器脚本为例,介绍一下回放操作及注意事项。
点击菜单【执行】→【开始执行】或者点击工具栏的回放按钮,此时软件进入回放阶段,界面会被隐藏,回放的结果会在输出窗口中显示,如回放成功会有如下信息输出。
如图3-9所示
图3-9
如果回放之前将计算器窗口关闭,回放后会有如下信息输出,提示执行window动作时,计算器窗口对象没有找到。
如图3-10所示
图3-10
如果回放之前在对象库中将等号的属性信息删除,回放后会有如下信息输出,提示回放clickControl动作时,等号对象在对象库中没有发现。
如图3-11所示
图3-11
3.4回放日志查看
当执行完脚本后,系统保存执行结果到工作目录,此时系统自动弹出执行结果查看窗口,在该窗口用户可更友好地查看执行的结果信息。
日志中需要体现检查点信息,含检查点名。
执行结果查看界面以独立窗口形式展示,窗口以HTML的形式用列表显示对象的执行结果。
例如:
执行test1项目下的clac.bsh脚本,如图3-12所示
图3-12
执行完毕后,在AutoRunner的工作空间,保存了相对应的和脚本名字相同的文件名的*.logd文件。
例如图3-13所示
图3-13
通过菜单工具,来进行日志查看操作.如图3-14所示。
图3-14
3.5注意事项
1、回放时必须要将待回放的脚本打开,否则回放菜单和工具栏的回放按钮将不可用。
2、在编辑器中打开了多个脚本时,应确保待回放的脚本是当前编辑的脚本。
3、回放时一定要将各项状态置于录制时的初始状态,否则回放可能会失败。
4、在回放的过程中不要再操作鼠标和键盘,直至回放完成,否则回放可能会失败。
5、如果回放的脚本被手工修改过一定要及时保存,否则修改过或是被注释掉的动作在回放时会得不到体现。
6、对于回放Java程序脚本,如果控件中带有滚动条(比如树控件、列表控件等),在控件中的元素不可见的情况下对元素执行的操作可能会失败。
7、在回放时可能录制下的脚本并不能完全满足要求,比如脚本命令参数化、跨脚本回放,校验脚本、修改对象库权重等等,此时就得手动修改脚本
4.测试用例与执行
4.1创建用例
创建网站注册用户加用户登录功能。
点击录制按钮创建要录制的脚本,脚本代码如下:
ar.startApplication("C:
\\ProgramFiles\\InternetExplorer\\IEXPLORE.EXE","http:
//localhost:
6717/Default1.aspx");//调用系统函数startApplication,自动执行打开浏览器并添加网站参数。
//ar.//IEisloadingweb.Wait...
//ar.//IEhasloadedweb.
//ar.//IEisloadingweb.Wait...
//ar.//IEhasloadedweb.
ar.window("IEFrame_http:
//localhost:
6717/Default1.aspx-WindowsInternetExplorer").clickControl("INPUT_submit_注册",16,6,"left");
//ar.//IEisloadingweb.Wait...
//ar.//IEhasloadedweb.
ar.window("IEFrame_http:
//localhost:
6717/regiser.aspx-WindowsInternetExplorer").clickControl("INPUT_text_txtUserzcname",38,6,"left");
ar.window("IEFrame_http:
//localhost:
6717/regiser.aspx-WindowsInternetExplorer").setValue("INPUT_text_txtUserzcname","xiaohong");
ar.window("IEFrame_http:
//localhost:
6717/regiser.aspx-WindowsInternetExplorer").clickControl("INPUT_password_txtUserzcpassword",22,2,"left");
ar.window("IEFrame_http:
//localhost:
6717/regiser.aspx-WindowsInternetExplorer").setValue("INPUT_password_txtUserzcpassword","123456");
ar.inputKey("Tab");
ar.window("IEFrame_http:
//localhost:
6717/regiser.aspx-WindowsInternetExplorer").setValue("TEXTAREA_txtbeizhu","");
ar.inputKey("Tab");
ar.inputKey("Tab");
ar.inputKey("Tab");
ar.window("IEFrame_http:
//localhost:
6717/regiser.aspx-WindowsInternetExplorer").setState("INPUT_checkbox_ckboxlist_1","true");
ar.inputKey("Tab");
ar.inputKey("Tab");
ar.inputKey("Tab");
//ar.//IEisloadingweb.Wait...
//ar.//IEhasloadedweb.
ar.window("IEFrame_http:
//localhost:
6717/regiser.aspx-WindowsInternetExplorer").clickControl("INPUT_submit_提交",25,7,"left");
ar.window("#32770_MicrosoftInternetExplorer").clickControl("#32770",127,16,"left");
ar.window("#32770_MicrosoftInternetExplorer").clickControl("Button_确定",41,12,"left");
//ar.//IEisloadingweb.Wait...
//ar.//IEhasloadedweb.
//ar.//IEisloadingweb.Wait...
//ar.//IEhasloadedweb.
ar.window("IEFrame_http:
//localhost:
6717/regiser.aspx-WindowsInternetExplorer").clickControl("A_商城首页",23,8,"left");
//ar.//IEisloadingweb.Wait...
//ar.//IEhasloadedweb.
ar.window("IEFrame_http:
//localhost:
6717/Default1.aspx-WindowsInternetExplorer").clickControl("INPUT_text_ContentPlaceHolder1_txtUsername",34,9,"left");
ar.window("IEFrame_http:
//localhost:
6717/Default1.aspx-WindowsInternetExplorer").setValue("INPUT_text_ContentPlaceHolder1_txtUsername","xiaohong");
ar.window("IEFrame_http:
//localhost:
6717/Default1.aspx-WindowsInternetExplorer").clickControl("INPUT_password_ContentPlaceHolder1_txtPassword",10,6,"left");
ar.window("IEFrame_http:
//localhost:
6717/Default1.aspx-WindowsInternetExplorer").setValue("INPUT_password_ContentPlaceHolder1_txtPassword","123456");
ar.window("IEFrame_http:
//localhost:
6717/Default1.aspx-WindowsInternetExplorer").clickControl("INPUT_submit_登录",11,16,"left");
//ar.//IEisloadingweb.Wait...
//ar.//IEhasloadedweb.
ar.window("IEFrame_http:
//localhost:
6717/Default1.aspx-WindowsInternetExplorer").clickControl("A_注销",7,6,"left");
//ar.//IEisloadingweb.Wait...
//ar.//IEhasloadedweb.
现在进行测试回放,确定软件是否正常运行。
如下是软件回放后的日志文件。
根据日志报告,现在对测试脚本回放的操作都是成功的。
下面我们把用户注册进行参数化,让软件根据我们给定的几组用户去注册,一方面是学会如何使用该软件的参数化,一方面测试我们给定的几组用户是否有效,例如我给了一下3组数据。
测试方式
输入值
预期结果
实际结果
黑盒测试
用户名:
aaaaaa
密码:
aaaaaa
注册成功
注册成功
黑盒测试
用户名:
bbbbbb
密码:
bbbbbb
注册成功
注册成功
黑盒测试
用户名:
aaaaaa
密码:
aaaaaa
注册失败
注册成功
现在对上面的测试脚本进行改造,使用参数化对该用例进行测试
首先使用的是for循环函数,该函数如下
for(ParameterDatapd:
ar.getParameterDataList("zhuce.xls")/*.subList(0,3)*/)
{
//ar.parameterData=pd;//ar.parameterData可用于脚本之间传递参数
}
Pd表示的是参数集的对象,我们使用系统函数getFrom(“”)方法对Pd中的参数进行获取.
现在把注册的脚本放入for循环的语句中,这样就实现了对每个用户注册进行循环,代码如下:
for(ParameterDatapd:
ar.getParameterDataList("zhuce.xls")/*.subList(0,3)*/)
{
//ar.parameterData=pd;//ar.parameterData可用于脚本之间传递参数
ar.window("IEFrame_http:
//localhost:
6717/Default1.aspx-WindowsInternetExplorer").clickControl("INPUT_submit_注册",16,6,"left");
//ar.//IEisloadingweb.Wait...
//ar.//IEhasloadedweb.
ar.window("IEFrame_http:
//localhost:
6717/regiser.aspx-WindowsInternetExplorer").clickControl("INPUT_text_txtUserzcname",38,6,"left");
ar.window("IEFrame_http:
//localhost:
6717/regiser.aspx-WindowsInternetExplorer").setValue("INPUT_text_txtUserzcname","xiaohong");
ar.window("IEFrame_http:
//localhost:
6717/regiser.aspx-WindowsInternetExplorer").clickControl("INPUT_password_txtUserzcpassword",22,2,"left");
ar.window("IEFrame_http:
//localhost:
6717/regiser.aspx-WindowsInternetExplorer").setValue("INPUT_password_txtUserzcpassword","123456");
ar.inputKey("Tab");
ar.window("IEFrame_http:
//localhost:
6717/regiser.aspx-WindowsInternetExplorer").setValue("TEXTAREA_txtbeizhu","");
ar.inputKey("Tab");
ar.inputKey("Tab");
ar.inputKey("Tab");
ar.window("IEFrame_http:
//localhost:
6717/regiser.aspx-WindowsInternetExplorer").setState("INPUT_checkbox_ckboxlist_1","true");
ar.inputKey("Tab");
ar.inputKey("Tab");
ar.inputKey("Tab");
//ar.//IEisloadingweb.Wait...
//ar.//IEhasloadedweb.
ar.window("IEFrame_http:
//localhost:
6717/regiser.aspx-WindowsInternetExplorer").clickControl("INPUT_submit_提交",25,7,"left");
ar.window("#32770_MicrosoftInternetExplorer").clickControl("#32770",127,16,"left");
ar.window("#32770_MicrosoftInternetExplorer").clickControl("Button_确定",41,12,"left");
//ar.//IEisloadingweb.Wait...
//ar.//IEhasloadedweb.
//ar.//IEisloadingweb.Wait...
//ar.//IEhasloadedweb.
ar.window("IEFrame_http:
//localhost:
6717/regiser.aspx-WindowsInternetExplorer").clickControl("A_商城首页",23,8,"left");
}
现在对用户输入框和密码输入框实现参数化.主要代码就2句.
ar.window("IEFrame_http:
//localhost:
6717/regiser.aspx-WindowsInternetExplorer").setValue("INPUT_text_txtUserzcname","xiaohong");
ar.window("IEFrame_http:
//localhost:
6717/regiser.aspx-WindowsInternetExplorer").setValue("INPUT_password_txtUserzcpassword","123456");
现在对这2句进行改造,改造如下
ar.window("IEFrame_http:
//localhost:
6717/regiser.aspx-WindowsInternetExplorer").setValue("INPUT_text_txtUserzcname",pd.getFrom("username"));
ar.window("IEFrame_http:
//localhost:
6717/regiser.aspx-WindowsInternetExplorer").setValue("INPUT_password_txtUserzcpassword",pd.getFrom("password"));
现在改造都完成了,开始测试脚本了.最终脚本运行日志如下
测试结果显示都是正确的,说明这3个用户都注册成功了,但是与我们的测试用例的预期结果不相同,得出结论注册这一块有问题,没有对用户进行判别,已注册的用户名还是能注册.
4.2设置检查点
创建校验消息框的检查点,使用的系统函数是checkMessageBox命令。
如检查注册时是否有检查用户名重名。
在正确的程序里如果输入了已注册的用户名应该提示该用户已存在,如果是在错误的程序里(假如没有对用户作检测)那得出的结论应该都是注册成功的。
主要方法如下:
ar.checkMessageBox("#32770_MicrosoftInternetExplorer","已存在该用户");
脚本代码如下:
ar.startApplication("C:
\\ProgramFiles\\InternetExplorer\\IEXPLORE.EXE","http:
//localhost:
6717/Default1.aspx");
//ar.//IEisloadingweb.Wait...
//