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