QTP自动化测试讲义.doc

上传人:豆**** 文档编号:17418082 上传时间:2022-05-24 格式:DOC 页数:39 大小:351KB
返回 下载 相关 举报
QTP自动化测试讲义.doc_第1页
第1页 / 共39页
QTP自动化测试讲义.doc_第2页
第2页 / 共39页
点击查看更多>>
资源描述

《QTP自动化测试讲义.doc》由会员分享,可在线阅读,更多相关《QTP自动化测试讲义.doc(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流QTP自动化测试讲义.精品文档.QTP课程笔记QTP介绍知识点HP QuickTest Professional是一款先进的自动化测试解决方案,用于创建功能和回归测试。它自动捕获、验证和重放用户的交互行为。通过QTP可以测试标准的Windows Applications、Web对象、ActiveX控件和Visual Basic应用程序。我们还可以获得其他的QTP加载项以便用于许多特殊的环境,例如Java、Oracle、SAP解决方案、.NET Windows以及Web Forms、Siebel、PeopleSoft、Web服务和终端仿真应用程

2、序。QTP通过录制在应用程序中执行的操作,可以方便地创建测试和业务组件。测试和业务组件是两种不同类型的文档,可用于测试您的应用程序或网站是否按预期工作。示例演示程序采用QTP自带的Flight程序,生成一张新的订单。QTP程序的结构知识点录制选项的含义:为了提高脚本的可移植性,建议两边都选最上面如果开始录制时没有弹出该窗口,可以利用菜单Automation/Record and Run Setting来启动由QTP自己打开的程序:如果选中该选项,则第一次录制时QTP只会生成启动程序的脚本,而不会录制后续的动作。快捷方式的程序是否录制:通过快捷方式启动程序程序的动作也能够录制下来。指定要录制的程

3、序:开始录制后自动启动指定的程序VC QTP工程 project TEST模块 module Action函数 function Sub/Function到TEST目录的Action1下面打开文件Script.mts,可以看到录制的代码QTP脚本的特点:1、脚本回放成功需要:代码(脚本) + 对象(在对象库中有记录相关对象的信息)2、脚本语法: 对象类型(“对象名称”).方法 参数1,参数2,由QTP打开程序,有几种方法:1、 SystemUtil.Run SystemUtil对象的Run方法SystemUtil.Run D:Program FilesHPQuickTest Professio

4、nalsamplesflightappflight4a.exe参数示例:file :D:Program FilesHPQuickTest Professionalsamplesflightappflight4a.exeparams:op:D:Program FilesHPQuickTest Professionalsamplesflightappmdoe:openSystemUtil.Run D:Program FilesHPQuickTest Professionalsamplesflightappflight4a.exe, , D:Program FilesHPQuickTest Prof

5、essionalsamplesflightapp, open2、InvokeApplication 调用程序函数InvokeApplication D:Program FilesHPQuickTest Professionalsamplesflightappflight4a.exe3、 WSH 通过wsh对象的Run(bat)或者exec(exe)方法Dim oWSHSet oWSH = CreateObject(WScript.shell)oWSH.exec D:Program FilesHPQuickTest Professionalsamplesflightappflight4a.exe

6、Set oWSH = nothingDim oWSHSet oWSH = CreateObject(WScript.shell)oWSH.run E:WORKProjects3.batSet oWSH = nothing参照文章:为确保脚本移植性,可以引入环境变量,例如:SystemUtil.Run Environment.Value(ProductDir) & samplesflightappflight4a.exeEnvironment.Value(ProductDir):QTP产品所安装的路径Environment.Value(TestDir):工程(TEST)所在的路径可使用下面的语句

7、来检查:msgbox environment(ProductDir)msgbox environment(TestDir)示例以下结合err对象和on error resume next语句做例子:On Error Resume NextOn error goto 0Dim bFlagbFlag = CBool(bFlag)bFlag = InvokeApplication (C:win2000-calc11111.exe)msgbox bFlagIf err.number0 Thenmsgbox err.descriptionerr.clearEnd IfQTP的对象识别原理知识点举例:找关

8、羽!依据的是这个人的特征,而不是人名,人名是有重复的。1、录制原理QTP首先“观看”要录制的对象,然后将其作为测试对象进行存储,确定该对象符合的测试对象类,例如标准Windows对话框(Dialog)、Web按钮(WebButton)或Visual Basic滚动条对象(VbScrollBar)。然后,对于每个测试对象类,QTP都有一个始终要记住的强制属性的列表,在录制对象时,QTP始终记住这些默认的属性值,然后再检查“视图”页面上其余的对象、对话框或其他父对象,以检查该描述是否足以唯一标识该对象,如果不足以进行唯一标识,QTP将向该描述中逐渐添加辅助属性,直到经过编译成为唯一的描述为止,如果

9、没有可用的辅助属性,或者那些可用的辅助属性仍不足够创建一个唯一的描述,QTP将添加一个特殊的顺序标识符(例如页面上或源代码中对象的位置)以创建唯一的描述。在回放过程中,QTP会搜索与录制时记住的测试对象的描述完全匹配的运行时对象,它需要找到与录制时用于创建唯一描述的强制属性和任何辅助属性完全匹配的对象,只要应用程序中的对象没有较大的改变,录制过程中记住的描述几乎总是足以使QTP唯一标识出该对象。对于大部分对象,这种方法是适用的,但应用程序中包含的某些对象可能在后续运行会话期间很难标识。但即使录制的描述不再准确,QTP也能通过其“智能标识”机制使用非常相似的排除过程来标识对象。即使测试对象属性的

10、值有所改变,QTP的TestGuard技术机制也能通过使用“智能标识”标识对象从而维护测试或组件的可重用性。属性识别再到属性value的识别,就确定了对象。QTP能识别对象不是因为对象的名称,而是从对象的强制属性的取值来识别对象。而名称就算不一样都无所谓。菜单项:Tools/Object Identification2、回放原理一、先根据脚本中的对象类型在对象库中查找是否存在该类型的对象。对象类型 是指 在对象类型库(Object Identification)中存在的类型。二、根据脚本中对象的名称在对象库中查找是否存在该名称的对象。三、根据对象类型库中设定的对象识别机制定位对象:1、先根据强

11、制属性匹配实际对象的属性值:(1)唯一匹配,找到对象,退出识别机制;(2)多个匹配,采用辅助属性辅助识别;(3)不匹配,报错;2、根据辅助属性匹配实际对象的属性值:(1)唯一匹配,找到对象,退出识别机制;(2)多个匹配,采用顺序标识符辅助识别;(3)不匹配,报错;3、根据顺序标识符匹配实际对象的顺序值:(1)唯一匹配,找到对象,退出识别机制;(2)多个匹配,尝试采用智能识别;(3)不匹配,报错;其中顺序标识符中有两种识别机制:index:控件数组的索引值。location:对象在GUI界面上的位置,遵循“先从上到下,再从左到右”的原则。4、QTP采用自身的一套智能识别机制识别(Smart Id

12、entification)。示例利用win2000-calc.exe计算器录制一段脚本1+2=3修改对象库中各对象的Name,则脚本中的名称也一并变化,并且不管把名称修改成什么,回放结果都是1+2=3,并不因Name的不同而去结算别的值(改了名你还是你)。不重新录制,而是修改这段脚本,计算3+4=7。方法:利用对象库中的添加对象按钮把按钮3和4加进来,然后修改脚本。Object Repository:对象库,查看每个定义的对象的属性和值。Highlight:高亮显示识别的是哪个对象。Object Spy:对象探测器,利用它可以正确探测到对象的实际值。Add Objects to Local:添

13、加对象库Update from Application:更新对象属性locate in repository:定位指定的对象是对象库中的哪个对象不重新录制,修改脚本,计算5+6=11方法:利用Active Screen(View Active Screen)实现,鼠标指向对象,右键执行“Add/View ObjectAdd to repository”保存脚本,“Action1SnapShots”目录下放着许多png文件。练习录制win2000-calc.exe计算器。QTP脚本的调试知识点Tools/Check Syntax:运行程序之前先检查语法调试功能:Step Into:F11,单步调

14、试,按一次F11脚本执行一句。Step Over:F10,跳过(其实执行了,只是没有单步调试)。如果是普通语句,则按一次F10执行一句,如果遇到过程/函数,则按一次F10会把该过程/函数一次性执行完。Step Out:Shift+F11,从过程/函数体内跳出(其实也执行了,只是执行完跳出来)。Step Over是在遇到过程/函数时一次性快速把过程/函数执行完,Step Out则是在单步执行到过程/函数内部后,快速执行完并跳出来,进入了过程/函数体后再用Step Over是跳不出来的。运行功能:F5 确定:开始运行Run from Step:鼠标从哪一行开始闪,程序就从哪一行开始运行,会直接运行

15、完。Debug from step:从光标处开始调试,要点F5 、F11、F10、Shift+F11继续运行。Run to Step:运行到光标处Breakpoint:F9,断点,运行到断点处会停止,按F5、F11、F10、Shift+F11继续运行。断点与Run to Setp的相同点是运行到指定位置都会暂停,但断点的好处是可以设置多个暂停点。调试视图:View/Debug Viewerwatch 监视窗口:选择一个变量,右键执行“Add to Watch”,就可以在watch窗口中只监视这个变量。Variables变量的查看窗口:在执行时动态的看到变量的值Command命令行窗口:可以动态

16、的更改变量和语句,也可以临时加一些变量和语句示例示例1:录制计算器进行加法计算,先算一个整数相加,再算一个浮点数相加,然后演示运行功能。SystemUtil.Run C:WINDOWSsystem32calc.exeWindow(计算器).WinButton(1).ClickWindow(计算器).WinButton(+).ClickWindow(计算器).WinButton(3).ClickWindow(计算器).WinButton(=).ClickWindow(计算器).WinButton(C).ClickWindow(计算器).WinButton(4).ClickWindow(计算器).

17、WinButton(.).ClickWindow(计算器).WinButton(5).ClickWindow(计算器).WinButton(+).ClickWindow(计算器).WinButton(8).ClickWindow(计算器).WinButton(.).ClickWindow(计算器).WinButton(8).ClickWindow(计算器).WinButton(=).ClickWindow(计算器).Close示例2:录制一个计算器加法功能,把整数加法和浮点数加法分别封装成两个过程,然后演示各个调试功能。参考代码如下:SystemUtil.Run calc.exeWindow(

18、计算器).ActivateWindow(计算器).WinButton(C).ClickintCalcfloatCalcSub intCalc() With Window(计算器).WinButton(1).Click.WinButton(+).Click.WinButton(2).Click.WinButton(=).Click End withEnd SubSub floatCalc()Window(计算器).WinButton(1).ClickWindow(计算器).WinButton(+).ClickWindow(计算器).WinButton(2).ClickWindow(计算器).Wi

19、nButton(=).ClickWindow(计算器).WinEdit(Edit).SetCaretPos 3Window(计算器).WinButton(4).ClickWindow(计算器).WinButton(.).ClickWindow(计算器).WinButton(5).ClickWindow(计算器).WinButton(+).ClickWindow(计算器).WinButton(6).ClickWindow(计算器).WinButton(.).ClickWindow(计算器).WinButton(9).ClickWindow(计算器).WinButton(=).ClickEnd S

20、ubWindow(计算器).Close示例3:定义两个变量,代替飞机票预定系统输入的用户名和密码。然后将这两个变量加到调试窗口中:Add To Watch。利用F11单步调试时能够看到这两个变量的值。(如果运行时看不到Debug Viewer,则可在调试状态下打开该窗口)Dim AgentName,PasswordAgentName=adminPassword=mercurySystemUtil.Run D:Program FilesMercury InteractiveQuickTest Professionalsamplesflightappflight4a.exeDialog(Login

21、).ActivateDialog(Login).WinEdit(Agent Name:).Set AgentNameDialog(Login).WinEdit(Password:).Set PasswordDialog(Login).WinButton(OK).ClickWindow(Flight Reservation).Close练习练习1:找到Tab键和Return键的字符串值。练习2:自己录制一下飞机预订系统admin/mercury,做一些调试和运行练习。插入Output Value知识点输出值Output Value:获取实际结果,点工具栏的Results快捷键能看到实际运行结果。

22、如何让QTP记住程序的输出值并记录在Results中:在录制脚本并执行到出结果的地方时,执行Insert/Output Value/Standard Output Value,选择要记录的对象和对象的属性。等到录制的脚本执行时,程序就会记录实际运行的结果值并输出到Results报表中。示例示例:计算1+2和2+2,把计算结果取出来放到dtGlobalSheet中去。相关语句:Window(计算器).WinEdit(Edit).Output CheckPoint(Edit)SystemUtil.Run calc.exeWindow(计算器).WinButton(datatable(num1,dt

23、GlobalSheet) ).ClickWindow(计算器).WinButton(+).ClickWindow(计算器).WinButton(2).ClickWindow(计算器).WinButton(=).ClickWindow(计算器).WinEdit(Edit).Output CheckPoint(Edit_5)If datatable(C,dtglobalsheet) =datatable(Edit_text_out1,dtglobalsheet)Thenmsgbox Pelsemsgbox FEnd IfWindow(计算器).CloseReporter.ReportEvent:R

24、eporter.ReportEvent EventStatus, ReportStepName, Details , ReporterEventStatus :0 or micPass,1 or micFail,2 or micDone,3 or micWarning示例:Reporter.ReportEvent 1, Custom Step, The user-defined step failed. 或者Reporter.ReportEvent micFail, Custom Step, The user-defined step failed. 练习练习1:录制飞机订票系统,订完票后把订

25、单号取出来放到Output Value中。插入同步点知识点QTP脚本语言为VBScript,脚本在执行的时候,执行语句之间的时间间隔是固定的,也就是说脚本在执行完当前语句之后,等待固定的时间间隔后开始执行下一语句。问题是后续的语句是在前面语句执行的结果上执行的,如果语句开始执行但是前面语句还没有执行完,这将导致错误的发生。解决的办法是加入同步点或使用wait语句。Insert/Synchronization Point:插入同步点Wait(n):等待n秒钟的时长Wait Property:插入同步点后,则生成的是Wait Property语句,表示等待某个属性值的出现。利用统计事物耗时的脚本可

26、以验证wait语句等待的时间:Services.StartTransaction wwait(5)Services.EndTransaction wmsgbox OK可以到Results中查看事物耗时全局同步点:File/Test Settings/Run/Object synchronization timeout步骤同步点:Insert同步点(开始录制,将鼠标停留在待测试系统的控件上,选择菜单添加同步点,如果此时待测试系统最小化,需要按住键盘左边CTRL加右键点击任务栏使系统恢复显示)Window(Flight Reservation).ActiveX(Threed Panel Contr

27、ol).WaitProperty text, Insert Done., 10000实际运行时等待时间为:最多等“全局同步点时长+步骤同步点时长”,最短等到同步现象出现为止。示例在进度条走完之后要加个语句来添加同步点:Property name=textProperty Value=“Insert Done”,10000含义是等到“Insert Done”出现,或者最多等10秒钟(毫秒)再做下面的事如果不加这个同步点,QTP就会在进度条还没有走完就迫不及待的做后面的事。添加步骤同步点后,脚本添加如下语句:Window(Flight Reservation).ActiveX(Threed Pan

28、el Control).WaitProperty text, Insert Done., 10000练习1、调试回放错误错误1:调用的程序目录不正确改正方法:修改程序启动脚本为 SystemUtil.Run Environment(ProductDir)&samplesflightappflight4a.exe错误2:找不到Fly From对象改正方法:使用locate in repository定位时定位不到这个对象。使用Add Objects to Local命令把Fly From多选框添加进来。然后使用Automation/Run From Step继续运行,不必从头开始。错误3:无法识

29、别Business按钮,请检查这个对象的属性是否与应用程序中显示的一致。改正方法:利用locate in repository果然无法定位成功。利用Object Spy检查Business按钮,并与对象库中记录的该对象对比,发现text属性不对,应该是“Business”。错误4:Menu对象不可用。原因是QTP一直在尝试选择菜单命令,但是由于进度条没有走完,所以选择不成功。改正方法:可以修改File/Setting/Run中全局同步点,或者也可以添加同步点。错误5:Order No对象匹配到了多个对象。添加附加属性以唯一识别这个对象。改正方法:查看Object Identification,

30、发现WinCheckBox的强制属性应该是nativeclass和text,但是对象库中的Order No没有text属性。直接使用Update from Application命令可以更新Order No的属性值。(或者使用“+”来添加也可以)错误6:对象不可用。原因是没有输入Order No号,所以OK按钮无法点击改正方法:设置一个订单号值,代码如下Window(Flight Reservation).Dialog(Open Order).WinEdit(Edit).Set 12、调试回放错误使用File/Import Test From Zip File命令,QTP可以直接导入zip格式

31、文件错误1:调用的程序目录不正确改正方法:修改程序启动脚本为 SystemUtil.Run Environment(ProductDir)&samplesflightappflight4a.exe错误2:找不到Flight Reservation窗口。用户名框为空。改正方法:对象库中Agent Name:对象的attached text与Password:的attached text一样,所以用户名和密码都输入到了密码框中。使用Update from Application命令更新Agent Name对象。错误3:找不到Flight Reservation窗口。改正方法:选择Flight Re

32、servation对象,利用Hightlight高亮却找不到对应的对象。原因是强制属性regexpwndtitle的值写错了,应该改成“Flight Reservation”。错误4:找不到Flights Table窗口改正方法:利用Hightlight高亮却找不到对应的对象。原因是强制属性text的值写错了,应该改成“Flights Table”,加一个空格。错误5:无法识别OK按钮改正方法:OK按钮的text属性值有误,利用Update from Application命令更新。错误6:无法识别Name对象改正方法:利用Update from Application命令更新,nativec

33、lass属性的值应该是Edit。错误7:识别不了Tickets对象改正方法:利用Update from Application命令更新,nativeclass属性的值应该是Edit。错误8:无法识别Business对象改正方法:利用Update from Application命令更新,三个按钮的nativeclass都是Button。插入CheckProperty知识点如何在自动化测试当中检查实际结果是否符合预期结果呢?在程序执行到结果刚刚出现的地方时,在QTP中点击键盘快捷键F7,弹出“步骤添加器”点小魔方图标,用“手工具”确定对象,比如文本框,Operation选择CheckProper

34、ty方法,设置PropertyName和PropertyValue,其中PropertyName是该对象的某个属性(属性名称要写正确),PropertyValue就是我们加到脚本中的预期结果。脚本实际运行到这里时会取出实际值与我们设置的预期值进行比较。OK后继续录制,直到结束。示例示例1:录制计算器加法运算,先计算5+6,插入属性检查点检查预期结果是否为“11.”,然后再计算10+20,插入属性检查点,但要将预期结果设置为错误的“20.”,观察运行后QTP是否能够正确判断结果对错。参考代码:SystemUtil.Run C:WINDOWSsystem32calc.exeWindow(计算器).

35、WinButton(5).ClickWindow(计算器).WinButton(+).ClickWindow(计算器).WinButton(6).ClickWindow(计算器).WinButton(=).ClickWindow(计算器).WinEdit(Edit).CheckProperty text, 11.Window(计算器).WinButton(C).ClickWindow(计算器).WinButton(1).ClickWindow(计算器).WinButton(0).ClickWindow(计算器).WinButton(+).ClickWindow(计算器).WinButton(2

36、).ClickWindow(计算器).WinButton(0).ClickWindow(计算器).WinButton(=).ClickWindow(计算器).WinEdit(Edit).CheckProperty text, 20.Window(计算器).Close练习练习1:GUI测试中测试Tab顺序是否正确?使用CheckProperty方法,检查每个对象的focused属性是否为True。录制飞机票预定系统的登录和订票窗口,检查每个控件的Tab顺序是否正确。并在插入CheckProperty后把订单号作为输出值输出出来。代码:SystemUtil.Run D:Program FilesM

37、ercury InteractiveQuickTest Professionalsamplesflightappflight4a.exeDialog(Login).WinEdit(Agent Name:).CheckProperty focused, TrueDialog(Login).WinEdit(Agent Name:).Set adminDialog(Login).WinEdit(Agent Name:).Type micTab Dialog(Login).WinEdit(Password:).CheckProperty focused, trueDialog(Login).WinEd

38、it(Password:).SetSecure 4a92993e3d6d6d1899edcb3bDialog(Login).WinEdit(Password:).Type micTab Dialog(Login).WinButton(OK).CheckProperty focused, true插入CheckPoint知识点预期结果:录制时设置并存储实际结果:运行时QTP会自动的捕获测试结果:QTP拿实际结果与预期结果进行比较,如果相同则pass,如果不同则failCheckPoint与CheckProperty有什么区别:CheckProperty只能检查对象的属性值是否正确,但CheckP

39、oint可以检查更广泛的东西。如果只是检查对象的属性值,则两者差不多。CheckPoint与Output有什么区别:Checkpoint(将期望结果和实际结果进行比较)包含了Output(只是输出值)的作用。CheckPoint与同步点有什么区别:检查点(具备Checkpoint timeout属性)是一种特殊的同步点,它具备同步的功能,但并不意味着有检查点就可以不要同步点了,要看你的意图是什么,区别在于同步点预期和实际不符时,不会报错,只会有warning,而检查点预期和实际不符时,结果是fail。1、标准(standard) F12添加一个标准检查点 基于对象识别,检查对象的属性值2、图像

40、(image):“图像检查点”检查应用程序或网页中的图像的值。除了看图的内容,还看其它属性隐藏在标准检查点里面选中compare image content常用于Web,检查图片的内容,还有图片的位置等属性3、表(table):“表检查点”检查表内部的信息。隐藏在标准检查点里面4、文本(text):“文本检查点”检查文本字符串是否显示在应用程序或网页的适当位置中。红色表示被检查的内容蓝色表示周围的参照物Match case:大小写必须匹配Exact match:精确匹配Ignore spaces:忽略空格Text not displayed:该文本不要显示5、文本区域(text area)(与

41、文本检查点区别在于文本区域检查点不支持Web页面文字检查)文本区域检查点检查文本字符串是否按照指定的条件显示在 Windows Applications 中所定义的区域内6、位图(bitmap):纯粹看图Bitmap CheckPointTools/Options/Run:Always只检查选定区域7、可访问性(accessibility)可访问性检查点就是检查网页上的所有图片是否都添加了Alt属性。W3C是一个国际组织,www.w3.org,制定html里面的所有规范。网页的图片常常由于网速慢、带宽不够而显示不出来,但显示不出来的图片上会有文字。Alt属性:当图片无法显示时采用替代文字。规范

42、的要求是最好有Alt属性。如何更改可访问性检查点的勾选(Insert检查点时无法给选项勾选或不选)Tools/Options/Web/Advanced:在这里可以设置8、XMLFrom Application能够检查应用程序的XML文件的Value是否正确From Resources直接设置要检查的XML文件,然后利用RUN就可以检查,不用录制9、页面(page):检查所有与网页有关的东西隐藏在标准检查点里面:Page选择检查点时要点击在空白的地方Broken Links:是否有无效链接常用于Web10、数据库(database)后面单独讲练习按照DataTable中的Date、From、To

43、订票,选择了航班后,将Order Information中的航班号、航线、订单号作为结果分别输出到DataTable中的FlightNo、Airline和OrderNo字段上去。然后启动传真,并进行传真预览,检查传真预览中的Customer和Class文本区域信息是否与DataTable中预设相同。参考代码:Window(Flight Reservation).ActiveX(MaskEdBox).Type DataTable(Date, dtGlobalSheet)Window(Flight Reservation).WinComboBox(Fly From:).Select DataTab

44、le(From, dtGlobalSheet)Window(Flight Reservation).WinComboBox(Fly To:).Select DataTable(To, dtGlobalSheet)Window(Flight Reservation).WinButton(FLIGHT).ClickWindow(Flight Reservation).Dialog(Flights Table).WinButton(OK).ClickWindow(Flight Reservation).WinEdit(Name:).Set wangWindow(Flight Reservation)

45、.WinButton(Insert Order).ClickWindow(Flight Reservation).ActiveX(Threed Panel Control).WaitProperty text, Insert Done., 10000Window(Flight Reservation).WinEdit(Flight No:).Output CheckPoint(Flight No:)Window(Flight Reservation).WinEdit(Airline:).Output CheckPoint(Airline:)Window(Flight Reservation).WinEdit(Order No:).Output Ch

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁