loadrunner培训文档.ppt_第1页
loadrunner培训文档.ppt_第2页
loadrunner培训文档.ppt_第3页
loadrunner培训文档.ppt_第4页
loadrunner培训文档.ppt_第5页
已阅读5页,还剩118页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

LoadRunnerQuickTutorial LR78 SLIDES 01A 大纲 Loadrunner介绍规划编写脚本脚本录制 调试 优化场景设计用户数 场景类型 场景计划 运行设置 实时监控场景执行调试场景 小压力运行 100 负载测试 压力测试结果分析常用指标观察 生成测试报告 第一节 LoadRunner介绍 为什么要进行压力测试 Thefailureofamission criticalapplicationcanbecostlyAssureperformanceandfunctionalityunderreal worldconditionsLocatepotentialproblemsbeforeyourcustomersdoReducedevelopmenttimeReduceinfrastructurecosts 压力测试分类 Findoutwhetherthesystemcanhandletheexpectedloadupondeploymentunderreal worldconditions Findtheapplication sbreakingpoint Applytestingthatmeasureswhethertheapplication senvironmentisproperlyconfiguredtohandleexpectedorpotentiallyunexpectedhightransactionvolumes Findthestabilityofthesystemwithrespecttohandlinglargeamountsofdataoverextendedtimeperiods Findthebehaviorandperformanceofeachtier 压力测试目标举例 ApplicationresponsetimeHowlongdoesittaketocompleteatask ConfigurationsizingWhichconfigurationprovidesthebestperformancelevel AcceptanceIsthesystemstableenoughtogointoproduction RegressionDoesthenewversionofthesoftwareadverselyaffectresponsetime ReliabilityHowstableisthesystemunderaheavyworkload CapacityplanningAtwhatpointdoesdegradationinperformanceoccur BottleneckidentificationWhatisthecauseofdegradationinperformance ProductevaluationWhatisthebestserverfor100users Testers LoadGeneration SystemUnderTest Doyouhavethetestingresources TestingpersonnelClientmachines Howdoyousynchronizeusers Howdoyoucollectandanalyzeresults Howdoyouachievetestrepeatability Everybody clicktheSEARCHbuttonagain 手工测试的问题 Databaseserver Applicationserver LoadRunner解决方案 Overcomesresourcelimitations Providesmeaningfulresultswithanalysistools Allowsrepeatabletestswithscriptedactions Analysis RunsmanyVusersonfewmachines Replacestesterswith VirtualUsers ControllermanagesVirtualUsers Databaseserver Vusers VirtualUserloadgenerator Applicationserver LoadGeneration SystemUnderTest LoadRunner的实现方法 LoadRunnerisacompletesolutiontoconductautomatedloadtestingbefore during andafterapplicationdeployment LoadRunnerallowsyouto Scale Identify Diagnose theapplicationtoapredeterminedcapacity businessprocessesorsystemcomponentshavingtrouble aproblemtopinpointtherootcause LRVUGEN VuserScriptRecorder recordsVuserscriptsthatsimulatethestepsofrealusersusingtheapplication LRCONTROLLER TheControllerisanadministrativecenterforcreating maintainingandexecutingScenarios TheControllerassignsVusersandloadgeneratorstoScenarios startsandstopsloadtestsandperformsotheradministrativetasks LRANALYSIS LRAnalysisprovidesgraphsandreports Thesegraphsandreportssummarizethesystemperformance LoadRunner组件 LoadRunner支持的环境 Web HTTP S CORBAWAPCOMRMILDAPWinsockStreamingFTPIIOPPOP3iModeRealPlayerMSMediaVoiceXMLSMTP Databases OracleMSSQLServerDB2SybaseInformixODBC MiddlewareProtocols CORBACOMEJBsTUXEDOJoltJDBCMQSeries Platforms NT 2000 XPSunHPIBMLinux ERP CRM OracleApps SAPSiebelPeopleSoftClarifyBaan Legacy 32705250VT100 Internet Intranet Databaseserver Appservers Webservers Clients 什么是Scenario ScenarioAscenarioisafilethatdefineswhichVuserstoexecute thenumberofVuserstorun thegoalsofthetest whichcomputerhoststheVusersandtheconditionsunderwhichtoruntheloadtest LoadRunner的工作方式 Databaseserver Appservers Webservers LRCONTROLLER LOADGENERATOR2 NY LRANALYSIS LOADGENERATOR1 SF Createscenariosandassignthemtoloadgenerators Generatesloadandsendsperformancedatatocontroller Accessthereportsandgraphs Generatesloadandsendsperformancedatatocontroller 硬件配置需求 压力测试流程 DefineGoalsAnalyzesystemGatherSystemUsageData RecordScriptsandturnscriptsintoVusersbyaddingtestdataanduserbehavior CreateScenariosbasedonyourgoals ExecuteScenariosfortestingfirst running100 andoverloading Analyzeresultsdataandpinpointbottlenecks Finetunesystembasedonanalysisdataandre runthescenario TweakSystemBasedonAnalysis Rerunningthescenarioindicateswhetherperformancehasimprovedandwhethergoalshavebeenachieved 压力测试是一项团队工作 LoadRunner团队工作 TweakSystemBasedonAnalysis LRExpert LRExpert LRExpert LRExpert LRExpert 返回大纲 第二节 规划 在创建脚本之前要进行充分的规划 规划阶段的内容 建立负载测试的目标制定出可以用数量衡量的目标标准分析被测系统的业务运行状况确定要录制哪些商业流程 businessprocesses 确定业务高峰的负载情况和时间把需要测试的BP的操作步骤形成正式文档准备测试数据收集系统的技术信息确定系统的架构确定系统各部件的软件情况 使用什么样的数据库服务器 Web服务器 以帮助我们在合理的时间内确定系统瓶颈 本次培训使用的Demo软件 Start Programs MercuryTours 返回大纲 第三节 编写脚本 录制Web脚本的方法 1 运行VuGen 创建新的脚本 4 开始录制 5 进行正常的业务流程的操作 6 当业务操作完毕后 按StopRecording将录制结束 7 保存脚本 2 选择创建Web HTTP HTML protocol的脚本 3 设定录制选项RecordingOptions DEMO 老师将会演示如何录制脚本 设定录制选项RecordingOptions RecordingBrowserRecordingProxyAdvancedCorrelation DEMO RecordingOptions 两种不同查看脚本的方式 TreeView ScriptView Treeviewhasiconsfortherecordedusersteps EachTreeViewiconrepresentsa C statementviewableinScriptView DEMO TreeandScriptView Iconandusageexamples 什么时候选择不同的录制方式 Thisisdefaultmode IfproblemencounteredwithformsubmissionorwithlinkclickingthenrecordwithURLoptioncheckedunderHTMLAdvanced HTMLRecording URLRecording Recordsaseparaterequestforeachobjectrequestedfromtheserver Givesbestcontrolovertraffic 脚本的目录结构 设置回放的运行时刻设置Run timeSettings RunLogicPacingLogThinkTimeMiscellaneousSpeedSimulationBrowserEmulationProxyPreferencesContentCheck Availableforallprotocols SpecifictoWeb DEMO Run timeSettings 运行脚本 ClicktheRunbuttontoplaybackthescript TheExecutionloglistsallmessagesoncethescripthasstoppedrunning DEMO Runningascriptandhowtosetresultsdirectory 常用的调试脚本的工具 TestResultswindowExecutionLogSnapshotResultswindowPageViewServerResponseClientRequestRun TimeViewer DEMO Availabledebuggingtooloptions 本节总结 本节介绍了常用的录制选项本节介绍了两种录制Web协议脚本的方法本节介绍了运行时刻的各种设定本节介绍了一般选项的设定本节介绍了进行调试脚本的基本工具 ActionAsetofrecordeduseractionsinaVuserthatallowsyoutoemulateaparticularusertaskthroughscriptiteration 什么是Action 在Web脚本里面使用多个Action AWebVuser script vuser initRunonce ActionRun3times vuser endRunonce Action1Run5times Action2Run4times then then then then 使用多个Action的典型例子 最典型的情况是用户登录一次 进行多次业务 然后退出系统 RecordLoginuserstepsin vuser init Recordselectinganiteminthefirstsectioncalled Action Recordplacingitemsinshoppingcartuserstepsin Action1 RecordCheckoutandLogoutuserstepsin vuser end Webserver DBserver 如何把不同的操作录制到多个Actions中 Actionlist 1 Startrecording2 Selectactionfile3 Recordusersstepsintheappropriateactionfile4 Repeatsteps2and3asnecessary5 Stoprecording DEMO AddingcreatingLRActions 注意设定好开始和结束的状态 AlwaysendatthispageifthenextiterationisSign OnorRegister 根据测试目标来确定脚本的Action Emulatethreetypesofuserswhere50 oftheusersareloggingin 25 aresearchingandtheremaining25 arebookingtickets LoadTestingGoal Recordonescriptwithallthreebusinessprocessesunderseparateactionsandapplyweighting Suggestedmethod DEMO CreatingWeighting 如何衡量操作的响应时间 STEP1 StartApplication STEP2 Typeusernameandpassword STEP3 ClickonSign Inbutton STEP4 Waitforconfirmation STEP5 Selectadepartureandarrivalcities STEP6 Enterdates STEP7 Entercreditcarddetails STEP8 ClickonSubmit 什么是Transaction LoadRunnerTransactionGivesanend to endmeasurementoftimeelapsedintheexecutionofoneormorestepsinabusinessprocess User WebServer Sign Intransactiontook8sec LoadRunner的Transactions测量什么内容 LoadRunnertransactionsmeasurethetransmissionandresponsetimebetweenclientandserver Transaction开始和结束按钮 Transaction的状态 LR AUTO default usethistodetectthetransactionstatusautomatically LR PASS LR FAIL LR STOP usethesewhenyouwanttosetthetransactionstatusmanuallyinthecode Transactions中的思考时间如何处理 ThinktimesMayreduceaccuracyoftransactionmeasurementsCanbefilteredoutofAnalysisgraphs 通过检查运行日志来确定Transaction的执行结果 Transactions的相关设定 参数化的概念 RecordedScript SelectSanFrancisco ParameterizedScript Select SelectionishardcodedandwillselectSanFranciscooneveryrun Selectionisparameterizedandwillselectdifferentcityoneveryrun 为什么要引入 参数化 REALUSERS Variedinputtotheapplication Staticinputtotheapplication Recordedscript VirtualUsers ToEmulatereal worldbehaviorandtocreaterealisticresults 什么时候需要参数化 STEP1 StartApplication STEP2 Typeusernameandpassword STEP3 ClickonSign Inbutton STEP4 Waitforconfirmation STEP5 Selectadepartureandarrivalcities STEP6 Enterdates STEP7 Entercreditcarddetails STEP8 ClickonSubmit Uniqueconstraint Datadependency Datacaching Dateconstraint 如何参数化输入数据 1Determinewhichfieldstoparameterize 2Replacerecordedvalueswithparameters 3Decidewhichparametertypetouse 4Createthedatafile 5Populatethedatafile 6Choosethedataaccessmethodandthenumberofiterations 7RuntheVuserandanalyzetheresultstoverifycorrectexecution DEMO Howtoparameterizeainputdata 参数的类型 InternalDataDataFilesMasterDataUserGeneratedDataExternalDataUser DefinedFunctions Specifyingthesourcefortheparameterdata Therearethreetypes File 类型参数的数据访问方式 SelectnexttellsLoadRunnerinwhatordertousedatafromthefile datasource 如何查看脚本执行时参数的值 ToseeparameterdataintheExecutionLog selectExtendedlogandParametersubstitutionintheRun timeSettings 数据个数和RunLogic的关系 TotestalldatausingtheSequentialaccessmethod NumberofIterationsshouldequalthenumberofrowsinthedatafile 什么是检查点Checkpoint CheckpointAcheckpointisastepinaVuserscriptwhichverifieswhetheravisualcueappearedasexpected VerificationalwaysresultsinaPASSorFAILstatus 在大并发用户压力的情况下验证脚本是否执行成功是负载测试的基本要求 Success Businessprocesscomplete Failure Businessprocessfailed OneVuserrunningthescript ScriptrununderloadwithmanyconcurrentVusers Increaseinload Lowload 确定脚本执行成功的标准 Login Selectdepartureandarrivalcities Selectdepartureandarrivaldates Selectflight Purchaseticket ContinueShopping Therewasanerrorwhilegeneratingyourorder Youritinerarywasbooked ThankyouforchoosingMercuryTours 通过界面的某些信息来确定脚本是否执行成功 2 Onplayback comparetheactualvalueontheapplicationtothesavedexpectedvalue 3 Sendthecomparisonresult the status aseitherPASS Testrequirement 5successful ORFAIL Testrequirement 5failed 1 Capturetheinformationneededtoperformverification 检查点的基本内容 ExpectedValue ActualValue PASS IF LoadRunner提供的文本检查点 CheckpointIcons Text VuGenallowsyoutoaddCheckpointsforverificationautomaticallyandalsoprogrammatically AtextcheckisasearchforaspecifiedtextstringonaWebpage Addsweb reg findfunctiontothescript 关联的基本概念介绍 Recording WebServer 1 LoginUserNamejojoPasswordbean2 Yoursessionid 123453 Requestforproductinfo4 Productinfofound VuGenScript Dynamicdataishard codedinthescript 关联的基本概念介绍 PlayingBack WebServer 1 LoginUserNamejojoPasswordbean2 Yoursessionid 123453 Requestforproductinfo4 Productinfofound Response ERRORSessionID12345hasexpiredLoginagaintogetproductinfo VuGenScript Reusingrecordeddynamicdatawillcauseerrorswhenyoureplaythescript 关联的基本概念介绍 Solution WebServer 1 2 Your3 4 CorrelatedVuGenScript Recordeddynamicdatamustbecorrelatedusingparameters 关联是一个原理性的问题 2 1 3 关联是一个原理性的问题 在任何协议的脚本中都存在 关联是开发脚本的最耗时 最烦琐的一个过程 因为每个被测系统都不同 为了减轻关联的工作量 LoadRunner提供了一些自动化关联的辅助工具 手工关联的基本步骤 Playbackthescriptanddetermineiferrorisduetocorrelation Determinewhichdynamicvaluestocorrelate Findtheleftboundary rightboundaryandoccurrenceofthedynamicvalue Addaweb reg save paramfunctionandtheargumentstothescript abovethestepwhichrequeststhepagewiththevaluetocapture Parameterizethedynamicvalueinthescripteverytimeitoccurs Verifycorrectexecution 关联的第一步 脚本回放失败 Q Whydidthestepcreationfail 1 Makeanoteofwhichstepfailed 2 InvestigatetheExecutionLog 通过WDiff查看脚本变化的内容 Therearefivedifferenceshighlighted 确定哪些动态信息需要关联 Name buyFlights x Value 52 ENDITEM Name buyFlights x Value 23 ENDITEM Name buyFlights y Value 15 ENDITEM Name buyFlights y Value 17 ENDITEM lr think time 2 lr think time 1 lr think time 7 lr think time 11 Name flight 210 Value on ENDITEM Name flight 206 Value on ENDITEM Name removeSelected x Value 101 ENDITEM Name removeSelected x Value 80 ENDITEM Name removeSelected y Value 13 ENDITEM Name removeSelected y Value 10 ENDITEM lr think time 1 1 2 3 4 5 ThesevaluesrepresentthescreenlocationsofmouseclicksTheyareusedbythescriptbutdonotneedtobecorrelated Thinktimesareusedbythescriptbutdonotneedtobecorrelated Flightnumberisdynamicandrequirescorrelation 关联函数 web reg save param param name LAST User definedparametername Indicates nomoreattributes Optionalindicatesordinalorinstanceorthematch Theleft rightboundaryoftheparameterorthedynamicdata LB RB ORD SeetheLoadRunnerdocumentationforacompletelistofattributes web reg save paramhasthefollowingarguments 在ServerResponse确定动态信息的左右边界 LEFTBOUNDARY RIGHTBOUNDARY LB type checkbox name RB 脚本录制完成后自动关联的方法 需要将脚本回放一次LoadRunner会自动比较回放时的结果和录制时的结果 确定需要关联的内容回放完成后可以使用LoadRunner内置的ScanforCorrelations工具进行自动关联 脚本录制时自动关联的步骤 EnableCorrelationduringrecordinginRecordingOptionsCreatenewapplicationCreatenewruleforthenewlycreatedapplicationanddefinepropertiesforthenewruleTestthenewlycreatedrule optional RecordthescriptPlaybackthescripttoverifycorrectexecution DEMO CorrelationDuringRecording 返回大纲 调用动态库dll 在Windows操作系统中使用DLL有很多优点 最主要的一点是多个应用程序 甚至是不同语言编写的应用程序可以共享一个DLL文件 真正实现了资源 共享 大大缩小了应用程序的执行代码 更加有效的利用了内存 使用DLL的另一个优点是DLL文件作为一个单独的程序模块 封装性 独立性好 在软件需要升级的时候 开发人员只需要修改相应的DLL文件就可以了 而且 当DLL中的函数改变后 只要不是参数的改变 程序代码并不需要重新编译 这在编程时十分有用 大大提高了软件开发和维护的效率 在LR下也可以直接调用动态链接库文件 针对一些使用LR脚本编写比较烦琐的方法可以考虑此方法 比如各种加解密算法的实现 数据库的操作等 并能够使测试脚本简单明了 鉴于此 本人初次尝试了如何制作DLL文件并在LR中使用 调用动态库dll intMin inta intb intc intRes Res a b b a c c a b b a returnRes 该动态链接库编译成功后 打开dllfortest工程目录下的debug目录下 可以看到生成了一个dllfortest dll文件 这就是我们想要的文件 调用动态库dll 2 dll文件在LR中的调用打开LRVUGenerator 选择CVuser协议 或其他支持C的协议 进入编辑界面 Action部分如下所示 Action lr load dll dllfortest dll lr message MaxResultis d Max 100 200 67 lr message MinResultis d Min 55 97 63 return0 将dllfortest dll文件复制到脚本所在的目录 如果不复制的话 lr load dll的参数应该写成dll文件的绝对路径 如果编译没有报错的话 就可以直接运行了 第四节 Scenario设计 UnderstandingScenariosSchedulingScenariosRuntimeSettingsPerformanceMonitors 目标 TweakSystemBasedonAnalysis 什么是Scenario ScenarioAscenarioisafilethatdefineswhichVuserstoexecute thenumberofVuserstorun thegoalsofthetest whichcomputerhoststheVusersandtheconditionsunderwhichtoruntheloadtest LoadRunnerController Beforescenarioexecutionusedtodesignscenariousedtoinitiatescenariorun DuringscenarioexecutionrunsmanyVuserssimultaneouslycontrolseachVuser initialize run pause stop displaysexecutionstatusofeachVuserdisplaysmessagesfromeachVusermonitorssystemandnetworkresourcesAfterscenarioexecutioncollectsandorganizesperformancedatalaunchestheAnalysistools Controllerorganizesandmanagesscenarioelements DEMO Controller 选择Scenario类型 Chooseoneofthesetypeswhenyoustartanewscenario ManualGoal Oriented DEMO ScenarioTypes ManualScenariomainpurposeistolearnhowmanyVuserscanrunconcurrentlygivesyoumanualcontroloverhowmanyVusersrunandatwhattimesGoal OrientedScenariogoalmaybethroughput responsetimeornumberofconcurrentVusersLoadRunnermanagesVusersautomatically Manual与Goal OrientedScenarios比较 选择哪一种Scenarios类型 ScenarioOutline ScenarioType Manualscenariowith1 000concurrentVusers Goal OrientedscenariowithTransactionResponseTimeasthe GoalType SchedulingScenarios Allowsrepetitionofimportantusagepatternsthroughoutloadtestingfordefineddurationofloadtest DEMO HowtoaccessScheduleBuilder SchedulebyScenario AppliessamescheduleacrossallgroupsAllowsdelayinstarttimeforscenarioCreatesaprofileofusageby users SchedulebyGroup IndividualsettingsforeachgroupAllowsdelayinstarttimeforscenarioCreatesaprofileofusageby businessprocess RampUp与RampDown RampUp RampDownOnlyapplicableforscenarioswhereintheDurationtabRunforoptionisselectedSpecifyhowmanyVuserstostopandhowoftenStopallVusersatoncePrimarilyusedtodetectmemoryleakandsystemrecoveryafterheavyload AllowsloadingallVusersinthescenariograduallyTimedincrementspinpointtheexactpointatwhichasystem softwarefailsordegrades 什么是Run timeSetting Run timeSettingscanbeconfiguredinVuGenandintheControllerDifferentGroupsofVusersmanyhavedifferentRun timeSettingsRun timeSettingsgreatlyaffectVuserbehaviorRun timeSettingsgreatlyaffectVuser footprints Run timeSettings RunLogicPacingLogThink TimeMiscellaneous DEMO HowtoaccessRun timeSettings RunLogic与Pacing ControlsthedelaybetweeniterationsCanbeusedtoextendtheamountoftimeatestruns Usedtomodelmorecloselythewayrealusersinteractwiththeapplication RunLogic ReplicatesarealuserperformingstepsinabusinessprocessmorethanonceAllowssettingoftheiterationcount howmanytimesaVuserwillrepeatatask Pacing Log设置 InController loggingisenabledbydefaulttosendmessagesonlywhenthereisanerrorUsedforVuserinformationsuchaserrormessagesparametersubstitutiontransactionstatusverificationstatus ThinkTime ThinkTimeintroducestherightamountofdelaytoemulateuserbehavioraccuratelyAllowsreplayingorignoringofrecordedThinkTime default replay InfluenceshowtheVuserusestherecordedThinkTimeIgnoringThinkTimewillgreatlyaffectthescalabilityoftheloadgenerators MiscellaneousSettings ErrorHandlingContinueonErrorallowsVuserstoattempttoproceedpastanerror ItisusedwhenErrorHandlinghasbeenaddedtothescriptmanually Bydefault ContinueonErrorisoff MultithreadingThreadingsupportsmoreVusersperloadgeneratorProcesssupportsVuserthancannotbemultithreadedAutomaticTransactionsActionscanbeautomatically timed asaTransaction ScriptActionsshouldbeassignedmeaningfulnamesforclarityifautomatictransactionsareused Stepcanalsobeautomatically timed asaTransaction Scriptstepsshouldbeassignedmeaningfulnamesforclarityifautomatictransactionsareused ScenarioRun timeSettings ScenarioRun timeSettingsrelateto VuserQuotasAllowssettingthenumberofVuserstoinitializeatonetime Appliestoallloadgenerators Thissettingcanapplytoindividualloadgenerators StoppingVusersAllowssettinghowLoadRunnerwillstoptherunningofVusers RandomSequenceSeedEachseedvaluerepresentsonesequenceofrandomvaluesusedfortestexecution ThissettingappliesparameterizedVuserscriptsandrandomizedthinktimes DEMO HowtoaccessScenarioRun timeSettings Transactions不能说明一切 Transactionsmeasurethetimerequiredforabusinessprocess Theperformanceoftransactionssuggestsapictureofthesystemcomponent sbehavior Transaction searchExercisestheWeb applicationanddatabaseserver Thistransactionperformedpoorlywitharesponsetimeof30seconds Transaction buyExercisestheWebandapplicationserver Thistransactionperformedasexpectedwitharesponsetimeof1min PerformanceMonitors Internet Intranet Databaseserver Appservers Webservers Clients LoadRunnerofferswiderangeofperformancemonitorsforisolatingbottlenecksMonitorsarenon intrusiveandagent lessMonitorsgatherdataforonline offlineanalysisMonitorsdisplayreal timedataduringtestingMonitorsgatherdataforofflinerootcauseanalysisaftertesting ApartfromTransactionsperformance youneedPerformancemonitorstohighlightsystemcomponentbottlenecks PerformanceMonitors V

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论