




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科毕业论文(设计)题目:基于QTP的自动化测试姓名:张海波学号:1042157124专业:计算机科学与技术院系:信息工程学院指导老师:钱丽职称学位:讲师/硕士完成时间:2014年5月12日教务处制安徽新华学院本科毕业论文(设计)独创承诺书本人按照毕业论文(设计)进度计划积极开展实验(调查)研究活动,实事求是地做好实验(调查)记录,所呈交的毕业论文(设计)是我个人在导师指导下进行的研究工作及取得的研究成果。据我所知,除文中特别加以标注引用参考文献资料外,论文(设计)中所有数据均为自己研究成果,不包含其他人已经发表或撰写过的研究成果。与我一同工作的同志对本研究所做的工作已在论文中作了明确说明并表示谢意。毕业论文(设计)作者签名:日期:安徽新华学院2014届本科毕业论文(设计)概述1.1课题研究背景按时、高质量地发布软件产品是软件开发的最基本要求,而软件测试是软件质量保证的最重要的手段之一。对于软件,不论采用什么技术和方法来进行开发,软件产品中都会存在或多或少的错误和问题[1]。于是,软件测试便扮演了极其重要的角色,贯穿于整个软件生命周期,检验各个阶段的成果是否符合质量要求和达到预先定义的目标。据大量统计资料显示,在典型的软件开发的项目中,软件测试投入的成本和工作量往往占到软件的总成本和总工作量的40%以上。传统的软件测试方式大多停留在内部测试、手工测试阶段,并不能完全适用于应用测试。由于较多的企业采用瀑布模型进行开发,往往在软件开发结束后才开始进行测试。这些都在极大程度上降低了测试的覆盖率,增加了测试的成本,影响了软件质量的可靠性[4]。因此,软件测试自动化技术的出现,从真正意义上把测试人员从简单重复的劳动中解放出来,弥补了手动测试在应付大规模测试中疲态的缺陷,尤其是面对大量的数据需要检查时,人工的比较和搜索不仅效率低,而且容易出错,覆盖面偏低。它为软件开发团队节约了测试成本,提高了软件质量,缩短了产品发布周期。1.2国内外研究现状软件测试是软件质量的护航者,只有通过了测试软件的设计、编码和规约的评审才能通过,在软件的整个生命周期中具有与软件开发相同的地位。在许多大型的软件公司,其测试人员和开发人员比例达到了1:1,甚至更多[4]。然而,在早期软件测试常常被忽视,软件经过开发人员简单的单元测试后进行发布,导致的后果可想而知。在美国北卡罗来纳大学召开的软件测试的正式技术会议,是软件测试技术发展历史上的一个转折点,它标志着软件测试成为了软件工程领域中一个独立而重要的分支。此后,Gerhart进一步总结原来的测试理论,将软件测试提升到理论的高度,作为实践性学科的参考[2]。为了更好的实现测试的自动化,用自动化测试代替手工劳动,许多IT厂商推出了以工具为中心的测试,是测试人员只需要关注脚本技术和配置文件的编写。常用的测试工具有MercuryInteractive公司的QTP、LoadRunner、TestDirectior,IBM的Web自动化测试工具RationalFunctionTester,SegueSoftware公司的Segue,Compuware公司的QACenter。这些测试工具融入了许多新的技术,如面向对象技术,当针对不同的测试重点,可以采用相应的工具[3]。国内的软件测试技术起步较晚,但随着国内软件企业规模的壮大,人才的引进和培养,越来越多的软件生产商开始在自动化测试领域中进行软件分析和测试工具的研究和开发。西北工业大学在C/S系统的测试方面进行了许多的研究工作,并且取得了一定的成绩。北京航空航天大学和北京大学经过技术的攻关,共同研制了一系列测试工具和程序理解工具,例如具有典型代表的SafePro/javao和SafeProC/C++。南京大学和航空局计算研究所开发的静态分析工具和测试用例自动生成工具,在嵌入式系统测试方面取得了较大的成功[10]。拥有自主知识产权的泽众软件是国内领先的专业功能测试工具、测试管理工具的供应商,从2004年起就推出了AutoRunner、TestCenter等优秀产品。1.3课题研究目的本文旨在通过QTP在具体案例中的使用,包括设计测试案例、录制、优化脚本功能等,来具体认识自动化测试对于普通应用软件,都可以发挥其功能测试和回归测试的优点,省去了手工测试的繁琐,更加低成本,便捷而快速的找出软件的BUG所在,是软件开发中一个不可或缺的重要的一部分。2软件缺陷与软件测试2.1软件缺陷2.1.1软件缺陷与硬件缺陷异同对于用户来说,软件缺陷与硬件缺陷一样,会对用户在使用时造成困扰。但是软件缺陷在一般情况下,不会对用户造成直接的人身伤害或经济损失,也因此很多人意识不到软件缺陷的危害性和严重性。然而在一些比较依赖软件进行业务处理的领域,便可能造成重大的经济损失,甚至危及生命,例如2007年4月,某个软件缺陷导致某地铁系统的列车火灾,软件未能检测和防止剩余动力在设备中的使用,导致车过热而起火。因此,软件缺陷与硬件缺陷一样,都需要人们重视他们可能造成的危害与损失。不同在于,硬件缺陷大多是可预见的,比较容易被发现。软件缺陷的可预见性就没有那么强,其一个重要特点就是隐蔽性。由于软件的复杂度高,状态空间广阔,因此,要覆盖软件所有的可能行为几乎是不可能的。2.1.2如何通过软件测试发现软件缺陷手工测试仍然是主要的查找错误的方式,自动化测试能部分地解决覆盖面的问题和测试效率的问题,但是不能从根本上解决问题。而在软件测试之前的开发环节中,开发人员已经对对软件进行缺陷控制,尽管大多停留在“调试”阶段的测试水平。也因此软件测试成为了软件缺陷的主要控制手段和解决方法。测试人员通过产品需求,以及用户的实际业务背景,设计出各种测试用例,通过执行测试用例,判断被测试的应用程序是否满足用户需求。在测试用例中,主要分为两种。一是验证软件功能正确的;另一种适用于证明软件错误的。如果将这这些用例转化为可被自动化测试工具执行的脚本,那么就成了一个自动化测试用例,使用自动化的方式执行,提高效率。2.2软件质量与软件测试软件质量是软件产品的核心价值体现,也是企业竞争力的体现,重视软件质量的企业通常能获得更多的收益。软件质量也是软件项目管理的重要组成部分,在不同的开发模式中,都会围绕软件质量管理提出相应的做法。1986年,ISO8492给出了质量定义:质量是产品或服务满足明示或暗示需求能力的固有特性和特征的集合。而在IBMRUP(统一过程)中,质量被定义为“满足或超出认定的一组要求,并使用经过的认可的评测方法和标准来评估,还使用认定的流程生产”。因此,质量不是简单地满足用户需求,还得包含证明质量达标所使用的评测方法及标准,以及如何实施可管理、可重复使用的流程,以确保由此流程生产的产品已达到预期的、稳定的质量水平。1983年,ANSIIEEESTD729给出了软件质量的定义[6],包括:软件产品质量满足用户要求的程度;软件各种属性的组合程度;用户对软件产品的综合反映程度;软件在使用过程中满足用户要求的程度。简而言之,功能、性能和可靠性是衡量软件质量的三个维度指标。2.2.1软件开发模式与自动化测试在不同的开发模式中,软件测试的地位和作用略有不同,但却不可能消失。在传统的瀑布开发模型中,软件测试作为一个独立的阶段出现,在进入测试阶段之前,应该完成编码并且提供完善的需求、设计和文档。如果在需求定义方面做得很好,对自动化测试十分有益,可以尽早的选择测试策略,让自动化测试高层次整体地进行。而在RUP迭代模型中,实施自动化测试时,需要与开发策略紧密结合,关注早期构建、迭代的速度、风险、覆盖目标等。敏捷方法则打破了传统的自动化测试方法,第一个破坏点集中在自动化的可接受性测试,很难被其他类型的自动化重用。细粒度的迭代让每次的测试很难击中目标和定义标准。2.3软件自动化测试与手动测试2.3.1自动化测试与手工测试比较软件测试的一个显著特点就是重复性,重复的工作除了机器人没人忍受的了。在精确性的问题上,当手动测试遭遇大量的数据需要检查的时候,数据比较和搜索定位不仅效率不高而且易出错,达不到预期的覆盖率。伴随着产品的完善,软件功能的逐步完善,需要测试的内容有时候会呈现几何倍数增长,人工进行回归测试便显得捉襟见肘。当然不意味着手动测试就这样被淘汰,手工测试有这其不可替代的地方:测试用例的设计:测试人员的经验和判断能力是一切工具不具备的界面和用户体验:人类的审美和感官及心理体验是其他无法代替的正确性的检查:工具是不具备推理和逻辑思维的。而在借助计算机强大的计算能力下,可以不知疲倦、重复的运行,对于大量的数据也能在短时间内处理结束。于是自动化测试的优势则表现如下:可重复性强(2)计算精确(3)大批量操作(4)覆盖面广(5)搜索效率高2.3.2如何开展自动化测试在软件测试的阶段,自动化测试应该被当作一个项目来开展。首先要确定所开发的软件项目采用自动化测试是否适用。短期的或者一次性的项目不宜采用,因为这反而增加开发周期和成本。同样,在一个非常紧迫的项目中也是不合适的,因为需要测试人员开发编写测试脚本,并需要开发人员的配合使得整个进程更加紧张仓促,适得其反。其次,什么时候开始自动化测试项目?不能过早,太早的话,软件不成形,界面、编码等不稳定,改动频繁,这时候开展自动化徒增成本,得不偿失。可以在雏形期做一些准备,考虑测试工具的选择。熟悉和了解各种编程语言、编程工具,以及各种控件会使得在开展测试时得心用手。2.3.3自动化测试方案在选择测试方案的时候,要参照下列因素[4]:项目的影响:制定的方案是否对整个项目有积极作用,或者让开发更敏捷复杂度:自动化是否容易实现时间:自动化测试的实现需要多少时间早期需求和代码的稳定性:如果不能稳定,那么自动化测试介入会很尬尴覆盖率:能否覆盖程序中的关键特性和功能资源:有没有足够的人力资源、数据资源、硬件资源来支持自动化的开展在确定方案后,测试脚本的编码阶段,编写方法也左右着自动化测试的效率和质量。自动化功能测试的开发方式主要有:线性的结构化的共享的数据驱动的关键字驱动的2.4自动化测试工具介绍QTP全名HPQuickTestProfessionalsoftware,2012年12月6日发布了11.5版本,并更名为UnifiedFunctionalTesting
QTP是QuicktestProfessional的简称,是一款自动化测试工具。自动化工具出现目的是想用它来执行重复的手动测试,主要是用于回归测试和测试同一软件的新版本。在测试前要考虑好如何制定相应的测试计划,例如要测试那些功能、操作步骤、输入数据和期望的输出数据等。
WinRunner是MercuryInteractive公司的一种企业级的功能测试工具,用于检测应用程序是否能够达到预期的功能及正常运行。通过自动录制、检测和回放测试用户的操作,WinRunner能够有效地帮助测试人员对复杂应用的不同发布版进行测试,提高测试人员的工作效率和质量,且保障跨平台的、复杂的企业级应用能够无故障发布及长期稳定运行。
RationalRobot作为业界最顶尖的自动化功能测试工具,它可以在测试人员学习高级脚本技术同时帮助其进行成功的测试。集成在测试人员的桌面IBMRationalTestManager上,测试人员可以计划、组织、执行、管理和报告所有测试活动,包括手动测试报告。这种测试和管理的双重功能十分利于刚进入测试领域的人员。AdventNetQEngine.AdventNetQEngine是一个应用广泛且独立于平台的自动化软件测试工具,可用于JavaAPI测试、web性能测试、Java应用性能测试、Web功能测试、SOAP测试、回归测试和Java应用功能测试。支持对于使用HTML、JSP、ASP、.NET、PHP、JavaScript/VBScript、XML、SOAP、WSDL、e-commerce、传统客户端/服务器等开发的应用程序进行测试。此工具为Java技术开发,十分便于移植并可提供多平台支持。SilkTest,是用于对企业级应用进行功能测试的领先产品,可用于测试Web、Java或是传统的C/S结构。SilkTest提供了丰富的功能,使用户能够高效地进行自动化测试。包括以下功能:测试的计划和管理,数据库访问及校验,便捷、强大的4Test脚本语言,内置恢复系统(RecoverySystem),并具有使用同一套脚本进行跨平台、浏览器进行测试的功能。QARun。QARun的测试实现方式是通过检测鼠标移动、键盘点击操作等被测应用,即而得到相应的测试脚本,对该脚本可以进行需要编辑和调试。在记录的过程中可针对被测应用中所包含的功能点进行基线值的建立,即在插入检查点的同时建立预期值。在这里检查点是目标系统的一个特殊方面在一特定点的期望状态。一般,检查点在QARun提示目标系统执行一系列事件之后被执行。检查点用于确定当前实际结果与预期值是否一样。TestPartner作为一个自动化的功能测试工具,它专为测试基于微软、Java和Web技术的复杂应用而设计。它使测试人员和开发人员都可以使用可视的脚本编制和自动向导来生成可重复的测试,用户可以在任何水平层次和细节条件下,调用VBA的所有功能进行测试。TestPartner通过采用通用的、分层的方式来进行脚本的开发。各水平的的测试人员都可以通过TestPartner的可视化导航器来快速创建测试并执行。通过可视的导航器录制并回放测试,每一个测试都将以树状结构展示,以清楚地显现测试通过的应用路径。Holodeck-强大的故障植入软件测试工具
Holodeckisanadvancedfault-injectiontoolthatgivesyouthepowertoattackanapplicationwhileitmonitorsandlogseverythingyourapplicationdoes-everyfunctioncall,registryentry,pieceofdatareadorwritten.AutoRunner。AutoRunner是黑盒测试工具,可以用来完成功能测试、回归测试,可以提高测试效率,降低测试人工成本。产品可以对以下类型对象进行GUI功能性测试:(1)Windows类型对象,一般为用C++/Delphi/VB/VFP/PB/.NetForm等技术开发的桌面程序。(2)IE网页对象,一般性的网站,比如大的门户类网站。(3)Java对象,一般为用AWT/Swing/SWT等技术开发的桌面程序。(4)Flex对象,网页的内容是用Flex开发的。(5)Silverlight对象,网页的内容是用Silverlight开发的。(6)WPF对象,一般为用WPF技术开发的桌面程序。(7)QT对象,一般为用QT技术开发的桌面程序。3QuickTestProfessional的简介QTP是QuicktestProfessional的简称,是一款自动化测试工具。自动化工具出现目的是想用它来执行重复的手动测试,主要是用于回归测试和测试同一软件的新版本。在测试前要考虑好如何制定相应的测试计划,例如要测试那些功能、操作步骤、输入数据和期望的输出数据等[13]。
QTP测试的对象,包括传统的Windows应用程序,Web应用等等。它可以覆盖绝大多数的软件开发技术,不仅简单高效而且具备测试用例可重用的特点。其中包括:创建测试脚本、插入检查点、增强测试脚本、运行测试与分析结果和维护测试等方面。3.1QTP的安装与配置第一步:点击QTP的执行文件,选择路径进行安装第二步:安装完成后会出现下图的对话框,然后点击”OK”,如图3.1.1;图3.1初始界面图第三步:选择“BlankTest”选项,如图3.1.2;图3.2空白测试创建3.2QTP的使用QTP进行功能测试的测试流程包括(1)制定测试计划(2)创建测试脚本(3)增强测试脚本功能(4)运行测试(5)分析测试结果]五个步骤:创建测试脚本创建测试脚本制定测试计划分析测试结果运行测试增强测试脚本功能图3.3测试流程图3.2.1制定测试计划自动测试的测试计划是作为测试全工程的指导,根据被测项目的具体需求,和使用的测试工具特征而制定。QTP作为功能测试工具,主要用于软件的功能测试。当然QTP是不能完全取代测试人员的手工操作,如测试脚本的创建和测试用例的设计。但是在批量操作时,使用QTP的确能够帮助测试人员高效的完成很多工作。在测试计划阶段,首先要做的就是分析被测应用的特点,决定应该对哪些功能点进行测试,可以考虑细化到具体页面或者具体控件。在普通的应用程序测试应用方面,QTP在回归测试中是非常有效的。3.2.2创建测试脚本QTP的自动录制机制能够将测试人员的每一个操作步骤及被操作的对象记录下来,自动生成测试脚本。相较于其他自动测试工具录制脚本更方便的是,QTP除了以VBScript脚本语言的方式生成脚本语句以外,还将被操作的对象及相应的动作按照层次和顺序保存在一个基于表格的KeywordView(关键字视图)中。比如,当测试人员单击一个链接或选择一个CheckBox或者提交一个表单,相应的操作流程都会被记录在关键字视图中。3.2.3增强测试脚本功能脚本的录制只是为了实现创建或者设计脚本的第一步,基本脚本录制完毕后,测试人员可以根据需要增加所需要的功能,QTP允许测试人员通过脚本编辑器,在脚本中增加或更改测试步骤来修正或自定义测试流程,如增加多种类型的检查点功能,既可以让QTP检查一下在程序的某个特定位置或对话框中是否出现了需要的文字。以及通过变量的参数化功能,使用多组的数据驱动整个测试过程。3.2.4运行与分析QTP从脚本的第一行开始执行语句,运行过程中会对设置的检查点进行验证,从DataTable中获取实际数据代替参数值,并给出相应的输出结构信息。测试过程中测试人员还可以调试自己的脚本,直到脚本完全符合要求。图3.4关键字视图运行结束后系统会自动生成一份详细完整的测试结果报告。包括测试名称。测试开始和结束的时间,测试脚本运行的迭代次数、测试通过状态等。通过报告中的测试信息,发现错误并增强脚本。
4基于QTP自动化测试的实施本篇论文使用的是Flight这个Windows应用程序,这个程序所实现的是关于机票预订、查询、传真等操作,下面通过设计各功能的测试用例,借助QTP这款自动化测试工具,进行回归测试,实现对Flight功能测试的自动化,从而展现出自动化测试的优势,并测试该应用软件是否有需要改进的地方。4.1登录功能测试4.1.1测试用例表4-1登录测试用例表测试编号NamePassword预期结果实际结果测试结果Flight_01TexText提示错误passFlight_02TexMercury提示错误passFlight_03Tex提示错误passFlight_04Text提示错误passFlight_05Mercury提示错误passFlight_06提示错误failedFlight_07Text提示错误passFlight_0812345提示错误passFlight_09TextMercury正确,进入Flight正确,进入Flightpass续表4-1登录测试用例表Flight_10TextText提示错误passFlight_11queenqueen提示错误passFlight_12*)123提示错误passFlight_13+-/45mry提示错误passFlight_14mercurymercury提示错误正确,进入FlightpassFlight_15axhumercury正确,进入Flight正确,进入FlightpassFlight_16AXHUMERCURY正确,进入Flight正确,进入Flightpass4.1.2脚本录制第一步:对于登录界面,首先对登录进行了录制,分别输入用户名及密码,生成了最简单的VB脚本。如图4.1所示:图4.1登录界面第二步:为了能全面的测试在任何输入的情况下都会有预想的结果,根据设计出来的测试用例,在DataTable中设置了AgentName及Password列,把可能的情况均输入进去,之后让其自动的逐个运行测试。第三步:测试要具有全面性,根据登录界面的按钮分布,先对Help按钮进行设计,用IF语句来控制确定Help之中的内容后的确认。第四步:接着运用For语句,来实现对DataTable中Name和Password的逐个执行测试。第五步:对容易出错的地方设置检查点,以便在自动测试时对其进行检测,有对话框上标题“Login”,按钮“OK”。如图4.2所示:图4.2Login检查点设置4.1.3测试脚本Dialog("Login").WinButton("Help").Click'点击Help按钮IfDialog("Login").Dialog("FlightReservations").ExistThenDialog("Login").Dialog("FlightReservations").WinButton("确定").ClickEndIf'判断在点击后是否出现对话框DimiFori=1todatatable.GetSheet("Action1").GetRowCountDialog("Login").CheckCheckPoint("Login_2")Dialog("Login").WinEdit("AgentName:").SetDataTable("name",dtLocalSheet)Dialog("Login").WinEdit("Password:").SetSecureDataTable("password",dtLocalSheet)Dialog("Login").WinButton("OK").CheckCheckPoint("OK")'点击OK按钮添加检查点Dialog("Login").WinButton("OK").Click'从datatable中调取测试用例IfDialog("Login").Dialog("FlightReservations").ExistThenDialog("Login").Dialog("FlightReservations").WinButton("确定").ClickEndIfdatatable.GetSheet("Action1").SetNextRowNextDialog("Login").WinEdit("AgentName:").Set"mercury"Dialog("Login").WinEdit("Password:").SetSecure"mercury"Dialog("Login").WinButton("OK").CheckCheckPoint("OK")'点击OK按钮添加检查点Dialog("Login").WinButton("OK").Click'输入正确的用户名和密码wait(5)'等待5秒Window("FlightReservation").WinMenu("Menu").Select"File;Exit'退出本测试脚本通过点击Help按钮,查看密码;通过For循环语句来获取DataTable里设计的用户名和密码,验证正确的用户名和密码能够进入Flight订票系统,实现用户名及密码的输入自动化测试,并对其中的OK按钮添加检查点。4.1.4执行结果如图4.3所示:图4.3测试执行结果登陆测试的结果显示:测试执行了3次,并且全部未通过,说明在脚本里出现了错误。Datatable中的status与outmsg两列的参数值出现了误差,导致在测试中,赋值对比中找不到正确的对象。修改后选取一个用列再次测试。图4.4测试执行结果登陆测试的结果显示:本次测试运行了一遍,并且通过,脚本错误得到修正。4.2订票功能测试4.2.1录制脚本过程为了体现自动化测试在测试中的高效率和便捷性,测试案例中对Flight订票系统中的出发地、目的地、航班及订购的票数进行了随机选取,用Randomnumber语句实现,使QTP的自动化更具说服力。第一步:打开QTP选择“Record”,录制脚本。第二步:在登录界面中,AgentName和Password均以Mercury作为测试变量,点击“OK”按钮。第三步:输入飞行时间、出发地、目的地,然后点击“Flights”选择航班,如图4.4所示:图4.5订票界面第四步:选择要乘坐飞机的航班,然后点击确定。第五步:输入顾客的姓名、票数、票的类型、点击“Insert”第六步:点击“Stop”结束录制过程,脚本录制成功第七步:在容易出错的点上右击鼠标,选择“InsertStandardCheckpoint”,如图4.6所示:图4.6InsertOrder检查点4.2.2调试测试脚本及注解Dima1,b1,c1Window("FlightReservation").ActiveX("MaskEdBox").Type"033112"a1=Window("FlightReservation").WinComboBox("FlyFrom:").GetROProperty("itemscount")Window("FlightReservation").WinComboBox("FlyFrom:").Selectandomnumber(0,a1-1)'随机获取出发地b1=Window("FlightReservation").WinComboBox("FlyTo:").GetROProperty("itemscount")Window("FlightReservation").WinComboBox("FlyTo:").SelectRandomnumber(0,b1-1)'随机获取目的地Window("FlightReservation").WinButton("FLIGHT").CheckCheckPoint("FLIGHT")'为FLIGHT按钮添加检查点Window("FlightReservation").WinButton("FLIGHT").Clickc1=Window("FlightReservation").Dialog("FlightsTable").WinList("From").GetItemsCountWindow("FlightReservation").Dialog("FlightsTable").WinList("From").SelectRandomnumber(0,c1-1)'随机选择一航班Window("FlightReservation").Dialog("FlightsTable").WinButton("OK").ClickWindow("FlightReservation").WinEdit("Name:").Set"zy"Window("FlightReservation").WinEdit("Tickets:").SetRandomNumber(1,10)'随机1到10之间的票数Dimrr=RandomNumber(1,3)Ifr=1Thenwindow("FlightReservation").WinRadioButton("First").SetendifIfr=2Thenwindow("FlightReservation").WinRadioButton("Business").SetendifIFr=3Thenwindow("FlightReservation").WinRadioButton("Economy").Setendif'随机选择机舱类型Window("FlightReservation").WinButton("InsertOrder").CheckCheckPoint("InsertOrder")'为InsertOrder按钮添加检查点Window("FlightReservation").WinButton("InsertOrder").ClickWindow("FlightReservation").Close'退出注:测试脚本主要通过Randomnumber函数和If语句进行随机选择出发地、目的地,航班、票数、机舱类型,以完成自动化来实现测试功能。4.2.3执行结果如图4.7所示:图4.7测试执行结果订票功能测试的结果显示:本次测试运行了2遍,并且全部通过,脚本没有错误以及警告。4.3修改订单功能测试4.3.1测试用例表4-2修改订单测试用例表测试编号输入操作预期结果实际结果Update_01点击open“按钮”弹出openorder对话框成功弹出openorder对话框Update_02选择“customername”弹出“searchresults”对话框弹出“searchresults”Update_03选择第一个订单,点击“ok”按钮对话框消失,订单的内容在飞机订票系统中显示,Insert按钮不可用,update和delete按钮可用提示错误月份要小于13Update_04日期修改为 06/01/14可以修改可以修改Update_05出发地改为London可以修改可以修改Update_06目的地修改为Paris可以修改可以修改Update_07Flight修改为12594号航班可以修改可以修改Update_08Customername修改为Queen可以修改可以修改Update_09Ticket修改为2可以修改可以修改Update_10Class修改为first可以修改可以修改Update_11点击update按钮订票成功修改订票成功修改4.3.2录制脚本过程第一步:打开QTP,选择“Record”,录制脚本第二步:在AgentName和Password中都输入Mercury,点击“OK”按钮登录第三步:点击“”打开已有订票单,如图4.8所示:图4.8查找订单界面第四步:选择已有的订票,可以根据“顾客名”、“航班日期”、“订单的NO”选择订单第五步:选择具体的航班信息第六步:对所订的票进行编辑修改,点击“Update”按钮第七步:点击“Stop”结束录制过程,脚本录制完成第八步:为UPdate插入检查点,选择“InsertStandardCheckpoint”如图4.8所示:图4.9更新按钮检查点设置第九步:点击“OK”4.3.3调试测试脚本及注解Window("FlightReservation").WinButton("Button").ClickWindow("FlightReservation").Dialog("OpenOrder").WinCheckBox("CustomerName").Set"ON"Window("FlightReservation").Dialog("OpenOrder").WinEdit("Edit").Set"zy"Window("FlightReservation").Dialog("OpenOrder").WinButton("OK").ClickWindow("FlightReservation").Dialog("OpenOrder").Dialog("SearchResults").WinList("FlightNo.").Activate"zy103158AA2025327112.200012/12/2012WednesdayDENDenver08:12AMLONLondon03:23PM"Window("FlightReservation").ActiveX("MaskEdBox").Type"12"Window("FlightReservation").ActiveX("MaskEdBox").Type"31"Window("FlightReservation").WinComboBox("FlyFrom:").Select"London"Window("FlightReservation").WinComboBox("FlyTo:").Select"Paris"Window("FlightReservation").WinButton("FLIGHT").ClickWindow("FlightReservation").Dialog("FlightsTable").WinList("From").Activate"12594LON03:12PMPAR05:12PMAF$165.40"Window("FlightReservation").WinEdit("Tickets:").SetSelection0,1Window("FlightReservation").WinEdit("Tickets:").Set"2"Window("FlightReservation").WinRadioButton("First").SetWindow("FlightReservation").WinEdit("Name:").SetSelection0,6Window("FlightReservation").WinEdit("Name:").Set"zy"Window("FlightReservation").WinButton("Update").CheckCheckPoint("Update")'为Update按钮添加检查点Window("FlightReservation").WinButton("Update").ClickWindow("FlightReservation").Close注解:进入OpenOrder,通过输入订单用户名来选择所要修改的订单,修改好内容后,先对Update按钮添加检查点,在测试过程中来检查是否会出现问题,亦是通过自动化来实现。4.3.4执行结果如图4.10所示:图4.10测试执行结果修改订单功能测试的结果显示:本次测试运行了一遍,并且全部通过,脚本没有错误以及警告。4.4删除订单功能测试4.4.1测试用例表4-3删除订单测试用例表测试编号输入操作预期结果实际结果D_01点击“Open”按钮弹出openorder对话框弹出openorder对话框D_02选择“Customername”弹出“searchresults”对话框弹出“searchresults”对话框D_03选择第一个订单,点击“OK”按钮对话框消失,订单的内容在飞机订票系统中显示Insert按钮不可用,Update和Delete按钮可用提示错误月份要小于13D_04选择Delete按钮可以删除该信息可以删除该信息4.4.2录制脚本过程第一步:打开QTP录制脚本,选择“Record”第二步:在AgentName和Password中都输入Mercury点击“OK”按钮第三步:点击“”打开已有订票单第四步:选择已有的订票,可以根据“顾客名”、“航班日期”、“订单的NO”选择订单第五步:选择具体的航班信息第六步:对选中的订票信息进行修改,点击“delete”按钮,如图4.10所示:图4.11删除订单界面第七步:确认删除第八步:点击“Stop”结束录制过程,脚本录制成功第九步:在容易出错的点上右击鼠标,选择“InsertStandardCheckpoint”如图4.12所示:图4.12删除按钮检查点设置第十步:点击“OK”4.4.3调试测试脚本及注解Window("FlightReservation").WinButton("Button").ClickWindow("FlightReservation").Dialog("OpenOrder").WinCheckBox("CustomerName").Set"ON"Window("FlightReservation").Dialog("OpenOrder").WinEdit("Edit").Set"zy"Window("FlightReservation").Dialog("OpenOrder").WinButton("OK").ClickWindow("FlightReservation").Dialog("OpenOrder").Dialog("SearchResults").WinButton("OK").ClickWindow("FlightReservation").WinButton("Delete").CheckCheckPoint("Delete")'为Delete按钮添加检查点Window("FlightReservation").WinButton("Delete").ClickWindow("FlightReservation").Dialog("FlightReservations").ActivateWindow("FlightReservation").Dialog("FlightReservations").ActivateWindow("FlightReservation").Dialog("FlightReservations").WinButton("是(Y)").ClickWindow("FlightReservation").ActivateWindow("FlightReservation").Close注:调试脚本通过打开OpenOrder,选择一个订单,接着对Delete按钮进行添加检查点,然后删除该订单,通过对检查点的设置,验证测试是否正确。4.4.4执行结果如图4.12所示:图4.13测试执行结果删除订单功能测试的结果显示:本次测试执行一次,并且全部通过,脚本没有错误以及警告。4.5传真功能测试4.5.1录制脚本过程第一步:录制脚本,选择“Record”第二步:在AgentName和Password中都输入Mercury点击“OK”按钮第三步:点击“”打开原有订票单第四步:选择原有的订票,可以根据“顾客名”、“航班日期”、“订单NO”选择要订单第五步:从File中打开FaxOrder,如图4.14所示:图4.14传真界面第六步:输入FaxNumber传真号第七步:由于这里的脚本录制不能记录下鼠标的轨迹,即AgentSignature里不能直接去签名,要用AnalogRecording来实现。第八步:单击Send发送4.5.2调试测试脚本及注解Window("FlightReservation").WinMenu("Menu").Select"File;FaxOrder..."'进入传真界面Window("FlightReservation").Dialog("FaxOrderNo.43").ActiveX("MaskEdBox").Type"111111111111111111"'设置传真号Window("FlightReservation").Window("FaxOrderNo.43").RunAnalog"Track1"'模拟鼠标轨迹进行自动测试Window("FlightReservation").Dialog("FaxOrderNo.43").WinCheckBox("SendSignaturewithorder").CheckCheckPoint("SendSignaturewithorder")'为SendSignaturewithorder添加检查点Window("FlightReservation").Dialog("FaxOrderNo.43").WinCheckBox("SendSignaturewithorder").Set"ON"Window("FlightReservation").Dialog("FaxOrderNo.43").WinButton("Send").CheckCheckPoint("Send")'为Send添加检查点Window("FlightReservation").Dialog("FaxOrderNo.43").WinButton("Send").Click注:进入传真界面后,首先设置传真号,再通过AnalogRecording按钮对鼠标轨迹进行模拟,之后再添加了SendSignaturewithorder以及Send按钮的检查点。之后要继续在QTP的菜单栏单击ObjectRepository,选择FaxOrderNo.43中对应的text属性,将其改成FaxOrderNo\...才能实现鼠标轨迹模拟,从而实现自动化测试[15]。如图4.14所示:图4.15ObjectRepository4.5.3执行结果如图4.15所示:图4.16测试执行结果传真功能测试的结果显示:本次测试运行了一遍,错误提示在自动测试时有一处出错。其中通过检查点的设置,发现SendSignaturewithorder按钮中的checked和focused属性与测试前预期值不匹配,出现BUG。5测试结果分析5.1测试用例汇总表表5-1测试用例汇总用例编号测试步骤、输入数据预期结果测试结果测试结果Test_01录制登录脚本根据测试用例执行测试登录,执行脚本登录成功登录成功failedTest_02录制订票脚本根据测试用例执行测试订票,并提交数据在外面删除数据,执行脚本订票成功订票成功passTest_03录制修改脚本根据测试用例执行测试打开已有的订票,并修改订票信息修改订票信息成功修改订票信息成功passTest_04录制删除脚本根据测试用例执行测试打开已有的订票,并删除订票信息增添订票信息删除订票信息成功删除订票信息成功passTest_05录制传真脚本根据测试用例执行测执行脚本传真成功传真成功pass5.2检查项表5-2检查项序号检查项结果1飞机订票系统登录功能可以增加不同权限的登录模式2飞机订票系统订票功能订票功能基本完备3飞机订票系统修改功能修改功能基本完备4飞机订票系统删除功能删除功能基本完备5飞机订票系统传真功能传真功能基本完备5.3对比与分析本文中在Flight的登录、订票和删除等操作中,设计的测试用例较多。如将这些测试用例完全由手工测试完成,将会耗费大量时间和人力资源。以20个测试用例作说明,在登录测试中,一个用列的测试需要时间大概为5秒钟,20个用例则至少需要一百秒。而在调试好的脚本自动执行下,只需要两三秒钟。当然会有疑问,难道录制脚本和强化脚本的沉没成本不算?当然要算!这样一来这20个用例所耗费的时间不会比手动测试少甚至更多!图5.1测试用例1但这只是执行一次的时间,如果我们需要重复测试这20个用例50次,那么两者之间的时间效率比将远远超过100:3。在QTP中,我们通过For循环进行获取Datatable中的行号,每一行都代表一个用列。这样将录制的脚本优化后,自动执行获得的高效率和极低的出错率都是手工测试不能相比的。同时,QuickTestProfessional还可以与其他工具整合。如在QTP中调用WinRunner的测试脚本和函数,在LoadRunner中插入和运行QTP脚本。不过在Loadrunner中运行QTP脚本学要确保QTP已经被关闭。5.4分析与建议Flight在测试中满足了用户订票基本要求,但在现在服务至上的社会里,略显得功能较为单一。建议增设查询出行向导、航班正晚点折扣信息以及各个机场天气等布告版块。应多设置几个访问权限,类似于12306的设置,一般用户也能对系统进行访问,查看自己的订票并进行相关操作。同时可设计开放互联网订票的窗口,在互联网进行功能等测试。在传真功能测试的最后,SendSignaturewithorder按钮在测试前后有属性出现不匹配的状况,意味着本软件出现了相应的缺陷,需要进行进一步的完善。在测试的过程中,QTP在录制和运行设置中,Web的测试中浏览器常报错无法正常运行。不能对本地的页面进行访问。浏览器选择设置局限太大,极易造成与用户习惯的不便。结论通过这次毕业设计,学到了许多实用的测试知识。在大学期间学习的测试知识也终于能得到实践。经过这次毕业设计,把以前所学到的书本知识和实际应用结合了起来,对软件工程和软件测试的理论知识有了深层次的理解,意识到了学习就是要多实践,理论和实践相结合,才能真正将知识留在自己的大脑里。本文通过QTP案例的实际测试,初步掌握了自动化测试的基本知识。也再次熟悉了白盒测试与黑盒测试两种方法。这一段时间里,查阅了大量的资料和文献,完成了以QTP为软件平台、Flight为对象的自动化测试。过程中,脚本的增强与优化以及检查点的插入都是需要注意的地方。自动化测试的过程中,脚本的规范性和可读性十分重要。在测试的开始的阶段,脚本比较混乱,出现错误后难以发现。QTP的测试对象很多,如Windows对象、ActiveX对象以及VB和Web对象等等。在这里仅以Windows的Flight程序做测试对象。通过多次的测试比较,可以发现自动化测试相对比手工测试在覆盖率、时间效率和质量上都有极大的优势。当然也有不能完全替代手工测试的地方,如在GUI界面中,对布局的纠正。参考文献[1]余杰,赵旭斌.精通QTP[M].人民邮电出版社,2012.[2]陈能技.QTP自动化测试最佳实践[M].电子工业出版社,2012.[3]黄文高.QTP自动化测试与框架模型设计[M].机械工业出版社.2011[4]李晓鹏,赵书良,魏娜娣.软件功能测试[M].清华大学出版社.2012[5]PaulC.Jorgensen著.(李海峰,马琳译)软件测试[M]人民邮电出版社.2011[6]ElfriedeDustin,ThomGarrett.自动化软件测试实践指南[M].电子工业出版社.2011[7]RexBlack.著,(郑丹丹,王华译)软件测试基础[M].人民邮电出版社.2013.05[8]朱少民.完美测试[M].电子工业出版社.2012[9]郑文杰,许静,于波.软件测试[M].人民邮电出版社.2012[10]郑炜.软件测试.西北工业大学出版社[M].2011.08.[11]马均飞,郑文强.软件测试设计[M].电子工业出版社.2011.04[12]Ammann.P,Offutt.J著(郁莲等译)软件测试基础[M].2010.09[13]陈能技.QTP自动化测试进阶[M].电子工业出版社.2010.06[14]蔡为东.赢在测试[M].电子工业出版社.2010.[15]刘宇飞.QTP在软件项目管理中的新发展[M].北京:清华大学出版社,2010.[16]朱少民.软件测试方法和技术[M].北京:清华大学出版社,2010.[17]软件测试资源网站:/致谢本次设计在钱丽老师的悉心指导下,一步步完成。很幸运地能够由钱老师作为我的指导老师,在这里表示十分感谢。从开始的选题确定,我开始借助图书馆互联网搜集和我论文有关的资料。毕竟我的能力有限,而钱老师给我提供了一些参考文献、视屏等资料,是我获益匪浅,在我的论文实现过程中解决了我不少疑惑和难题。虽然之前做过一些小论文和设计,但还是稍显拙劣和稚嫩。在钱老师帮助下,才能顺利地完成本次毕业论文。在这里也感谢其他老师给予我的帮助,在与老师们聊天讨论的过程中,给了我很多启发。我的同学们对我来说也是一笔财富,在这次论文设计中,给我指正了不少不足之处,帮我及早的发现并修正。再次感谢各位。
附录资料:不需要的可以自行删除常见的电脑英语查询大全3DNow!(3Dnowaiting)3DPA(3DPositionalAudio,3D定位音频)3DS(3DSubSystem,三维子系统)ABS(AutoBalanceSystem,自动平衡系统)AC(AudioCodec,音频多媒体数字信号编解码器)ACOPS:AutomaticCPUOverHeatPreventionSystem(CPU过热预防系统)ACPI(AdvancedConfigurationandPowerInterface,先进设置和电源管理)AE(AtmosphericEffects,雾化效果)AFR(AlternateFrameRendering,交替渲染技术)AGAS(AntiGlareAntiStaticCoatings,防强光、防静电涂层)AGP:AccelaratedGraphicPort(加速图形端口),一种CPU与图形芯片的总线结构AGU(AddressGenerationUnits,地址产成单元)AH:AuthenticationHeader,鉴定文件头AHA(AcceleratedHubArchitecture,加速中心架构)AL:ArtificialLife(人工生命)ALU(ArithmeticLogicUnit,算术逻辑单元)AMR(Audio/ModemRiser,音效/数据主机板附加直立插卡)AMR(Audio/ModemRiser;音效/调制解调器主机板附加直立插卡)AnisotropicFiltering(各向异性过滤)API(ApplicationProgrammingInterfaces,应用程序接口)APIC:AdvancedProgrammableInterruptController(高级程序中断控制器)APM(AdvancedPowerManagement,高级能源管理)APPE(AdvancedPacketParsingEngine,增强形帧解析引擎)ARP(AddressResolutionProtocol,地址解析协议)ASC(AntiStaticCoatings,防静电涂层)ASC(Auto-SizingandCentering,自动调效屏幕尺寸和中心位置)ASCII(AmericanStandardCodeforInformationInterchange,美国国家标准信息交换代码)ASIC:ApplicationSpecificIntegratedCircuit(特殊应用积体电路)ASKIR(AmplitudeShiftKeyedInfra-Red,长波形可移动输入红外线)ASMO(AdvancedStorageMagneto-Optical,增强形光学存储器)ASPI(AdvancedSCSIProgramInterface,高级SCSI编程接口。它定义了当和SCSI主机适配器通讯时应用程序使用的一系列软件命令)AST(AverageSeektime,平均寻道时间)ATA(ATAttachment,AT扩展型)ATAPI(ATAttachmentPacketInterface)ATC(AccessTimefromClock,时钟存取时间)ATL:ActiveXTemplateLibrary(ActiveX模板库)ATM(AsynchronousTransferMode,异步传输模式)ATOMM(AdvancedsuperThin-layerandhigh-OutputMetalMedia,增强形超薄高速金属媒体)ATX:ATExtend(扩展型AT)AuxiliaryInput(辅助输入接口)AV(AnalogVideo,模拟视频)AVI(AudioVideoInterleave,音频视频插入)BackBuffer,后置缓冲Backfaceculling(隐面消除)BASIC:Beginner'sAll-purposeSymbolicInstructionCode(初学者通用指令代码)BattleforEyeballs(眼球大战,各3D图形芯片公司为了争夺用户而作的竞争)BCF(BootCatalogFile,启动目录文件)Benchmarks:基准测试程序数值BGA(BallGridArray,球状矩阵排列)BGA(BallGridArray,球状矩阵排列)BGA:BallGridArray(球状网格阵列)BHT(branchpredictiontable,分支预测表)BIF(BootImageFile,启动映像文件)BilinearFiltering(双线性过滤)BIOS(BasicInput/OutputSystem,基本输入/输出系统)BLA:BearnLandingArea(电子束落区)BMC(BlackMatrixScreen,超黑矩阵屏幕)BOD(BandwidthOnDemand,弹性带宽运用)BOPS:BillionOperationsPerSecond,十亿次运算/秒bps(bitpersecond,位/秒)BPU(BranchProcessingUnit,分支处理单元)BrachPediction(分支预测)BSD(BerkeleySoftwareDistribution,伯克利软件分配代号)BSRAM(BurstpipelinedsynchronousstaticRAM,突发式管道同步静态存储器)BTB/C:BranchTargetBuffer/Cache(分支目标缓冲)C2C:card-to-cardinterleaving,卡到卡交错存取CAD:computer-aideddesign,计算机辅助设计CAM(CommonAccessModel,公共存取模型)CAS(ColumnAddressStrobe,列地址控制器)CBR(CommittedBurstRate,约定突发速率)CC:CompanionChip(同伴芯片),MediaGX系统的主板芯片组CCD(ChargeCoupledDevice,电荷连接设备)CCIRN:CoordinatingCommitteeforIntercontinentalResearchNetworking,洲CCM(CallControlManager,拨号控制管理)cc-NUMA(cache-coherentnonuniformmemoryaccess,连贯缓冲非统一内存寻址)CCS(CutChangeSystem)CCT(ClockCycleTime,时钟周期)CDR(CDRecordable,可记录光盘)CD-ROM/XA(CD-ROMeXtendedArchitecture,唯读光盘增强形架构)CDRW(CD-Rewritable,可重复刻录光盘)CDSL:ConsumerDigitalSubscriberLine(消费者数字订阅线路)CE(ConsumerElectronics,消费电子)CEM(cubeenvironmentmapping,立方环境映射)CenterProcessingUnitUtilization,中央处理器占用率CEO(ChiefExecutiveOfficer,首席执行官)CG(ComputerGraphics,计算机生成图像)CGI(CommonGatewayInterface,通用网关接口)CHRP(CommonHardwareReferencePlatform,共用硬件平台,IBM为PowerPC制定的标准,可以兼容MacOS,WindowsNT,Solaris,OS/2,Linux和AIX等多种操作系统)CIEA:CommercialInternetExchangeAssociation,商业因特网交易协会CIR(CommittedInfomationRate,约定信息速率)CISC(ComplexInstructionSetComputing,复杂指令集计算机)CISC(ComplexInstructionSetComputing,复杂指令集计算机)CISC:ComplexInstructionSetComputing(复杂指令结构)Clipping(剪贴纹理)CLK(ClockCycle,时钟周期)ClockSynthesizer,时钟合成器CLV(ConstantLinearVelocity,恒定线速度)CMOS:ComplementaryMetalOxideSemiconductor(互补金属氧化物半导体)CMOS:ComplementaryMetalOxideSemiconductor,互补金属氧化物半导体CMOS:ComplementaryMetalOxideSemiconductor,互补金属氧化物半导体COB(Cacheonboard,板上集成缓存)COB(Cacheonboard,板上集成缓存)COD(CacheonDie,芯片内集成缓存)COD(CacheonDie,芯片内集成缓存)COM:ComponentObjectModel(组件对象模式)COMDEX:ComputerDistributionExposition(计算机代理分销业展览会)compressedtextures(压缩纹理)ConcurrentCommandEngine,协作命令引擎COO(ChiefOrganizerOfficer,首席管理官)CP:CeramicPackage(陶瓷封装)CPGA(CeramicPinGridArray,陶瓷针型栅格阵列)CPGA(CeramicPinGridArray,陶瓷针型栅格阵列)CPGA:CeramicPinGridArray(陶瓷针脚网格阵列)CPS:CertificationPracticeStatement(使用证明书)CPU(CenterProcessingUnit,中央处理器)CPU:CenterlProcessingUnit(中央处理器)CPU:CenterProcessingUnit,中央处理器CRC:CyclicalRedundancyCheck(循环冗余检查)CRT(CathodeRayTube,阴极射线管)CS(ChannelSeparation,声道分离)CSE(ConfigurationSpaceEnable,可分配空间)CSS(CommonCommandSet,通用指令集)CSS:CascadingStyleSheets,层叠格式表CTO(ChiefTechnologyOfficer,首席技术官)CTS(CarpalTunnelSydrome,计算机腕管综合症)CTS(CleartoSend,清除发送)CVS(ComputeVisualSyndrome,计算机视觉综合症)DAC(DigitaltoAnalogConverter,数模传换器)DAC:DualAddressCycle,双重地址周期DAE(digitalAudioExtraction,数据音频抓取)DataForwarding(数据前送)DB:DeepBuffer(深度缓冲)DB:DeviceBay,设备插架DBS-PC:DirectBroadcastSatellitePC(人造卫星直接广播式PC)DCD:DocumentContentDescriptionforXML:XML文件内容描述DCE:DataCircuitTerminalEquipment,数据通信设备DCOM:DistributingComponentObjectModel,构造物体模块DCT:DisplayCompressionTechnology(显示压缩技术)DDC:DisplayDataChannel,显示数据通道DDRSDRAM(DoubleDateRate,双数据率SDRAM)DDSSII(DoubleDynamicSuspensionSystemII,第二代双层动力悬吊系统)DDSS(DoubleDynamicSuspensionSystem,双悬浮动态减震系统)DEC(DirectEtchingCoatings,表面蚀刻涂层)Decal(印花法,用于生成一些半透明效果,如:鲜血飞溅的场面)Decode(指令解码)DES:DataEncryptionStandard,数据加密标准DFL(DynamicFocusLens,动态聚焦)DFP(DigitalFlatPanel,数字式平面显示器)DFS(DigitalFlexScan,数字伸缩扫描)DFS:DynamicFlatShading(动态平面描影),可用作加速DHCP:DynamicHostConfigurationProtocol,动态主机分配协议DIB(DualIndependentBus,双独立总线)DIB:DualIndependentBus(双重独立总线),包括L2cache总线和PTMM(ProcesserToMainMemory,CPU至主内存)总线DIC:DigitalImageControl(数字图像控制)DigitalMultiscanII(数字式智能多频追踪)DIL(dual-i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 系统性备考:特许金融分析师试题
- 辽宁省名校联盟2024-2025学年高二下学期3月联合考试历史试题(含解析)
- 小金库案例警示教育
- 深入探讨2024年CFA试题及答案
- CFA知识体系框架试题及答案
- 高校预防火灾
- 止痛泵使用规范
- 骨关节肌肉病理
- 2024年CFA考试总结与提升经验与试题及答案
- CFA考试经验丰富者的建议与试题及答案
- 2025年中国液态储氢行业发展现状、市场规模、投资前景分析报告(智研咨询)
- 2025中国信创服务器厂商研究报告-亿欧智库
- 2025年辽宁省盘锦市事业单位公开招聘高校毕业生历年高频重点模拟试卷提升(共500题附带答案详解)
- 鉴乐·赏舞知到智慧树章节测试课后答案2024年秋绥化学院
- 2025年浙江杭州建德市林业总场下属林场招聘8人高频重点模拟试卷提升(共500题附带答案详解)
- 流行性感冒诊疗方案(2025年版)权威解读
- 《水库大坝安全监测管理办法》知识培训
- 裂隙等密度(玫瑰花图)-简版
- 2025年河南工业职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2025年江苏无锡市江阴市新国联集团有限公司子公司招聘笔试参考题库附带答案详解
- Unit2 Travelling Around Reading for Writing 说课稿-2024-2025学年高中英语人教版(2019)必修第一册
评论
0/150
提交评论