




已阅读5页,还剩74页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件测试技术 第七章软件测试自动化 主要内容7 1软件测试自动化基础7 2何时进行自动化测试7 3如何进行测试自动化开发7 4对测试自动化的不正确期望7 5JUnit的使用7 6Winrunner的使用 7 1软件测试自动化基础 什么是软件测试自动化 只需购置一种流行的测试执行工具 记录手工测试过程 然后在需要时回放录制的过程 没这么简单 7 1软件测试自动化基础 软件测试自动化的定义 各种测试活动的管理与实施 包括测试脚本的开发与执行 以便使用一种或多种自动化测试工具来验证需求 7 1软件测试自动化基础 为什么要进行自动化测试 手工测试的局限性通过手工测试无法做到覆盖所有代码路径 许多与时序 死锁 资源冲突 多线程等有关的错误通过手工测试很难捕捉到 在系统负载 性能测试时 需要模拟大量数据 或大量并发用户等各种应用场合时 也很难通过手工测试来进行 在进行系统可靠性测试时 需要模拟系统运行十年 几十年 以验证系统能否稳定运行 也是手工测试无法模拟的 如果有大量 几千 的测试用例 需要在短时间内完成 手工测试又怎么办呢 测试可以发现错误 并不能表明程序的正确性 7 1软件测试自动化基础 为什么要进行自动化测试 机器代替人可以更频繁的测试每一次做同样的测试做更多的测试减少了烦闷的 重复性的工作 可用时间来检查结果 更多的时间用来做手工测试和寻找Bugs 7 1软件测试自动化基础 为什么要进行自动化测试 自动化可进行一些高难度的测试性能 压力 配置一致性性能测试 回归测试可重复使用稳定性增进测试人员与开发人员之间的合作伙伴关系 7 1软件测试自动化基础 什么情况下适合使用自动化测试工具 需要反复进行的工作 负载压力测试 大量的测试人员和开发人员合作完成一个产品 需要进行测试系统后台或者内部的性能特性 进而进行故障定位和性能调优 7 1软件测试自动化基础 自动化测试的局限性 定制型项目 周期很短的项目 业务规则复杂的对象 人体感观与易用性测试 不稳定的软件 涉及物理交互 7 1软件测试自动化基础 假如一个功能测试用例 手工运行需要10分钟 而为此测试用例开发脚本需要4个小时 即240分钟 那么意味着这个测试脚本要被运行24次收回成本 如果再加上测试脚本的维护工作量 10 需要重复运行40 50次 才收回成本 如果在产品的一个版本中要进行2 3轮测试 一般是需要的 这个产品需要发布15 20个版本才收回成本 所以业界常说 产品发布7个版本才收回成本 7 1软件测试自动化基础 测试自动化成本 收益分析 7 1软件测试自动化基础 手工测试与自动化测试的特点对比 在系统功能逻辑测试 验收测试 适用性测试 涉及物理交互性测试时 多采用黑盒测试的手工测试方法 单元测试 集成测试 系统负载或性能 稳定性 可靠性测试等比较适合采用TA 对那种不稳定软件的测试 开发周期很短的软件 一次性的软件等不适合测试自动化工具本身并没有想象力和灵活性 根据经验报道 自动测试只能发现15 的缺陷 而手工测试可以发现85 的缺陷 TA工具在进行功能测试时 其准确的含义是回归测试工具 因为工具不能发现更多的新问题 但可以保证对已经测试过部分进行测试的准确性和客观性 7 1软件测试自动化基础 什么测试类型能够自动化 单元测试集成测试系统测试性能测试压力测试安全测试回归测试稳定性测试 7 1软件测试自动化基础 测试自动化的基本结构 7 1软件测试自动化基础 自动化测试的原理和方法代码分析 类似于高级编译系统 在工具中定义类 对象 函数 变量等定义规则 语法规则等 在分析时对代码进行语法扫描 找出不符合编码规范的地方 代码分析是一种白盒测试的自动化方法 捕获和回放 捕获和回放则是一种黑盒测试的自动化方法 7 1软件测试自动化基础 自动化测试的原理和方法脚本技术 线性脚本 是录制手工执行的测试用例得到的脚本 这种脚本包含所有的击键 移动 输入数据等 所有录制的测试用例都可以得到完整的回放 结构化脚本 类似于结构化程序设计 具有各种逻辑结构 函数调用功能 结构化脚本易于维护 共享脚本 是指某个脚本可以被多个测试用例使用 数据驱动脚本 将测试输入存储在独立的 数据 文件中 而不是存储在脚本中 关键字驱动脚本 是数据驱动脚本的逻辑扩张 7 1软件测试自动化基础 自动化测试的原理和方法自动比较 静态比较和动态比较简单比较和复杂比较敏感性测试比较和健壮性测试比较比较过滤器测试管理 7 1软件测试自动化基础 自动化测试工具的分类 单元测试工具 PanaramaJunitC Testing负载和性能测试工具 LoadRunnerWASQALoad 7 1软件测试自动化基础 自动化测试工具的分类 功能测试工具 WinRunnerQuickTestRationalFunctionalTester测试管理工具 TestDirectorTestManagerTrackRecord 7 1软件测试自动化基础 测试工具的选择 7 2何时进行自动化测试 自动化测试投资阶段 早投资在设计时考虑 Planning M0 MajorMilestonePhaseM1 2 ReleasePhase Time TestingInvestment TestingPhase 7 3如何进行测试自动化开发 测试自动化的开发流程 自动测试决定测试工具获取自动测试引入过程测试计划 设计与开发测试执行与管理测试评审和评估 7 3如何进行测试自动化开发 自动化测试生存周期方法学 1 自动化测试决定 2 测试工具获取 3 自动化测试引入过程 4 测试计划 设计与开发 5 测试执行管理 6 测试评审与评估 A 系统生存周期过程评估与改进 F 生成维护阶段 C 小型工具先导 原型 D 系统设计与开发阶段 B 业务分析与需求阶段 E 组装与测试阶段 7 3如何进行测试自动化开发 测试自动化的开发过程中需要考虑的问题 测试需求 除用户需求外 应明确概述能够在大限度发现错误所需要的测试条件 遵循一定的测试框架 最大限度的发挥重用 7 4对自动化测试的不正确期望 我们在时间上是紧迫的 项目已经落后了 让我们使用自动化测试吧 我们要100 的实现测试自动化 我们不需要进行培训 7 4对测试自动化的不正确期望 正确认识测试自动化不现实的期望注定测试自动化的失败测试自动化能 显著降低重复手工测试的时间建立可靠 重复的测试 减少认为错误增强测试质量和覆盖率测试自动化不能 完全替代手工测试和手工测试工程师保证100 的测试覆盖率弥补测试实践的不足 7 5JUnit的使用 7 5 1JUnit简介7 5 2JUnit的设计方法7 5 2JUnit的使用步骤7 5 3测试惯例 7 5 1JUnit简介 在JUnit中编写的测试帮助你以一种极大 extreme 的步伐编写程序及快速的找出缺点 JUnit非常简单JUnit测试检验其结果并提供立即的回报 JUnit可以把测试组织成测试系列JUnit测试是开发者测试 JUnit测试是以Java写成的 形成一个介于测试及程序代码间的无缝 seamless 边界JUnit是免费的JUnit是以两个关键设计样式来设计的 指令样式 Commandpattern 及合成样式 Compositepattern TestCase是一个指令对象 任何包含测试方法的类别都是TestCase的子类别 TestCase可以定义任意数量的testXXX 方法 当你要检查期望与实际的测试结果 你激活assert 方法的各种类型 variaton 7 5 2JUnit的设计 TestCase子类别包含多个testXXX 方法 可以使用setUp 及tesrDown 方法初始化及释放测试下的任何一般的对象 这个子类别形同测试的基础设备 fixture 每一个测试在其本身基础设备的背景下执行 在每一个测试方法之前呼叫setUp 及之后呼叫tearDown 以确保没有副作用影响测试的执行 7 5 2JUnit的设计 TestCase实例对象可以合成为TestSuite层级架构 在这个TestSuite层级架构中可以自动激活定义在TestCase实例对象中的所有testXXX 方法 一个TestSuite是其它多个测试的一个合成对象 composite 其中包括TestCase实例对象及其它的TestSuite实例对象 这个由TestSuite代表的合成对象行为允许你组合测试的测试系列的测试系列到任意深度 并且自动一致性 uniformly 的执行所有测试以产出个别的通过或失败的状态 7 5 3JUnit的使用步骤 第一步编写一个测试案例第二步编写一个测试系列第三步执行测试第四步组织测试 7 5 3JUnit的使用步骤 第一步 编写一个测试案例 1 定义一个TestCase的子类别 2 覆写setUp 方法以初始化测试中的一个或多个对象 3 覆写tearDown 方法以释放测试中的一个或多个对象 4 定义一个或多个公开的testXXX 方法 这些方法检验这些测试中的对象并且评估期望的结果 7 5 3JUnit的使用步骤 范例代码1 下列是一个测试案例的范例 测试案例的范例 ExampleTestCase importjunit framework Test importjunit framework TestCase importjunit framework TestSuite publicclassShoppingCartTestextendsTestCase privateShoppingCart bookCart privateProduct defaultBook 以特定名称建构一个ShoppingCartTest 建构函数是以测试案例的名称当作参数 publicShoppingCartTest Stringname super name 7 5 3JUnit的使用步骤 范例代码2 设定测试设备在测试案例方法之前呼叫 protectedvoidsetUp bookCart newShoppingCart defaultBook newProduct ExtremeProgramming 23 95 bookCart addItem defaultBook 释放测试设备在测试案例方法之后呼叫 protectedvoidtearDown bookCart null 7 5 3JUnit的使用步骤 范例代码3 测试在cart中增加一个产品 publicvoidtestProductAdd ProductnewBook newProduct Refactoring 53 95 bookCart addItem newBook doubleexpectedBalance defaultBook getPrice newBook getPrice assertEquals expectedBalance bookCart getBalance 0 0 assertEquals 2 bookCart getItemCount 测试清空cart publicvoidtestEmpty bookCart empty assertTrue bookCart isEmpty 7 5 3JUnit的使用步骤 范例代码4 测试从cart中移除产品如果此产品不在cart中丢出一个ProductNotFoundException的例外 publicvoidtestProductRemove throwsProductNotFoundException bookCart removeItem defaultBook assertEquals 0 bookCart getItemCount assertEquals 0 0 bookCart getBalance 0 0 测试从cart中移除一个未知的产品如果ProductNotFoundException例外产生表示测试成功 publicvoidtestProductNotFound try Productbook newProduct Ender sGame 4 95 bookCart removeItem book fail ShouldraiseaProductNotFoundException catch ProductNotFoundExceptionsuccess 测试成功 7 5 3JUnit的使用步骤 范例代码5 组合并传回一个这个测试案例所有测试方法的测试系列传回一个非空值 non null 的测试系列 publicstaticTestsuite 这里使用的想法是加入所有的testXXX 方法到测试系列中 TestSuitesuite newTestSuite ShoppingCartTest class 下面是另一种作法 但增加愈多的测试案例方法愈有可能发生错误 TestSuitesuite newTestSuite suite addTest newShoppingCartTest testEmpty suite addTest newShoppingCartTest testProductAdd suite addTest newShoppingCartTest testProductRemove suite addTest newShoppingCartTest testProductNotFound returnsuite 7 5 3JUnit的使用步骤 范例代码6 执行此测试案例 Runsthetestcase publicstaticvoidmain Stringargs junit textui TestRunner run suite 范例代码结束 7 5 3JUnit的使用步骤 第二步 编写一个测试系列编写一个测试系列其中包含许多测试案例 此测试系列将允许我们从头到尾执行其所有的测试案例 编写测试系列请依循下列的步骤 1 定义一个TestCase的子类别 2 定义一个静态的suite 工厂方法 这个方法构建一个TestSuite以包含所有的测试 3 随意定义一个main 方法以批次方式执行这个TestSuite 7 5 3JUnit的使用步骤 代码范例1 下列是测试系列的范例 测试系列范例 ExampleTestSuite importjunit framework Test importjunit framework TestCase importjunit framework TestSuite publicclassEcommerceTestSuiteextendsTestCase 以特定名称建构一个EcommerceTestSuite建构函数是以测试案例的名称当作参数 publicEcommerceTestSuite Stringname super name 7 5 3JUnit的使用步骤 代码范例2 组合并传回一个测试系列包含所有已知的测试 新的测试应该在此加入传回一个非空值 non null 的测试系列 publicstaticTestsuite TestSuitesuite newTestSuite 我们在前面构建的ShoppingCartTestsuite addTest ShoppingCartTest suite 另一个测试系列的范例 在测试系列中加入其它的测试系列suite addTest CreditCardTestSuite suite returnsuite 执行此测试系列 publicstaticvoidmain Stringargs junit textui TestRunner run suite 7 5 3JUnit的使用步骤 第三步执行测试我们可以执行这个测试系列或者其中任何个别的测试案例 执行TestSuite将自动执行所有的TestCase及TestSuite实例对象 执行一个TestCase将自动激活其所有公开的testXXX 方法 JUnit提供文字及图形使用者界面 两种使用者接口都可以指出多少个测试被执行 任何错误或失败 及一个简单的完成状态 简化使用者接口是快速执行测试的关键 你应该简单了解就能够执行你的测试并知道测试的状态 就像你在编译上所做的一样 文字使用者接口 junit textui TestRunner 如果通过所有测试则显示 OK 而如果失败则显示失败讯息 图形使用者界面 junit swingui TestRunner 显示浮动窗口 如果所有测试皆通过则其中有一个进度杆显示为绿色 否则进度杆显示为红色 一般而言 TestSuite及TestCase类别应定义一个main 方法 main 利用适当的使用者接口 我们写的测试到目前为止皆定义一个main 方法来使用文字使用者接口 由main 定义的使用文字使用者接口执行我们的测试案例时 使用 javaShoppingCartTest另一种方式 使用文字使用者接口执行测试 使用 javajunit textui TestRunnerShoppingCartTest或这使用图形使用者接口时 使用 javajunit swingui TestRunnerShoppingCartTestEcommerceTestSuite可以以类似的方法执行 7 5 3JUnit的使用步骤 第四步 组织测试把测试案例建立在与我们要测试的程序代码相同的包裹 package 中 在你的原始码资料夹中避免结合应用程序与测试程序代码 建立一个镜像 mirrored 的资料夹结构对应于此包裹结构 并在镜像资料夹中存放你的测试码 为你的应用程序中的Java包裹定义一个TestSuite类别 在这个TestSuite类别中包含所有测试这个包裹内之程序的测试 定义类似的TestSuite类别 此TestSuite类别在此应用程序中的其它包裹 及子包裹 中构建高层及低层测试系列 确认你的建构程序包含所有测试的编辑物 compilation 这样做有助于确认你的测试可以保持与最后的程序代码同步以维持测试是最新的 经由在每一个Java包裹中建立一个TestSuite 在各种包裹层次中 你可以在每一个抽象层中执行一个TestSuite 例如 你可以定义一个com mydotcom AllTests执行系统中所有的测试 及定义一个com mydotcom ecommerce EcommerceTestSuite只有执行电子交易组件的测试 测试层级架构可以扩充到任意的深度 其深度与你开发系统的抽象层次有关 你可以执行一个相称的测试 只要选择你的系统层次并测试它即可 7 5 3JUnit的使用步骤 测试层级架构范例 ExampleTestingHierarchy AllTests Top levelTestSuite SmokeTestSuite StructuralIntegrityTests EcommerceTestSuiteShoppingCartTestCaseCreditCardTestSuiteAuthorizationTestCaseCaptureTestCaseVoidTestCaseUtilityTestSuiteMoneyTestCaseDatabaseTestSuiteConnectionTestCaseTransactionTestCaseLoadTestSuite PerformanceandScalabilityTests DatabaseTestSuiteConnectionPoolTestCaseThreadPoolTestCase 7 5 4测试习惯 当你测试时请谨记下面的事项 1 软件运作良好的事物都是经过测试检验的 2 测试一点点 程序代码写一点点 测试一点点 程序代码写一点点 3 请确认所有测试都能100 通过 4 每天至少执行系统中所有的测试一次 5 要测试的程序代码是最可能错误的区域 6 编写最可能回报测试投资的测试 7 如果你使用System out println 除虫 写一个测试自动检查其结果 8 如果发现臭虫 写一个测试揭露这个臭虫 9 如果下次有人要求你帮他除虫 帮他写一个测试 10 编写程序代码之前先写单元测试 而且只有当一个测试失败才写新的程序代码 7 6WinRunner的使用 WinRunner简介企业级软件功能测试工具录制 回放功能适用于不同的开发工具使用方便 脚本易于维护 7 6WinRunner的使用 两种记录 Recording 模式 7 6WinRunner的使用 WinRunnerAdd In管理WinRunner在ContextSensitive记录模式下是通过先识别GUI对象 然后根据用户操作来产生相应的Function加到Script中对于不同开发语言 环境 GUI对象的识别需要不同的Add In即使有对应的Add In WinRunner仍然不能很好地识别自己开发的GUI对象 如DelphiVCL 后面将专门讲如何解决 7 6WinRunner的使用 记录Script1 先将光标移动到要插入Script的地方2 启动要录制的Application3 按红色按钮开始录制4 停止录制 7 6WinRunner的使用 三种运行模式UpdateUpdate模式用于更新Verfiy方式允许用到的各种Checkpoint比较的基准 Baseline Checkpoint将在后面提到VerifyVerify模式指正式运行DebugDebug模式用于调试 结果都会保存在Script保存的目录下 7 6WinRunner的使用 SynchronizationPoint三种同步方式 GUI对象属性 GUI对于位图 屏幕位图 Bitmap 使用同步点主要用于测试Script的下一步必须等待某一特定条件满足后才可以运行同步最长等待时间为obj wait info制定的时间加上GeneralOption Run DelayforwindowSynchronization指定的时间在某种意义上Synchronization可以用CheckPoint来代替 7 6WinRunner的使用 Checkpoint三类CheckPoint GUI对象 Bitmap 数据库CheckPoint最长等待时间在GeneralOption Run TimeoutforCheckpointandCSstatements 7 6WinRunner的使用 数据库CheckPoint三种数据库CheckPoint Default Custom RuntimeDefault和Custom用于纯粹的数据库检查 不和前台GUI内容比较 Runtime将把数据中的内容和前台界面中的GUI对象的某一属性值进行比较Default和Custom的不同在于Custom在最后将调出CheckList编辑窗口 7 6WinRunner的使用 使用数据库CheckPoint注意使用数据库CheckPoint应该注意输入SQL的合法性 保证在CheckList编辑窗口中的属性都是可以比较的 7 6WinRunner的使用 使用RuntimeCheckPointRuntimeCheckpoint用于在运行时刻比较数据库中的内容和Application中某些GUI的特定属性是否相符注意 RuntimeCheckpoint只能直接比较 对于某些经过转换 若TRUE则某个Checkbox被选中这类是无法比较的 如果要进行这类比较 可以考虑先使用GUICheckpoint 然后使用一般的数据库Checkpoint 7 6WinRunner的使用 动态更新SQL数据库Checkpoint使用的SQL语句保存在Script目录下的Chklist目录下在实际使用中 特别是使用数据驱动 数据驱动将在后面提到 时候对数据库的效验往往要修改SQL中的某一参数 对于这中情况 可以通过I OFunctions或者一段Script在进行数据库Check前修改数据库Checkpoint使用的sql语句 7 6WinRunner的使用 不使用Update方式修改BaseLineCheckPoint可以通过菜单Insert下的EditXXXCheckList来修改对于一般的数据库CheckPoint 如果由于某种特殊原因修改返回内容的baseline 可以通过菜单Tools TestResult打开任何一个测试结果双击数据库Checkpoint点打开数据库CheckResult结果窗口来修改 7 6WinRunner的使用 修改BaseLine ExpectedValue 7 6WinRunner的使用 数据驱动 DataDrived 数据驱动的来源可以有EXCEL或者TXT文件 建议不使用TXT文件数据驱动的主要函数可以看TSL帮助Data DrivenTestFunctions注意EXCEL可以采用写方式打开 这样可以把结果写回到EXCEL中 7 6WinRunner的使用 使用DataDriverWizard注意 使用Wizard前要先选择要包括的语句 7 6WinRunner的使用 选择数据表 EXCEL 保存位置 7 6WinRunner的使用 为数据选择列名称 7 6WinRunner的使用 直接在Excel中修改数据 7 6WinRunner的使用 修改DataDriver产生的语句table default xls rc ddt open table DDT MODE READ if rc E OK 注意 DDT OPEN可以采用写方式打开 7 6WinRunner的使用 使用GUIconfig使用GuiConfig的主要目的是修改WinRunner学习中的错误让WinRunner学习一些非开发环境标准控间的GUI对象 7 6WinRunner的使用 使用GUIConfig增加新的GUI类 7 6WinRunner的使用 GUI类的三类属性对于一个GUI类 WinRunner将其的属性分为三类 Available Obligatory OptionalObligatory值必须记录的属性 WinRunner一般通过Obligatory类别中的属性来区别同一窗口 或GUI容器 下同类的GUI对象Optional指可选项 当WinRunnber无法通过Obligatory中的属性来识别同一类GUI对象时候 将使用Optional中的属性 7 6WinRunner的使用 修改GUI类的识别方式 Step1 7 6WinRunner的使用 修改GUI类的识别方式 Step2对于一个新增加的GUI对象 如果可以的话 尽量从MappedtoClass中选择一个相似的类如果无法从MappedtoClass中选择一个相似的 而且在scirpt运行时发现WinRunner无法识别该对象 就要考虑修改Obligatory或Optional列表中内容 建议修改Obligatory 7 6WinRunner的使用 使用GUIMapEditor主要目的是用来修改WinRunner识别后的GUI对象的属性值 主要是使用通配符 wildcard 来替代某些属性保存和导入GUIMap文件注意 当你录制完某一Script必须保存GUIMap否则一但退出WinRunner由于GUIMap不存在 以后将很可能无法运行已前录制好的Script 建议 将GUIMap文件和Script保存在同一目录 将Script第一行使用GUI load装入Script使用到的GuiMap文件 7 6WinRunner的使用 使用通配符来识别GUI对象 7 6WinRunner的使用 通配符列表 7 6WinRunner的使用 使用自定义函数in out inout类型参数使用TSL函数要特别注意TSL并不检查你调用某一函数时候参数格式和类型是否匹配参数可以是GUI对象 7 6Win
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司法财务课件
- 资本论核心思想解读
- 快速制作行政人事汇报
- 血透长期留置导管的护理
- 《珀尔赛福涅》课件
- 输血的注意事项及护理
- 2025机械设备购销合同模板大全
- 2025司法考试合同法中合同无效与合同效力问题
- 2025融资居间合同范本含授权委托书,保密协议,融资确认函
- 永久基本农田划定工作总结
- 斯蒂芬金英语介绍
- 集团公司石油工程专业化整合重组总体方案
- JJF 1015-2014计量器具型式评价通用规范
- GB/T 8332-2008泡沫塑料燃烧性能试验方法水平燃烧法
- GB/T 38597-2020低挥发性有机化合物含量涂料产品技术要求
- 农业科学技术政策课件
- 优秀初中语文说课课件
- DB45-T 679-2017城镇生活用水定额-(高清可复制)
- 人教精通版六年级上英语Lesson15教学课件
- 五四制青岛版2022-2023四年级科学上册第二单元第6课《测量距离和时间》课件(定稿)
- GB∕T 16762-2020 一般用途钢丝绳吊索特性和技术条件
评论
0/150
提交评论