您的当前位置:首页正文

软件测试论文

来源:个人技术集锦


《软件质量与测试基础》期末论文

姓 名:学 号:班 级:日 期: 梁文琦 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

因篇幅问题不能全部显示,请点此查看更多更全内容