文档库 最新最全的文档下载
当前位置:文档库 › 自动化测试异常处理与用例管理

自动化测试异常处理与用例管理

自动化测试异常处理与用例管理
自动化测试异常处理与用例管理

测试用例的前置条件和后置条件

除了第二点中谈到的数据需要准备外,在测试用例这个Level,必须有一些条件满足,您才能开始执行它。比如准备一个初始设置条件下的IE 浏览器和已安装过老版本该软件的XP系统。这些可重用的准入条件,可以考虑不作为特定用例的Step,而是把它提取出来,作为Setup Section 或叫Pre-Condition。

对于后置条件或Post- condition,往往我们用它来做一些处理或恢复,比如在上面的取款例子中,如果我们要用相同的帐号重复测试,在正好取完所有金额,余额为零的情况下,可以通过一些步骤或数据库脚本重置帐号余额。同样,您为某个用例设置浏览器禁用了Cookie,执行完该用例后,是不是也是需要回复到默认设置的状态呢?

集中的把这些步骤整理成一个相对独立的操作单元,具体用例中只要引用就可以了,这样会便于对用例的理解和在多处复用。

顺便说一下,对于一些类似软件运行环境的条件,比如安装和配置测试中,需要3种操作系统和3种浏览器的组合等,我们可以把他放在Test Set这个Level上来,不用写多个用例,只是在测试计划和执行的管理系统中作为测试集的一个环境参数,恰当地表达出来就可以。

4. 常用业务操作(Knowledge Base)

对于一个大型的应用,比如银行系统,开发和测试工作是长期的,持续的一个过程,这样的系统很适合引入自动化测试。它业务逻辑复杂,测试技术性要求高,往往使用了不同厂商的工具和多种脚本语言(如Shell,Python等),也存在了很多可用的遗留脚本。

这些完成一些预定业务操作的脚本单元,是可以直接借用的。为了在公司和产品层面,管理好这些可复用的资源,一种好的方式是给它们标上号,如KB_PRJ01_Module02_XXX,集中管理起来,以后的用例中只要调用即可。

举例来说,在银行业务测试中我们,需要模拟和银联的接口,让测试帐号向外汇款,取得响应信息,并保存结果,这可能是个复杂而底层的处理过程,对一般员工是不需要,也没有权限去深入掌握的。这时,将他们包装成一个个Shell脚本或小工具,做好使用说明和统一建档,在以后的项目测试中,只要调用就可以了。如此,可以大大提高各个有相关接口的模块的自动化测试工作效率。

根据以往工作中常见的一些问题,对于如何写好测试用例(不仅针对自动化测试),做以下做几点补充:

自动化测试用例设计的原则

很多公司在实施自动化测试的过程中,往往会把所有的手工测试用例作为自动化测试用例,并且直接进行脚本的开发工作,甚至有些公司不写自动化测试用例,直接想当然地开发测试脚本,这些都是极其不规范的做法,甚至很有可能是导致最后自动化测试项目失败的最大原因。那么问题就来了,为什么不能使用手工测试用例完全替代自动化测试用例呢?有以下几点原因,同时也是自动化测试用例的设计原则

●原则1:自动化测试用例的范围往往是核心业务流程或者重复执行率较高的。

在选取自动化测试用例范围时,很多测试工程师或者上级领导可能心里会过分依赖自动化测试,会认为自动化测试就应该覆盖所有的手工测试用例,自动化测试的覆盖率就应该达到百分之百。其实恰好相反,这样的想法往往会导致自动化测试最终失败。在一些大型项目中,往往测试用例的数量会很庞大,而且如果遇到一些繁杂的被测程序(特别是C /S架构),脚本开发工作往往会相当耗时间,并且很多测试用例甚至根本就不能通过自动化来实现。举些例子,现在很多公司自动化测试都是刚起步,对自动化测试的了解程度只是停留在字面上,在公司对测试也不是非常重视的情况下,当然不太愿意去花精力招一个具有自动化测试开发经验的工程师,很多还是停留在使用工具的录制回放功能来完成自动化测试。正是存在这样的技术限制情况下,往往在实施中,会出现很多录制回放不能解决的问题,测试工具完全无法识别测试对象,无法识别一些特殊的加密测试控件。还有,如果项目的变更频率,测试用例数量大的话,增加了后期的维护工作量等,都是造成最终失败的一些隐患。投入越大,损失越大。因此,往往我们会选取最核心的一些业务路径或者是重复执行率较高的一些手工测试用例进行自动化测试,这样能够充分发挥出自动化测试的优势。

●原则2:自动化测试用例的选择一般以“正向”为主。

手工测试用例分正常情况和异常情况,在设计的时候,可能往往会去设计很多异常情况来验证程序是否有Bug,并且一个正常情况的测试用例往往会对应几十个非正常情况的测试用例,而每种异常情况的测试用例都会有各种各样的预期结果。在自动化测试中,很多人喜欢将正常情况称为“正向”;反之,异常情况则称为“反向”。下面,我们试想以下,如果将这些异常情况全部转化、反应到自动化测试脚本中,那肯定需要非常繁琐的判断才能做到。这个对于自动化测试工程师来说,其现有的工作量还是今后的脚本维护量都是不可小视的。对于整个自动化测试项目来说,如果每个异常情况都要写进脚本中,那真的是花了大价钱买一堆小东西,小东西真正能发挥大作用的毕竟很少。因此,真正在自动化测试项目实施中,往往会舍弃反向用例,个别比较重要的除外。使每个东西都能发挥其最大的作用才是企业最想看到的。功能自动化测试主要还是用于回归测试,回归测试的目的就是保证新增功能后老功能是否能够正常继续运作。而自动化测试则是让测试人员从繁琐又枯燥的重复手工测试中解放出来,这就是目的和目标。

原则3:不是所有手工测试用例都可以使用自动化测试来实现的。

这里纠正许多测试从业人员的一个错误观念,刚接触测试自动化的普遍都会认为手工测试用例全部要转化为自动化测试用例,但是在真正实施的时候,却发现很多测试用例是自动化无法实现的,或者有些测试用例根本就没有必要去自动化的。例如,有些用例会牵涉到硬件设备辅助的,最简单的例子就是用例执行过程中需要使用刷卡机才能获取卡号信息(如果有技术能力,当然不排除自行开发接口供测试工具调用,但毕竟能有技术实力做到这一步的不多,能有这样的重视程度的更不多);再比如,有些测试用例是需要与合作机构进行互动联调,联调时是需要和对方实时沟通,以及根据具体情况给予响应的,这些情况多数还是只能使用手工人为地来完成。当然,决定是否转化为自动化测试,必须事先有一个规范文档来定义哪些是需要转化为自动化测试哪些是不需要的,否则测试工程师就会不知所措,没有一个标准。一旦有了这个标准,自动化测试工程师就可以严格按照文档里的流程去完成需要转化部分的自动化测试用例的脚本开发工作了。

原则4:手工测试用例可以不用回归原点,而自动化用例往往是必须的。

很多有经验的自动化测试从业人员一定有这样的经历,很多时候脚本写完后,第一次执行没有任何问题,而第二次执行时立刻就会报错,原因就是没有回归原点。所谓回归原点就是执行的测试用例最终需要恢复其在执行前的初始状态,如果没有回归原点,就会把此脚本称之为死脚本。举个最简单的例子,比如添加用户功能,我们都知道每个用户名都是唯一的,当写完一个添加用户的脚本之后,执行第一次没有问题,因为执行前此用户还不存在,但是当执行第二次时,程序就会出现用户重复而报错,此时这个添加用户的脚本就失去了它的价值,在这种情况下,我们就需要在自动化测试用例的最后加上删除这个用户的步骤,这样在下次执行用例时就不会出现用户重复的情况了。当然,除了回归原点,还可以使用另一种方式进行,那就是初始化数据,比如ATM机取款,假设需要执行取款100元的操作,而银行卡余额是120元,当测试脚本第一次执行时可能没有任何问题,但是第二次系统就会报余额不足,这样就成为了死脚本,解决方案有两种:一种是直接进行初始化数据,每次执行用例之前都重置下余额(只需大于100即可);第二种方法可以在用例执行前,先查询下余额是否大于100,若大于等于则继续,若小于则做一笔充值100的操作,这样即可解决。两种方式可以看具体情况使用,数据初始化方便,但有时候初始化之后可能会影响到其他自动化测试用例的执行,而第二种方式相对在脚本上需要稍微花点功夫。究竟使用哪种方式还需要具体情况具体分析。总之,在执行自动化测试用例之前做好数据准备,这也是自动化测试的关键步骤。

原则5:自动化测试用例和手工测试用例不同,不需要每个步骤都写预期结果。

在手工测试用例的设计过程中,几乎每一个测试步骤都有一个预期结果。但是,在自动化测试用例的设计中并不采用,在自动化测试用例中,只有准备在测试脚本中设置成检查点的步骤才有预期结果,其他所有的步骤只将它看作一个步骤,这样做的好处是一目了然、目的明显、层次分明,以后写测试脚本直接跟着自动化测试用例就行了。因为经过前面的探讨应该已经知道,自动化测试中并不是所有的东西都需要验证的。所以,作者在前面的章节中也提到过,基本上手工测试用例多多少少都要进行一些转换的,就是因为它们之间的格式是不一致的。举一个简单的例子,假设需要设计一个注册页面的自动化测试用例,有10几个表单需要填写,在手工测试用例中,每个表单的填写都一定会有预期结果,因为它的确在检查每一项是对了还是错了,只是用的是你的眼睛在检查而已,所以速度非常的快,甚至你自己潜意识都忽略了其实你已经检查了。但是,在自动化测试中,我们知道如果你要检查,那一定需要写代码,如果每项都检查,那代码量有多大是可想而知的,不是说做不到,只是这样做根本不符合自动化测试的特点。所以,绝大部分时候,这些在自动化测试中可有可无的检查,我们全部“不检查”,只当做一个业务流程和步骤,是不需要设立预期结果的。

难以对于UI样式或UI逻辑进行断言

以上图为例,有一个UI样式类的缺陷(左侧菜单树的根节点“console”下面多出来一条虚线)和一个UI逻辑类的缺陷(右侧用户列表只有一页,但“下一页”和“最后一页”图标依然是可以点击的,即没有灰显)。此类缺陷即使对于经验丰富、心思缜密的测试人员,在人工测试时也是很可能发现不了的,并且在自动化测试过程中也很难进行断言。

即使存在上述问题,测试脚本中是否有充分的断言,依然是评判自动化测试有效性的一个重要指标。但实施过自动化测试的人应该都会有这样的体会:“大部分断言在大部分情况下只是佐证软件是运行正常的”。

当然,所有人都应该是非常期待看到这样的结果,毕竟谁也不希望每次回归测试时都是用例大面积不通过。只是辛辛苦苦写这些断言语句的测试人员心里未免有些“小遗憾”。

本系列上篇文章中谈到“很多人一提到自动化测试脚本,马上就想到需要提供录制工具”,但如果换个角度思考,很可能就是“柳暗花明又一村”。

在这里,我们同样换个角度思考,假设我们的自动化测试主要目标是为了证明软件运行正常,那么我们会怎么做?

笔者这边的一个经验就是“按照完整的业务流程来组织测试用例,只对少量、必要的关键点进行断言”。以“租户对虚拟化资源的申请使用”为例,来具体看看测试用例的组织方式:

1. 新租户注册;

2. 管理员登录系统,对注册租户进行审批,然后退出系统;

3. 审批后的租户登录系统;

4. 租户申请所需要的虚拟化资源(比如,40G硬盘、2核CPU、2G内存),然后退出系统;

5. 管理员登录系统,对租户申请的资源进行审批,然后退出系统;

6. 租户登录系统,在已申请资源的基础上创建安装指定操作系统的虚拟机;

7. 断言虚拟机是否创建成功;

8. 租户退出系统;

9. 管理员登录系统,删除租户;

10. 断言租户之前申请的资源是否被完全释放;

11. 租户再次登录系统,断言是否无法登录;

上述测试用例就是按照完整的业务流程进行组织,并且只对少量关键点(7、10、11)进行断言,如果整个用例可以运行通过,就能证明这个业务是没有问题的。

另外还有一个值得考虑的现象,就是相对于自动化测试而言,一个优秀的测试人员在人工测试时是如何判断功能正确与否的呢?他不会死板的只盯着某几个输入域的值,他一定还会同时关注页面上所有数据的正确性、会更加关注业务流程是否正确、会更敏锐的发现页面样式或UI逻辑类的缺陷。

为了兼顾“证明软件正常运行”和“人性化的识别软件缺陷”,一个优秀的测试工具应该考虑提供以下多种断言机制。

一、控件级细粒度断言

即前面提到的最常见的断言方式。在测试过程中,可以在任何位置增加断言脚本,来判断页面指定控件是否存在、控件显示值是否为预期结果等。通常建议只对关键校验点进行断言。

二、页面级粗粒度断言

通过对比前(之前测试通过)后(后续持续发布)版本在测试用例路径和输入参数相同的情况下,整个页面内容(包括截图和数据)是否严格相同来做粗粒度断言。

通过页面截图进行断言有两个实现要点:首先要选择一个合适的截图方案(笔者推荐采用Selenium WebDriver提供的TakesScreenshot接口);其次需要提供图片对比工具,以便测试人员可以一眼看出两个版本页面截图的差异。

下面是笔者在测试框架中实现的截图自动化对比功能的实际效果。下图中左侧部分是“实际结果截图”、右侧是“预期结果截图”、中间部分是差异对比,测试人员一眼便可看出其中的Bug:“表格行选中的翻页缓存(在当前页选中几条记录,翻到下一页再翻回本页,需要保持之前的行选中状态)功能丢失了”。

通过页面数据进行断言的实现方式相对简单一些,首先要提取页面上所有的数据(或文本),接着进行格式化,然后再自动化对比。“页面级粗粒度断言”的特点及应用场景如下:

?无需编写任何断言语句;

?需要能够提供可用于自动对比的历史正确版本,特别适用于可以持续构建的项目;

?能判断出UI样式和UI逻辑类的错误;

?由于对比绝对精准,导致可能存在误判,因此需要人工对差异图片进行排查;【注】由于很多Web页面都有渐入渐出、点击时按钮变色等很炫的效果,所以在两次截图的瞬间可能页面的动态样式是不一样的,这就是

所谓的“误判”。笔者对于一个“动态样式”适中的项目采用这种断言方式,统计结果表明误判率在20%左右。

?鉴于回归测试的时候,通常大部分用例应该是可以通过的,所以“页面级粗粒度断言”的投入产出比非常占优势!

三、基于业务逻辑断言

在测试设计时把有依赖关系的用例一起执行,如果某个步骤出现问题,即便不设置任何断言语句,在当前步骤或后续步骤的测试用例也会执行失败。下面以“增加、查询、修改、删除”这个最典型的流程来说明(如下图所示)。

假定在“增加”环节出现问题,那么我们的测试用例执行情况可能出现如下几种结果:

1. 如果在“增加记录A”的用例中包含对是否增加成功的断言,那么测试用例从“增加记录A”开始出错;

2. 如果在“增加记录A”中不包含断言,而是在“查询A”的用例中包含是否有查询结果的断言,那么测试用例会从“查

询A”开始出错;

3. 如果在“查询A”中也不包含断言,那么测试用例会从“修改查询结果”开始出错。

所谓“基于业务逻辑断言”,就是指上述第三种情况,其特点及应用场景如下:

?无需编写任何断言语句,但测试设计要考虑业务逻辑顺序;

?与“页面级粗粒度断言”相比,不需要提供可用于对比的历史正确版本,通常适用于项目刚开发或样式做整体调整等情况;

?断言错误的位置不精准,可能延后;

?执行过程每一步都做截图备份(通过Selenium WebDriver可以很方便的实现),可以非常有效的辅助定位准确的出错原因;

?鉴于回归测试的时候,通常大部分用例应该是可以通过的,所以“基于业务逻辑断言”的投入产出比非常占优势!

四、自定义扩展断言

在人工测试时经常有些操作结果的正确与否在当前页面无法做出判断,需要到其它页面甚至系统外部(比如,数据库、输出日志)获取信息来做出判断。以最常见的“基于数据库进行断言”为例,测试工具需要支持把断言时用到“预期结果”和“实际结果”配置为对应的SQL语句。

以上介绍了从测试工具的角度可以提供的多种断言机制,在自动化测试过程中应该根据项目实际情况,考虑采用上述多种断言的组合,以弥补控件级细粒度断言的不足。

https://www.wendangku.net/doc/d516561975.html, MVC集成EntLib实现“自动化”异常处理[实例篇]

个人觉得异常处理对于程序员来说是最为熟悉的同时也是最难掌握的。说它熟悉,因为仅仅就是try/catch/finally而已。说它难以掌握,则是因为很多开发人员却说不清楚try/catch/finally应该置于何处?什么情况下需要对异常进行日志记录?什么情况下需要对异常进行封装?什么情况下需要对异常进行替换?对于捕获的异常,在什么情况下需要将其再次抛出?什么情况下则不需要?

合理的异常处理应该是场景驱动的,在不同的场景下,采用的异常处理策略往往是不同的。异常处理的策略应该是可配置的,因为应用程序出现怎样的异常往往是不可预测的,现有异常策略的不足往往需要在真正出现某种异常的时候才会体现出来,所以我们需要一种动态可配置的异常处理策略维护方式。目前有一些开源的异常处理框架提供了这种可配置的、场景驱动的异常处理方式,EntLib的Exception Handling Application Block(以下简称EHAB)就是一个不错的选择。[源代码从这里下载][本文已经同步到《How https://www.wendangku.net/doc/d516561975.html, MVC Works?》中]

目录

一、通过指定Handle-Error-Action响应请求

二、通过Error View显示错误消息

三、自动创建JsonResult响应Ajax请求

一、通过指定Handle-Error-Action响应请求

在正式介绍如何通过扩展实现与EntLib以实现自动化异常处理之前,我们不妨先来体验一下异常处理具有怎样的“自动化”特性。以用户登录场景为例,我们在通过Visual Studio的https://www.wendangku.net/doc/d516561975.html, MVC项目模板创建的Web应用中定义了如下一个简单的数据类型LoginInfo封装用户登录需要输入的用户名和密码。

1: public class LoginInfo

2: {

3: [DisplayName("用户名")]

4: [Required(ErrorMessage="请输入{0}")]

5: public string UserName { get; set; }

6:

7: [DisplayName("密码")]

8: [Required(ErrorMessage = "请输入{0}")]

9: [DataType(DataType.Password)]

10: public string Password { get; set; }

11: }

然后我们定义了如下一个HomeController。基于HTTP-GET的Action方法Index将会呈现一个用户登录View,该Vi

ew使用创建的LoginInfo对象作为其Model。真正的用户验证逻辑定义在另一个应用了HttpPostAttrubute特性的Inde x方法中:如果用户名不为Foo,抛出InvalidUserNameException异常;如果密码不是“password”,则抛出InvalidPas swordException异常。InvalidUserNameException和InvalidPasswordException是我们自定义的两种异常类型。

1: [ExceptionPolicy("defaultPolicy")]

2: public class HomeController : ExtendedController

3: {

4: public ActionResult Index()

5: {

6: return View(new LoginInfo());

7: }

8:

9: [HttpPost]

10: [HandleErrorAction("OnIndexError")]

11: public ActionResult Index(LoginInfo loginInfo)

12: {

13: if (https://www.wendangku.net/doc/d516561975.html,pare(https://www.wendangku.net/doc/d516561975.html,erName, "foo", true) != 0)

14: {

15: throw new InvalidUserNameException();

16: }

17:

18: if (loginInfo.Password != "password")

19: {

20: throw new InvalidPasswordException();

21: }

22: return View(loginInfo);

23: }

24:

25: [HttpPost]

26: public ActionResult OnIndexError(LoginInfo loginInfo)

27: {

28: return View(loginInfo);

29: }

30: }

上面定义的HomeController具有三点与自动化异常处理相关的地方:

?HomeController继承自自定义的基类ExtendedController,后者完成了对异常的自动化处理。

?HomeController类型上应用了自定义的ExceptionPolicyAttribute特性用于指定默认采用的异常处理策略名称(“defaultPolicy”)。

基于HTTP-POST的Index方法上应用了HandleErrorActionAttribute特性用于指定一个Handle-Error-Action 名称,当异常在目标Action执行过程中抛出并通过EHAB处理后,指定的Action会被执行以实现对请求的响应。对于我们的例子来说,从Index方法抛出的异常被处理后会调用OnIndexError方法作为对当前请求的响应。

下面是代表登录页面的View的定义,这是一个Model类型为LoginInfo的强类型View。在该View中,作为Model的LoginInfo对象以编辑默认呈现在一个表单中,表单中提供了一个“登录”提交表单。除此之外,View中还具有个Validati onSummary。

1: @model LoginInfo

2:

3:

4: 用户登录

5:

8:

9:

10: @using (Html.BeginForm())

11: {

12: @Html.ValidationSummary(true)

13: @Html.EditorForModel()

14:

15: }

16:

17:

通过HomeController的定义我们知道两种不同类型的异常(InvalidUserNameException和InvalidPasswordException)分别在输入无效用户名和密码是被抛出来,而我们需要处理的就是这两种类型的异常。正对它们的异常处理策略定义在如下的配置中,策略名称就是通过应用在HomeController上的ExceptionPolicyAttribute特性指定的“defaultPolicy”。

1:

2:

3:

4: type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionHandlingSett ings, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling" />

5:

6:

7:

8:

9:

10:

11:

12:

13:

14:

15:

16:

17:

18:

19:

20:

21:

22:

23:

24:

25: ...

26:

通过上面的这样异常策略配置可以看到:我们使用一个自定义的名为ErrorMessageHandler的ExceptionHandler来处理抛出来的InvalidUserNameException和InvalidPasswordException异常,而ErrorMessageHandler仅仅是指定一个友好的错误消息,该消息一般会呈现给最终的用户。运行该程序后一个用于登录页面会呈现出来,当我们输入错误的用户名和密码的时候,相应的错误消息(在配置中通过ErrorMessageHandler设置的错误消息)会以如图7-16所示的效果显示出来,其实整个View是通过执行Action方法OnIndexError返回的ViewResult呈现出来的。

二、通过Error View显示错误消息

除了通过执行对应的Handle-Error-Action来呈现异常处理后的最终结果之外,还支持错误页面的错误呈现方法。简单起见,我们只是用名称为Error的View来作为最终的错误页面。为了演示基于错误页面的呈现方式,我们按照如下的方式重新定义了\Views\Shared\目录下的Error.cshtml。

1: @model ExtendedHandleErrorInfo

2: @{

3: Layout = null;

4: }

5:

6:

7:

8:

9: Error

10:

13:

14:

15:

16: @Html.DisplayFor(m=>m.ErrorMessage)

17:

18:

    19:

  • Controller: @Html.DisplayFor(m => m.ControllerName)
  • 20:

  • Action: @Html.DisplayFor(m => m.ActionName)
  • 21:

  • Exception:

    22:

      23:

    • Message: @Html.DisplayFor(m => m.Exception.Message)
    • 24:

    • Type: @Model.Exception.GetType().FullName
    • 25:

    • StackTrace: @Html.DisplayFor(m => m.Exception.StackTrace)
    • 26:

    27:

  • 28:

29:

30:

上面这个View的Model类型是具有如下定义的ExtendedHandleErrorInfo。它继承自HandleErrorInfo,只额外定义了一个表示错误消息的ErrorMessage属性。在上面的这个View中,我们将错误消息、异常类型和StackTrace和当前C ontroller/Action的名称呈现出来。

1: public class ExtendedHandleErrorInfo : HandleErrorInfo

2: {

3: public string ErrorMessage { get; private set; }

4: public ExtendedHandleErrorInfo(Exception exception, string controllerName, string actionName, string errorMessage)

5: : base(exception, controllerName, actionName)

6: {

7: this.ErrorMessage = errorMessage;

8: }

9: }

当利用EntLib的EHAB对从Index方法中抛出的异常进行处理后采用错误View的方式来响应请求,我们需要按照如下的方式将应用在该方法上的HandleErrorActionAttribute特性注释掉。

1: [ExceptionPolicy("defaultPolicy")]

2: public class HomeController : ExtendedController

3: {

4: //其他成员

5: [HttpPost]

6: //[HandleErrorAction("OnIndexError")]

7: public ActionResult Index(LoginInfo loginInfo)

8: {

9: //省略实现

10: }

11: }

再次运行该程序并分别输入错误的用户名和密码后,默认的错误View(Error.cshtml)将会以如下图所示地效果把处理后的异常结果呈现出来。

三、自动创建JsonResult响应Ajax请求

用于实施认证的Action方法Index可以通过普通的HTTP-POST的形式来调用,同样也可以通过Ajax请求的方式来调用。对于Ajax请求来说,我们最终会将通过EntLib处理后的异常封装成如下一个类型为ExceptionDetail的对象。如下面的代码片断所示,ExceptionDetail具有与Exception对应的属性设置。最终根据抛出异常对象创建的ExceptionDetai l对象会被用于创建一个JsonResult对象对当前Ajax请求予以响应。

1: public class ExceptionDetail

2: {

3: public ExceptionDetail(Exception exception,string errorMessage=null)

4: {

5: this.HelpLink = exception.HelpLink;

6: this.Message = string.IsNullOrEmpty(errorMessage) ? exception.Message : errorMessage;

7: this.StackTrace = exception.StackTrace;

8: this.Type = exception.GetType().ToString();

9: if (exception.InnerException != null)

10: {

11: this.InnerException = new ExceptionDetail(exception.InnerException);

12: }

13: }

14:

15: public string HelpLink { get; set; }

16: public ExceptionDetail InnerException { get; set; }

17: public string Message { get; set; }

18: public string StackTrace { get; set; }

19: public string Type { get; set; }

20: }

当客户端接收到回复的Json对象后,可以通过检测其是否具有一个ExceptionType属性(对于一个ExceptionDetail 对象来说,该属性不可能为Null)来判断是否发生异常。作为演示我们对Action方法Index对应的View进行了如下的改动。

1: @model LoginInfo

2:

3:

4: 用户登录

5:

1:

2:

2:

6:

7:

8: @{

9: AjaxOptions options = new AjaxOptions{OnSuccess = "login"};

10: }

11: @using (Ajax.BeginForm(options))

12: {

13: @Html.EditorForModel()

14:

15: }

16:

17:

如上面的代码片断所示,我们通过调用AjaxHelper的BuginForm生成了一个以Ajax形式提交的表单。表单成功提交(服务端因对抛出的异常进行处理而返回一个封装异常的Json对象,对于提交表单的Ajax请求来说依然属于成功提交)后会调用我们定义的回调函数login。在该JavaScript函数中,我们通过得到的对象是否具有一个ExceptionType属性来判断服务端是否抛出异常。如果抛出异常,在通过调用alert方法将错误消息显示出来,否则显示“认证成功”。我们再次运行我们的程序并分别输入不合法的用户名和密码,相应的错误消息会以对话框的形式显示出来,具体的显示效果如下图所示。

对于一个新项目,QA通常会首先为新特性创建手工测试用例,为了之后维护方便,也通常将这些用例存放在一张Excel 表或者一个专门的测试用例管理系统里。而在项目进行过程中或之后,具备自动化测试能力的QA团队会将手工测试用例转化为代码,加入套件(Suite)中,用于之后的回归。

以往我们认为手工测试用例与自动化代码之间存在联系,但并不紧密:

?手工测试用例文档很容易阅读,可以帮助学习业务,但因为维护不够灵活,很难跟上快速的变化。依赖手工测试用例对项目进行回归又是及其痛苦的。

?自动化测试代码可以很明显的提升效率,但不容易阅读。因为人们通常缺少更新代码注释的动力(没什么外人会用到,老鸟又不依赖它),久而久之我们不知道那一堆自动化用例究竟测了些什么,导致通过率逐步走低,又无人维护。自动化测试最终土崩瓦解。

这似乎是一种宿命般的失败。有些团队希望建立自动化测试体系,却从一开始就遇到类似的问题,导致进展缓慢,无法持续向老板秀出效果,最终又退缩回原点。

原因是什么?怎么去破解这个困局呢?

1. 用例文档不应该与自动化代码分离,而应存在于代码中,随着代码的变化而及时更新。

2. 用例文档应该简洁,可以自我组织与管理,并以一种清晰的结构被展现和分享。

3. 自动化测试用例的运行历史应该被测量和记录,数据可以集中形成几个直接清楚的度量指标,反映一个周期

内的平均质量水平。

4. 度量指标应该可以形成简洁好看易懂的质量报告,向相关各方展示测试工作对产品关键方面的评测结果。

TestMP的测试用例管理和度量就是按照以上四点,为破局提供了一种解决方案。

case的独立性

通常一个test suite包含了一组相近的或者有关联的test case. 而每一个test case应该只测试一种场景,根据cas e复杂程度的不同场景同样可大可小,可以是某个功能的测试也可以是端到端的完整测试.(当然也有特殊的写法比如工作流测试和数据驱动.) case的独立性又有哪些需要关注的点呢?

首先一个test suite内的test case在执行时不应该相互影响, 应该将通用的背景部分提取出来放到suite setup中,允许我随机的跑某一个case或者乱序的跑这些case. 如果case的步骤有造成环境被破坏的风险,那应该在case tear down中将环境恢复,并且在case setup中做环境监察以及时的终止case. suite level和folder level同样要注意独立性的问题,在CRT中通常会将数百数千的case放在一起跑,robot并不会规定case执行的顺序所以从某种程度上来说它是随机的.独立性还体现在case fail时信息的抓取上,经过一个晚上大批case的执行之后,环境通常已被破坏, 希望通过保留现场来用作case失败问题定位是不现实的.

所以每个case都应该准确的收集其开始和结束之间的信息.

case的可迁移性

case的可迁移性主要考虑:case对执行环境的依赖,case对外部设备的依赖,case对测试对象的依赖.

a.避免依赖执行环境,你一直在个人PC上编写的用例并执行测试,但是不久之后你的用例就会被迁移到组内的测试执行服务器上,之后又被部署到持续集成服务器上,

中途也有可能被其他同事下载到他的个人PC上来执行测试.所以在编写用例时我们要避免支持不同平台的不同库(windows,linux)和或者不同的脚本命令(CentOS,RedHat,MacOS)

总之要像Java宣扬的那样"一处编译处处运行".

b.在通信领域为了测试需要或者扩展测试覆盖,我们会引入一些外部设备如Spirent、Cisco的一些辅助测试设备,各种网络设备交换机、路由器,还有一些自行开发的模拟设备.

外部设备会不断的升级或者更换,在编写用例时我们就需要考虑如何用一套case更好的兼容这些测试设备. 我有如下几点建议:

i.首先将外部设备的操作从测试用例步骤中剥离出去,组织成组级别的库.

ii.

c.对测试对象的依赖,这里我考虑到的是如果测试对象是一个软件平台,软件平台通常需要适配多种的设备.而设备的硬件配置可能是多种多样的,CPU、内存、组件的性能和数量都可能不同.

对测试对象的依赖不仅要考虑在不同设备上的可执行性,重点要考虑测试覆盖率,由于设备组件的增多你的用例可能无法覆盖到这些组件,或者捕捉不到某个性能瓶颈,这样测试结果的可靠性也大打折扣.

case的可重用性

自动化用例的开发通常是一项费时的工作,它需要的时间会是手动执行用例的10倍、20倍甚至更多. 我们通过搭建测试框架和封装资源库来实现最大范围的可重用性.

这里我考虑用例的可重用性包括两块:逻辑层的抽象和业务层的重用.

对一个产品或者功能进行自动化工作时,我们要考虑这些可用性:首先根据测试逻辑的不同对测试用例进行分类,根据逻辑的不同选择搭建有针对性的case框架,Work Flow, Data Driven等.

建立公共的库,将业务的原子操作抽象出来,并且鼓励其他同事对库进行补充和调用,避免duplicated库开发.抽象的A PI通常需要足够的原子和灵活才会被大众所接受. 基于底层API编写的业务操作也具备可重用性,比方说测试场景(背景资源)的建立、工作流的操作组合、检查点都可以被复用. 层次分明的抽取时重用性的基础,提高可重用性可以减少开发时间,也方便日后的维护中的迭代修改.

case的效率

不同的case执行时间相距甚远,短则数秒长则数小时甚至数天,数秒钟的简单功能测试用例和稳定性测试耗时数天的用例本身是没有什么可比性的.但是我当我们放眼某一个或者某一组case时,我们需要重视效率.不论是敏捷还是持续集成都讲究快速的反馈,开发人员能在提交代码后快速的获得测试结果反馈,测试人员能在最短的时间内执行更大范围的测试覆盖,不仅能提高团队的工作效率也可增强团队的信心.

在编写用例时我们应该注意哪些方面来提高用例的性能?

对于单一的case我的注意点多放在一些细节上,例如:

1.执行条件的检查,如果检查失败,则尽快退出执行.

2.将执行环境搭建或者资源建立和清除抽取到suite甚至folder level, 抽取时可能需要做一些组合, 但决不允许出现重复的建删操作.

3.用例中不允许出现sleep,sleep通常紧接着hard code的时间,不仅效率低还会因为环境的切换使得执行失败.建议用"wait until ..."来代替.

4.如有不可避免的sleep,我通常会再三确认其是否清楚它的必要性.

对于批量的case,我们要如何才能获得更高的效率呢?

1.首先我们考虑到可以并行的执行一组case来提高效率,并行方案总有着严苛的条件:

2.为了获得更快的反馈,我们将软件质量分为0~10级,对应的把测试用例分为6~10级,从普通的功能测试开始测试复杂度逐级递增.

不同的开发阶段或者是针对不同的测试目的我们就可以有选择的调用不同级别的用例.比方说我们调用6级的case s来测试新功能代码作为冒烟测试的用例集;软件人员修改了BUG,我可以根据BUG的复杂度选择7和8级的用例来验证,系统级测试时我们又会主要测试8和9级的用例.

分级可以灵活调度用例,并给出更快的反馈,加速迭代过程.

3.基于风险的测试

基于风险的测试简单的说就是根据优先级来选择需要运行的测试,优先级根据两个最基本的维度:

功能点发生错误的概率,以及发生错误后的严重性,根据两者分值的乘积来排序优先级.

一般从用例失败率,bug统计,出错的代码段,更新的代码段来考虑调度.比方说根据BUG修改的代码段和功能区域来选择对应的测试.开发人员通常反对这种方式,只有100%的测试覆盖才能给他们足够的信心.

以上是个人的一些积累,由于框架的限制一些建议不一定适用于你的实际工作. 如果你有什么建议欢迎留言. Thx!

4、自动化测试的基本流程

自动化测试的基本流程包括:测试需求分析、测试计划、测试用例设计、执行测试、测试结果的评估。

自动化测试与人工测试的不同之处在于前者在完成测试计划后就需要搭建测试环境和测试场景,在测试用例设计时所示。

使用自动化测试在各个阶段需要注意的事项如下:

1)需求分析阶段:

假如测试项目确定在该项目中需要使用自动化测试,我们就需要进行自动化测试需求分析的设计,并在《测试需求说明书》补充说明。

2)测试计划:

在测试计划中需要确定自动化测试使用的阶段、测试范围以及相应的测试用例、测试数据的准备方式,便于自动化测试的建立。确定测试所使用的测试技术及测试体系结构,建立测试程序与测试需求之间的联系(一般使用测试管理工具如QC进行关联),确定哪些测试使用自动测试方法、工具,以及测试数据的准备,决定如何进行自动化测试以及测试方法等。

3)自动化测试环境的搭建。

4)编写自动化测试用例并编写测试脚本(建议测试脚本使用管理工具控制管理):

这个阶段有一个重要问题需要解决,即准备数据,如系统的基础数据、用户、权限等,没有这些数据就无法登录和执行其他操作。

5)强化测试脚本,保证测试脚本的可用性

6)测试结果需要注意保存方式:

测试执行结束后,需要对测试结果进行比较、分析以及结果验证,得出测试报告。其中总结性报告是提供给被测方的中高层管理者及客户的,而详细报告作为反馈文档提供给开发小组成员.

考试系统测试用例

在线考试管理系统 产品简介 本产品可供各类学校、培训机构进行考试管理使用。 本产品具备在线考试管理、考卷管理、试题管理、手工及自动组卷、标准试卷打印、自动阅卷、成绩管理等多项功能。 产品结构 管理员:教师管理、班级管理、试题分级、题目种类、题型管理、难度管理 教师:学生管理、题库管理、组卷管理、考试管理、考试监控、评卷管理、成绩管理 学生:在线考试、成绩查询 产品特点 A、完善的权限管理——有完善的权限设置分配功能,使不同人员具有不同的操作查看权限,保证系统使用的安全性,更易于管理。 B、不断扩展的资源库——在线考试可增加考试类别、题目类别,扩充考题。 C、丰富考试的内容——在线理论考试支持多种多媒体题目。 D、强大的组卷功能——试题随机抽取的自动方式和人工选题的手工方式并用,实现快速组卷,轻松组卷,灵活组卷。 E、出卷方便快捷,省时省力——计算机组卷后导出为Word格式,并以A3/A4版式打印。 F、两种阅卷方式——客观题系统自动阅卷,主观题可在线阅卷,提高阅卷的准确性,同时提升工作效率。 G、监考功能——在线考试中,将设计防拷贝、防切屏、锁定IP、监控在线状态等功能,保证考试的公平和顺利进行。 H、数据保护——考试系统平台设计缓存系统,数据实时保存,保证系统永不丢失数据。 I、批量导入数据——包括试题、人员、部门、试卷等各种信息,达到快速建立考试平台的目的。

1.1测试步骤1.1.1题库 增加 删除 修改

查询 1.1.1.1试题管理 增加 删除

修改 查询 1.1.1.1.1试题属性增加 删除

修改 查询 1.1.1.1.1.1题型增加 删除

图书馆管理系统测试用例模板

图书馆管理系统测试用例模板 图书馆管理系统测试用例模板 项目名称 文件状态: 文件标识: [ ? ] 待定稿当前版本: [ ? ] 正式发布作者: [ ? ] 正在修改完成日期: 图书馆管理系统测试用例 版本控制和用例跟踪 作者版本号更改内容备注测试人员1 V0.1 创建,未评审测试人员1 V1.0 已评审测试人员2 V1.1 修改测试用例需求变更 第 2 页共 20 页 图书馆管理系统测试用例 目录 1 引 言 ..................................................................... (4) 1.1 编写目 的 ..................................................................... ...................................................... 4 1.2 背 景 ..................................................................... .............................................................. 4 1.3 术语与缩写解

释 ..................................................................... .......................................... 4 1.4 参考资 料 ..................................................................... ...................................................... 4 2 测试环 境 ..................................................................... ............................................................. 4 2.1 硬件 ..................................................................... .............................................................. 4 2.2 测试软 件 ..................................................................... ...................................................... 4 3 测试用 例 ..................................................................... ............................................................. 5 3.1 功能首字母缩写+功能名称...................................................................... ....................... 5 3.2 SAMPLE1-----SH001售汇新增页 面 ..................................................................... ......... 6 3.3 SAMPLE2-----JYJLCX001交易记录查询页面............................................................ 14 3.4 SAMPLE3-----XTDK001信托贷款流程测 试 .............................................................. 18 4 用例审核互查...................................................................... ................................................... 19 5 检查

最新测试用例实例

测试用例实例 1、一个好的用例的表述要点,即用例中应当包含的信息 一个优秀的测试用例,应该包含以下信息: 1)软件或项目的名称 2)软件或项目的版本(内部版本号) 3)功能模块名 4)测试用例的简单描述,即该用例执行的目的或方法 5)测试用例的参考信息(便于跟踪和参考) 6)本测试用例与其他测试用例间的依赖关系 7)本用例的前置条件,即执行本用例必须要满足的条件,如对数据库的访问权限 8)用例的编号(ID),如可以是软件名称简写-功能块简写-NO.。 9)步骤号、操作步骤描述、测试数据描述 10) 预期结果(这是最重要的)和实际结果(如果有BUG管理工具,这条可以省略)11)开发人员(必须有)和测试人员(可有可无) 12)测试执行日期 2、实例 该测试案例是以一个B/S结构的登录功能点位被测对象,该测试用例为黑盒测试用例。假设用户使用的浏览器为IE6.0 SP4。 功能描述如下: 1.用户在地址栏输入相应地址,要求显示登录界面; 2.输入用户名和密码,登录,系统自动校验,并给出相应提示信息; 3.如果用户名或者密码任一信息未输入,登录后系统给出相应提示信息; 4.连续3次未通过验证时,自动关闭IE。 表4-1登录界面测试用例

自动取款机取款用例规约和测试用例 取款用例说明: 此用例完成用户利用自动取款机取款的全部流程,分为以下流程:插卡,输入密码,选择金额,取款,取卡等操作。 事件流: 该用例在用户插卡之后启动 1. 系统提示用户插卡; 2. 提示客户输入密码信息; 3. 密码输入完毕后,客户选择“确认”,向系统提交信息; 4. 系统验证客户输入的密码信息,确认正确后,进入选择系统主界面; 5. 用户选择取款选项; 6. 系统进入取款金额界面并提示用户输入金额; 7. 系统验证可以取款并输出钱款; 8. 系统提示用户取卡,操作完成。 基本流: 用户取款。 备选流: 1.用户密码错误 2.取款金额不符合要求。 前置条件: 用户必须插入正确的银行卡才能开始执行用例。

教务管理系统课程设计报告

教务管理系统课程 设计报告

教务综合管理系统设计报告 专业:软件工程 成员:车振军陆建伟 徐蕾杨思倩指导老师:徐明 日期: -6-15

一、引言 1.1 目的 为了保证项目小组能够按时完成小组任务及目标,便于项目小组成员更好地了解项目情况,使项目小组开展的各个过程合理有序,因此确定各个项目模块的开发情况和主要的负责人,供各项目模块的负责人阅读,做到及时协调,按步有序进行项目的开发,减少开发中的不必要损失。 预期的读者是设计人员、开发人员、项目管理人员、测试人员和用户。 1.2 背景 高校教务管理工作是高等教育中的一个极为重要的环节,是整个院校管理的核心和基础。面对种类繁多的数据和报表,手工处理方式已经很难跟上现代化管理的步伐,随着计算机及通讯技术的飞速发展,高等教育对教务管理工作提出了更高的要求。尽快改变传统的管理模式,运用现代化手段进行科学管理,已经成为整个教育系统亟待解决的课题之一。 教务管理系统是一个大型复杂的计算机网络信息系统,满足各类高校现在和将来对信息资源采集、存储、处理、组织、管理和利用的需求,实现信息资源的高度集成与共享,实现信息资源的集中管理和统一调度。为各级决策管理部门提出准确、及时的相关信息和快捷、方便、科学的决策分析处理系统;为信息交流、教务管理提供一个高效快捷的电子化手段;最终达到进一步

提高各级领导科学决策水平,提高各院系、各部门管理人员管理水平与办公效率,减轻工作负担的目的。 教务管理系统面向管理员、教师和全校学生,实现学生管理、教师管理、课程管理、成绩处理。 1.3 定义 1.3.1 MySQL MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,当前属于 Oracle 旗下公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 MySQL所使用的 SQL 语言是用于访问数据库的最常见标准化语言。MySQL 软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,特别是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。1.3.2 MyEclipse MyEclipse,是在eclipse 基础上加上自己的插件开发而成的功能强大的企业级集成开发环境,主要用于Java、Java EE以及移动应用的开发。MyEclipse的功能非常强大,支持也十分广泛,特别是对各种开源产品的支持相当不错。 二、需求分析 2.1 功能需求 2.1.1 系统目标

第一组_图书管理系统测试用例

图书管理系统测试用例 河南大学软件学院软件测试班第一小组 测试人员:高扬 蔡一搏 王骁原 孟方超 测试时间:2012年3月12日 目录 0. 文档介绍 5 0.1 文档目的 5 0.2 文档范围 5 0.3 读者对象 5 0.4 参考文献 5 1. 接口-路径测试用例 6 1.1 被测试对象(单元)的介绍 6 2. 功能测试用例 8 2.1 被测试对象的介绍 8 2.2 测试范围与目的 8

2.3 测试环境与测试辅助工具的描述 8 2.5 功能测试用例 8 3. 健壮性测试用例 9 3.1 被测试对象的介绍 9 3.2 测试范围与目的 9 3.3 测试环境与测试辅助工具的描述 9 3.4 测试驱动程序的设计 9 3.5 容错能力/恢复能力测试用例 9 4. 图形用户界面测试用例 11 4.1 被测试对象的介绍 11 4.2 测试范围与目的 11 4.3 测试环境与测试辅助工具的描述 11 4.5 测试人员分类 11 4.6 用户界面测试的检查表 11 附录:评审意见 16

0. 文档介绍 该文档主要记录进行图书管理系统系统测试的所有测试用例 包括功能性测试与非功能性测试 0.1 文档目的 该文档为系统测试人员提供测试工作依据。 系统能否发布给用户(河南大学),取决于测试用例的通过率。 (1)功能性测试用例通过率达到100%; (2)非功能性测试用例通过率达到95%。 0.2 文档范围 定义系统测试阶段所有的测试用例。 0.3 读者对象 详细设计人员 系统测试人员 质量品质管理员 0.4 参考文献 《图书管理系统概要设计报告》, 《图书管理系统系统测试计划》

软件测试中UI测试及其测试用例设计

界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉,相反由于界面设计的失败,让用户有挫败感,再实用强大的功能都可能在用户的畏惧与放弃中付诸东流。目前界面的设计引起软件设计人员的重视的程度还远远不够,直到最近网页制作的兴起,才受到专家的青睐。而且设计良好的界面由于需要具有艺术美的天赋而遭拒绝。 目前流行的界面风格有三种方式:多窗体、单窗体以及资源管理器风格,无论那种风格,以下规则是应该被重视的。 按钮名称应该易懂,用词准确,屏弃没楞两可的字眼,要与同一界面上的其他按钮易于区分,能望文知意最好。理想的情况是用户不用查阅帮助就能知道该界面的功能并进行相关的正确操作。 易用性细则: 1) 完成相同或相近功能的按钮用Frame框起来,常用按钮要支持快捷方式。 2) 完成同一功能或任务的元素放在集中位置,减少鼠标移动的距离。 3) 按功能将界面划分局域块,用Frame框括起来,并要有功能说明或标题。 4) 界面要支持键盘自动浏览按钮功能,即按Tab键的自动切换功能。 5) 界面上首先应输入的和重要信息的控件在Tab顺序中应当靠前,位置也应放在窗口上较醒目的位置。 6) 同一界面上的控件数最好不要超过10个,多于10个时可以考虑使用分页界面显示。 7)分页界面要支持在页面间的快捷切换,常用组合快捷键Ct r l+Tab 8) 默认按钮要支持Ent er及选操作,即按Ent er后自动执行默认按钮对应操作。 9) 可写控件检测到非法输入后应给出说明并能自动获得焦点。 10) Tab键的顺序与控件排列顺序要一直,目前流行总体从上到下,同时行间从左到右的方式。 11) 复选框和选项框按选择几率的高底而先后排列。 12) 复选框和选项框要有默认选项,并支持Tab选择。 13) 选项数相同时多用选项框而不用下拉列表框。 14) 界面空间较小时使用下拉框而不用选项框。 15) 选项数叫少时使用选项框,相反使用下拉列表框。

Challenge图书管理系统测试用例

Challenge图书管理系统测试用例

{凌鹏图书管理系统系统} {测试用例} 版本历史 机构公开信息

目录 0. 文档介绍 ....................................................................... - 5 -0.1文档目的. (5) 0.2文档范围 (5) 0.3读者对象 (5) 0.4参考文献 (6) 0.5术语与缩写解释 (6) 1. 接口-路径测试用例...................................................... - 6 -1.1被测试对象(单元)的介绍.......................... 错误!未定义书签。 1.2测试范围与目的 ........................................... 错误!未定义书签。 1.3测试环境与测试辅助工具的描述................... 错误!未定义书签。 1.4测试驱动程序的设计 .................................... 错误!未定义书签。 1.5接口测试用例............................................... 错误!未定义书签。 1.6路径测试的检查表........................................ 错误!未定义书签。 2. 功能测试用例 ................................................................ - 6 -2.1被测试对象的介绍.. (6) 2.2测试范围与目的 (7) 2.3测试环境与测试辅助工具的描述 (8) 2.4测试驱动程序的设计 (8)

测试用例设计

举例1、保险费率计算(按照输入域划分等价类的例子): ?某保险公司承担人寿保险,该公司保费计算方式为:保费=投保额*保险率,保险率依点数不同而有别,10点以上(含10点)费率为0.6%,10点以下费率为0.1%?点数的计算是年龄、性别、婚姻、抚养人数所得的点数的总和 ?输入:年龄、性别、婚姻、抚养人数 ?输出:保险率 输入数据说明: 解答: 第一步:输入和输出变量确认 ?输入:年龄、性别、婚姻、抚养人数 ?输出:保险率 ?等价类划分原则:按照输入变量来确认等价类(有效等价类和无效等价类) 第二步:等价类划分

a t i m e a 第三步:设计测试用例 1、设计测试用例,尽可能的覆盖尚未覆盖的有效等价类。 (1)(8)(10)(12) (2)(9)(11)(13) (3)(8)(10)(14) 2、设计测试用例,使得每一个新设计的测试用例只包含一个无效等价类,其他的选择有效等价类。 (4)(8)(10)(12) (5)(9)(11)(13) (6)(8)(10)(14) (7)(8)(10)(14) (1)(8)(10)(15) (2)(9)(11)(16) (3)(8)(10)(16) 说明:在设计无效部分的测试用例的时候,有效等价类部分,可以任意选择。 思考:若使用边界值法可以增加哪些用例?是否可以用判定表方法设计测试用例? 举例2(因果图法设计测试用例):某电力公司有A 、B 、C 、D 四类收费标准,其规定如下图所示,使用因果图法设计测试用例: 用电类别用电额度用电期间收费类型<100度/月—— A 类居民用电 >=100度/月B 类<10000度/月非高峰期B 类>=10000度/月非高峰期C 类<10000度/月高峰期C 类动力用电 >=10000度/月 高峰期D 类

教务管理系统-软件需求分析

软件需求分析报告 教务管理系统 学生姓名__ __ 学号 专业班级 院(系) 指导教师 完成时间 成绩

前言 项目小组分工: 需求分析、文档的整理及后期的功能测试。 教务管理系统的建模实现。 伴随着高校信息化建设的日益完善,高等学校的教务管理系统在高校管理中越来越受到老师和学生的青睐。高等学校的教学管理系统功能全面、操作简单快捷,可以为学生和老师建立电子档案,并且便于实时修改、保存和查看,实现了无纸化存档,为学校节省了大量的资金和空间。学生可以通过教务管理系统方便快捷地查询自己的个人信息,进行网上查询课表、成绩以及报考的事宜。因此结合现有教务系统的优点,制作此教务管理系统。

目录 一、项目前景文档 (1) 1.业务需求 (1) 1.1 业务背景 (1) 1.2 业务目标和成功条件 (1) 1.2.1 业务目标(Business Objective,BO) (1) 1.2.2 业务成功条件(Success Crite,SC) (1) 1.3 业务风险(Risk,RI) (2) 2. 解决方案的背景 (2) 2.1 前景陈述 (2) 2.2 主要的系统特征(Feature) (2) 2.3 假设(Assumption)和依赖(Dependency)条件 (3) 3.项目范围和限制 (3) 3.1 初始和后继版本的范围 (3) 3.2 限制和排除条件 (4) 4.业务环境 (4) 4.1涉众档案 (4) 4.2项目的优先级 (5) 4.3运行环境(Operating Environment OE) (6) 二、软件需求规格说明书 (6)

1. 引言 (6) 1.1概述 (6) 1.2背景 (7) 1.3定义 (7) 1.4参考资料 (8) 2. 任务概述 (8) 2.1目标 (8) 2.2运行环境(Operating Environment,OE) (8) 2.3假定(Assumption)和约束(Constraint) (9) 3. 需求规定 (9) 3.1.对功能的规定 (9) 3.1.1.用户需求 (9) 3.1.2.系统需求 (19) 3.2.非功能性需求 (30) 性能需求(Performance) (30) 安全设施需求(SAfety) (31) 安全性需求(Security) (31) 软件质量属性 (31) 3.3.外部接口需求 (31) 用户界面(User Interfaces,UI) (31) 硬件接口(Hardware Interfaces,HI) (31) 软件接口(Software Interfaces,SI) (32)

Challenge-图书管理系统测试用例

C h a l l e n g e-图书管理系统 测试用例 -标准化文件发布号:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

{凌鹏图书管理系统系统} {测试用例} 版本历史 机构公开信息

目录 0. 文档介绍.......................................................................................................... - 3 - 0.1文档目的 (3) 0.2文档范围 (3) 0.3读者对象 (3) 0.4参考文献 (3) 0.5术语与缩写解释 (3) 1. 接口-路径测试用例 ........................................................................................ - 4 - 1.1被测试对象(单元)的介绍 ................................................... 错误!未定义书签。 1.2测试范围与目的 .................................................................... 错误!未定义书签。 1.3测试环境与测试辅助工具的描述 ............................................ 错误!未定义书签。 1.4测试驱动程序的设计 ............................................................. 错误!未定义书签。 1.5接口测试用例........................................................................ 错误!未定义书签。 1.6路径测试的检查表................................................................. 错误!未定义书签。 2. 功能测试用例................................................................................................... - 4 - 2.1被测试对象的介绍. (4) 2.2测试范围与目的 (4) 2.3测试环境与测试辅助工具的描述 (5) 2.4测试驱动程序的设计 (5) 2.5功能测试用例 (5) 3. 健壮性测试用例 .............................................................................................. - 15 - 3.1被测试对象的介绍.. (15) 3.2测试范围与目的 (15) 3.3测试环境与测试辅助工具的描述 (15) 3.4测试驱动程序的设计 (15) 3.5容错能力/恢复能力测试用例 (15) 4. 性能测试用例.................................................................................................. - 16 - 4.1被测试对象的介绍.. (16) 4.2测试范围与目的 (16) 4.3测试环境与测试辅助工具的描述 (16) 4.4测试驱动程序的设计 (16) 4.5性能测试用例 (16) 5. 图形用户界面测试用例.................................................................................... - 17 - 5.1被测试对象的介绍.. (17) 5.2测试范围与目的 (17)

测试用例实例

测试用例实例 Corporation standardization office #QS8QHH-HHGX8Q8-GNHHJ8

测试用例实例 1、一个好的用例的表述要点,即用例中应当包含的信息 一个优秀的用例,应该包含以下信息: 1)软件或项目的名称 2)软件或项目的版本(内部版本号) 3)功能模块名 4)测试用例的简单描述,即该用例执行的目的或方法 5)测试用例的参考信息(便于跟踪和参考) 6)本测试用例与测试用例间的依赖关系 7)本用例的前置条件,即执行本用例必须要满足的条件,如对的访问权限 8)用例的编号(ID),如可以是软件名称简写-功能块简写-NO.。 9)步骤号、操作步骤描述、测试数据描述 10) 预期结果(这是最重要的)和实际结果(如果有BUG管理工具,这条可以省略)11)开发人员(必须有)和测试人员(可有可无) 12)测试执行日期 2、 该测试案例是以一个B/S结构的登录功能点位被测对象,该测试用例为黑盒测试用例。假设用户使用的浏览器为IE6.0 SP4。 功能描述如下: 1.用户在地址栏输入相应地址,要求显示登录界面; 2.输入用户名和密码,登录,系统自动校验,并给出相应提示信息; 3.如果用户名或者密码任一信息未输入,登录后系统给出相应提示信息; 4.连续3次未通过验证时,自动关闭IE。

取款用例说明: 此用例完成用户利用自动取款机取款的全部流程,分为以下流程:插卡,输入密码,选择金额,取款,取卡等操作。 事件流: 该用例在用户插卡之后启动 1. 系统提示用户插卡; 2. 提示客户输入密码信息; 3. 密码输入完毕后,客户选择“确认”,向系统提交信息;

软件测试用例实例(非常详细)汇总

软件测试用例实例(非常详细)汇总

1、兼容性测试 在大多数生产环境中,客户机工作站、网络连接和数据库服务器的具体硬件规格会有所不同。客户机工作站可能会安装不同的软件例如,应用程序、驱动程序等而且在任何时候,都可能运行许多不同的软件组合,从而占用不同的资源。 测试 目的 配置说明操作系 统 系统 软件 外设应用软件结果 服务器Windo w2000( S) Windo wXp Windo w2000( P) Windo w2003 用例编号TestCase_LinkWorks_W orkEvaluate 项目名称LinkWorks

1.1.

1.2. 疲劳强度测试用例 强度测试也是性能测试是的一种,实施和执行此类测试的目的是找出因资源不足或资源争用而导致的错误。如果内存或磁盘空间不足,测试对象就可能会表现出一些在正常条件下并不明显的缺陷。而其他缺陷则可能由于争用共享资源(如数据库锁或网络带宽)而造成的。强度测试还可用于确定测试对象能够处理的最大工作量。测试目的 测试说明 前提条件连续运行8小时,设置添加 10用户并发 测试需求输入/ 动作 输出/响应是否正常运行 功能1 2小时 4小时 6小时 8小时功能1 2小时 4小时 6小时

8小时 一、功能测试用例 此功能测试用例对测试对象的功能测试应侧重于所有可直接追踪到用例或业务功能和业务规则的测试需求。这种测试的目标是核实数据的接受、处理和检索是否正确,以及业务规则的实施是否恰当。主要测试技术方法为用户通过GUI (图形用户界面)与应用程序交互,对交互的输出或接受进行分析,以此来核实需求功能与实现功能是否一致。 用例标识LinkWorks_ WorkEvaluate _02 项目 名称 https://www.wendangku.net/doc/d516561975.html, 开发人员模块 名称 WorkEvaluate 用例参考工作考核系统界面设计

胡剑峰:图书馆管理系统测试用例(面向过程)

《图书馆管理系统》测试用例文档 2010年10月28日

目录 0. 文档介绍 (4) 0.1文档目的 (4) 0.2文档范围 (4) 0.3读者对象 (4) 0.4参考文献 (4) 1. 接口-路径测试用例 (5) 1.1被测试对象(单元)的介绍 (5) 1.2测试范围与目的 (5) 1.3测试环境与测试辅助工具的描述 (5) 1.4测试驱动程序的设计 (5) 1.5接口测试用例 (6) 1.6路径测试的检查表 (7) 2. 功能测试用例 (8) 2.1被测试对象的介绍 (8) 2.2测试范围与目的 (8) 2.3测试环境与测试辅助工具的描述 .............................................. 错误!未定义书签。 2.4测试驱动程序的设计.................................................................. 错误!未定义书签。 2.5功能测试用例 (8) 3. 健壮性测试用例 (10) 3.1被测试对象的介绍 (10) 3.2测试范围与目的 (10) 3.3测试环境与测试辅助工具的描述 .............................................. 错误!未定义书签。 3.4测试驱动程序的设计.................................................................. 错误!未定义书签。 3.5容错能力/恢复能力测试用例 (10) 4. 性能测试用例 (11) 4.1被测试对象的介绍 (11) 4.2测试范围与目的 (11) 4.3性能测试用例 (11) 5. 图形用户界面测试用例 (12) 5.1被测试对象的介绍 (12) 5.2测试范围与目的 (12) 5.3用户界面测试的检查表 (12) 6. 信息安全性测试用例 (13)

教务管理系统测试计划

软件测试计划说明书 §1. 引言 1.1.编写目的 本计划是教务管理系统的总体测试计划。目的是说明各种测试阶段任务、人员分配和时间安排、工作规范等。也是为以后的测试设计、测试开发、测试执行、测试评估有所标准。 1.2.项目背景 a.本项目的名称为教务管理系统; b.本项目是由计算机科学与技术学院08计11班郭琼、王娟、何婷婷、李姣、金欢欢、褚强、孙超为了进行软件测试实训而进行开发的。 1.3.定义 功能名+界面名(每个字第一个汉语拼音大写)+编号 例如:登录第一个用例DL0001 测试用例文件名命名规则 模块名+测试用例 例如:学生模块学生测试用例 黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。 白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。这一方法是把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序

所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。 静态方法是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来找错。静态方法通过程序静态特性的分析,找出欠缺和可疑之处,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变量、空指针的引用和可疑的计算等。静态测试结果可用于进一步的查错,并为测试用例选取提供指导 动态方法是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能,这种方法由三部分组成:构造测试实例、执行程序、分析程序的输出结果。 组件功能测试 组建功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。 业务测试,在单元测试的基础上,将所有业务流程的模块按照设计要求(如根据结构图〕组装成为子系统或系统,进行测试。 就是将业务测试完后的系统进行进一步的业务流程测试,例如:在线人数和系统反包括:各个功能点是否以实现,业务流程是否正确。 例如:进行一些评判学生成绩的数据库操作时,数据库会不会正常运行。 例如:估计总代码行数为6000行缺陷数为30个, 那么测试缺陷密度=1000×30/6000=5。 目标是测试缺陷密度小于1。 可以到达运行基本不出BUG,可以正常使用。 1.4.运行环境 测试工具:Junit 运行工具:Myeclipse,Tomcat 数据库:DB2

在线考试系统测试计划

在线考试系统测试计划 2016年06月01日

文档名称: 测试计划 作者:脱颖龙日期:2016-06-01 审核:日期: 批准:日期:

目录 目录 0 第一章总论 0 1.1 项目背景 0 1.2 项目目标 0 1.3 系统视图 (1) 1.4 文档目的 (1) 1.5 文档摘要 (2) 第二章测试策略 (3) 2.1 整体策略 (3) 2.2 测试范围 (4) 2.3 风险分析 (5) 第三章测试方法 (6) 3.1 里程碑技术 (6) 3.2 测试用例设计 (6) 3.3 测试实施过程 (6) 3.4 测试方法综述 (7) 第四章附件 (7) 第五章变更记录 (7)

第一章总论 1.1 项目背景 传统的考试方式一般要经过人工出卷、考生考试、人工阅卷等过程。对于一些课程来说,随着考生数量的增加,教师出卷阅卷的工作量将会越来越大,并且其工作十分烦琐和非常容易出错。在线考试系统课题产生的背景是当今教育信息化的趋势及我国高校教育信息化系统的建设,目的是充分利用学校现有的计算机软、硬件和网络资源实现无纸化考试以避免传统手工考试的不足。与传统考试模式相比,网上考试渗入了更多的技术环节,对实现安全性的途径、方法也提出了更高的技术要求。通过Internet来实现网上考试,是现代教育技术的一个具体实现,具有很重要的现实意义。可以实现教考分离以及考务工作的全自动化管理,可以有效利用校园网的软硬件资源,使其发挥最大效力,更好的为学校的教学、科研、管理服务,可以大规模的实行考试,实现考试的客观性、公证性,自动化组卷、阅卷可以减轻教师的工作强度。传统考试要求老师刻试卷、印试卷、安排考试、监考、收集试卷、评改试卷、讲评试卷和分析试卷。这是一个漫长而复杂的过程,已经越来越不适应现代教学的需要。在线考试系统是传统考场的延伸,它可以利用网络的无限广阔空间,随时随地的对学生进行考试,加上Web数据库技术的利用,大大简化了传统考试的过程。 1.2 项目目标 通过在线考试系统,实现学生在线考试,教师在线出题,阅卷的功能。

工作中常见的界面测试(UI测试)用例设计总结

大家在编写测试用例时,往往分不清什么是UI,什么是功能。最近特意整理了工作中经常进行的UI测试项。UI测试内容包括以下内容: 1.窗口测试主要测试内容如下: 窗口与窗口之间的调用情况; 窗口尺寸变化时窗口中控件能否自适应; 多个窗口同时打开和调用的情况; 窗口拖动是否正常; 主窗口和子窗口调用能否正常处理; 窗口能否根据浏览器大小进行缩放【双击浏览器、浏览器最大化、最小化和还原查看窗口的变化情况】; 窗口显示标题是否正确。 2. 工具条测试主要测试内容如下: 工具条能否正常显示; 工具条能否隐藏; 可移动工具条在窗口中间位置其形状是否正确; 工具栏上工具按钮功能是否能正常实现; 工具按钮显示是否正确、友好、醒目易懂; 工具栏上的工具按钮是否有鼠标悬停提示; 工具栏上的工具按钮是否可以任意定制; 是否有输入框; 是否有个人用工具条; 是否有网站型工具条; 是否有专项型工具条; 是否有企业型工具条。 3. 工具条测试主要测试内容如下: 输入正常的字母或数字; 输入已存在的文件的名称; 输入超长字符,例如在“名称”框中输入超过允许边界个数的字符,假设最多255个字符,尝试输入256个字符,检查程序能否正确处理; 输入默认值,空白,空格; 若只允许输入字母,尝试输入数字;反之;尝试输入字母; 利用复制,粘贴等操作强制输入程序不允许的输入数据; 输入特殊字符集,例如,NUL及\n等; 输入特殊字符集,例如,NUL及\n等; 输入不符合格式的数据,检查程序是否正常校验,如,程序要求输入年月日格式为 yy/mm/dd,实际输入yyyy/mm/dd,程序应该给出错误提示; 输入非法数据; 输入默认值; 输入特殊字符集; 输入使缓冲区溢出的数据; 输入相同的文件名; 输入超过文本框长度的字符或文本,检查所输入的内容是否正常显示。 4. 菜单测试主要测试内容如下: 菜单项是否符合需求,能否正常工作,是否与实际执行的内容一致;

教务管理系统需求规格说明书

软件工程大作业 《教务管理系统》 需求规格说明书 班级:142012 小组成员:张烜仪 鲍健昕 杨鑫 安娜 王港 目录 1 引言 ....................................................... 错误!未定义书签。

目的..................................................... 错误!未定义书签。 文档格式................................................. 错误!未定义书签。 预期的读者和阅读建议..................................... 错误!未定义书签。 范围..................................................... 错误!未定义书签。 2.系统概述.................................................... 错误!未定义书签。 系统概述................................................. 错误!未定义书签。 总体架构................................................. 错误!未定义书签。 软件项目约束............................................. 错误!未定义书签。 3. 详细描述................................................... 错误!未定义书签。 用例描述................................................. 错误!未定义书签。 学生功能需求............................................. 错误!未定义书签。 教师功能需求......................................... 错误!未定义书签。 管理员功能需求....................................... 错误!未定义书签。 活动流图................................................. 错误!未定义书签。 学生成绩查询......................................... 错误!未定义书签。 学生选课............................................. 错误!未定义书签。 学生课表查询......................................... 错误!未定义书签。 学生成绩录入......................................... 错误!未定义书签。 教师课表查询......................................... 错误!未定义书签。 用户信息修改......................................... 错误!未定义书签。 类图概述................................................. 错误!未定义书签。 4. 非功能性需求............................................... 错误!未定义书签。 性能需求................................................. 错误!未定义书签。 数据需求................................................. 错误!未定义书签。 安全性需求............................................... 错误!未定义书签。 用户文档................................................. 错误!未定义书签。 其他需求.................................................. 错误!未定义书签。

史上最全的测试用例设计方法总结

测试用例的设计方法(全) 等价类划分方法: 一.方法简介 2.划分等价类:1)有效等价类2)无效等价类 3.划分等价类的标准: 1)完备测试、避免冗余; 2)划分等价类重要的是:集合的划分,划分为互不相交的一组子集,而子集的并是整个集合; 3)并是整个集合:完备性; 4)子集互不相交:保证一种形式的无冗余性; 5)同一类中标识(选择)一个测试用例,同一等价类中,往往处理相同,相同处理映射到"相同的执行路径"。 4.划分等价类的方法 1)在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。 2)在输入条件规定了输入值的集合或者规定了"必须如何"的条件的情况下,可确立一个有效等价类和一个无效等价类; 3)在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。

4)在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。 例:输入条件说明学历可为:专科、本科、硕士、博士四种之一,则分别取这四种这四个值作为四个有效等价类,另外把四种学历之外的任何学历作为无效等价类。 5)在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则); 5.设计测试用例 在确立了等价类后,可建立等价类表,列出所有划分出的等价类输入条件:有效等价类、无效等价类,然后从划分出的等价类中按以下三个原则设计测试用例: 1)为每一个等价类规定一个唯一的编号; 2)设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止; 3)设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。 二.实战演习 1.某程序规定:"输入三个整数a 、b 、c 分别作为三边的边长构成三角形。通过程序判定所构成的三角形的类型,当此三角形为一般三角形、等腰三角形及等边三角形时,分别作计算… "。用等价类划分方法为该程序进行测试用例设计。(三角形问题的复杂之处在于输入与输出之间的关系比较复杂。) 分析题目中给出和隐含的对输入条件的要求: (1)整数(2)三个数(3)非零数(4)正数

相关文档
相关文档 最新文档