loadrunner培训文档.ppt_第1页
loadrunner培训文档.ppt_第2页
loadrunner培训文档.ppt_第3页
loadrunner培训文档.ppt_第4页
loadrunner培训文档.ppt_第5页
免费预览已结束,剩余118页可下载查看

下载本文档

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

文档简介

,LoadRunnerQuickTutorial,LR78-SLIDES-01A,大纲,Loadrunner介绍规划编写脚本脚本录制、调试、优化场景设计用户数、场景类型、场景计划、运行设置、实时监控场景执行调试场景、小压力运行、100%负载测试、压力测试结果分析常用指标观察、生成测试报告,第一节,LoadRunner介绍,为什么要进行压力测试,Thefailureofamission-criticalapplicationcanbecostlyAssureperformanceandfunctionalityunderreal-worldconditionsLocatepotentialproblemsbeforeyourcustomersdoReducedevelopmenttimeReduceinfrastructurecosts,压力测试分类,Findoutwhetherthesystemcanhandletheexpectedloadupondeploymentunderreal-worldconditions.,Findtheapplicationsbreakingpoint.Applytestingthatmeasureswhethertheapplicationsenvironmentisproperlyconfiguredtohandleexpectedorpotentiallyunexpectedhightransactionvolumes.,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,ReplacestesterswithVirtualUsers,ControllermanagesVirtualUsers,Databaseserver,Vusers,VirtualUserloadgenerator,Applicationserver,LoadGeneration,SystemUnderTest,LoadRunner的实现方法,LoadRunnerisacompletesolutiontoconductautomatedloadtestingbefore,during,andafterapplicationdeployment.LoadRunnerallowsyouto.,Scale,Identify,Diagnose,theapplicationtoapredeterminedcapacity.,businessprocessesorsystemcomponentshavingtrouble.,aproblemtopinpointtherootcause.,LRVUGEN,VuserScriptRecorderrecordsVuserscriptsthatsimulatethestepsofrealusersusingtheapplication.,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软件,StartProgramsMercuryTours,返回大纲,第三节,编写脚本,录制Web脚本的方法,1.运行VuGen,创建新的脚本,4.开始录制,5.进行正常的业务流程的操作,6.当业务操作完毕后,按StopRecording将录制结束,7.保存脚本,2.选择创建Web(HTTP/HTML)protocol的脚本,3.设定录制选项RecordingOptions.,DEMO老师将会演示如何录制脚本,设定录制选项RecordingOptions,RecordingBrowserRecordingProxyAdvancedCorrelation,DEMORecordingOptions,两种不同查看脚本的方式,TreeView,ScriptView,Treeviewhasiconsfortherecordedusersteps,EachTreeViewiconrepresentsaCstatementviewableinScriptView,DEMOTreeandScriptViewIconandusageexamples,什么时候选择不同的录制方式?,Thisisdefaultmode.IfproblemencounteredwithformsubmissionorwithlinkclickingthenrecordwithURLoptioncheckedunderHTMLAdvanced,HTMLRecording:,URLRecording:,Recordsaseparaterequestforeachobjectrequestedfromtheserver.Givesbestcontrolovertraffic.,脚本的目录结构,设置回放的运行时刻设置Run-timeSettings,RunLogicPacingLogThinkTimeMiscellaneousSpeedSimulationBrowserEmulationProxyPreferencesContentCheck,Availableforallprotocols.,SpecifictoWeb.,DEMORun-timeSettings,运行脚本,ClicktheRunbuttontoplaybackthescript.,TheExecutionloglistsallmessagesoncethescripthasstoppedrunning.,DEMORunningascriptandhowtosetresultsdirectory,常用的调试脚本的工具,TestResultswindowExecutionLogSnapshotResultswindowPageViewServerResponseClientRequestRun-TimeViewer,DEMOAvailabledebuggingtooloptions,本节总结,本节介绍了常用的录制选项本节介绍了两种录制Web协议脚本的方法本节介绍了运行时刻的各种设定本节介绍了一般选项的设定本节介绍了进行调试脚本的基本工具,ActionAsetofrecordeduseractionsinaVuserthatallowsyoutoemulateaparticularusertaskthroughscriptiteration.,什么是Action?,在Web脚本里面使用多个Action,AWebVuser(script):,vuser_initRunonce,ActionRun3times,vuser_endRunonce,Action1Run5times,Action2Run4times,then,then,then,then,使用多个Action的典型例子,最典型的情况是用户登录一次,进行多次业务,然后退出系统:RecordLoginuserstepsinvuser_initRecordselectinganiteminthefirstsectioncalledActionRecordplacingitemsinshoppingcartuserstepsinAction1RecordCheckoutandLogoutuserstepsinvuser_end,Webserver,DBserver,如何把不同的操作录制到多个Actions中?,Actionlist,1.Startrecording2.Selectactionfile3.Recordusersstepsintheappropriateactionfile4.Repeatsteps2and3asnecessary5.Stoprecording,DEMOAddingcreatingLRActions,注意设定好开始和结束的状态,AlwaysendatthispageifthenextiterationisSign-OnorRegister.,根据测试目标来确定脚本的Action,Emulatethreetypesofuserswhere50%oftheusersareloggingin,25%aresearchingandtheremaining25%arebookingtickets?,LoadTestingGoal:,Recordonescriptwithallthreebusinessprocessesunderseparateactionsandapplyweighting.,Suggestedmethod:,DEMOCreatingWeighting,如何衡量操作的响应时间?,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_STOPusethesewhenyouwanttosetthetransactionstatusmanuallyinthecode,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.,DEMOHowtoparameterizeainputdata,参数的类型,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(thestatus)aseitherPASSTestrequirement#5successful.ORFAILTestrequirement#5failed.,(1)Capturetheinformationneededtoperformverification.,检查点的基本内容,ExpectedValue,ActualValue,PASS,=,IF,LoadRunner提供的文本检查点,CheckpointIcons,Text,VuGenallowsyoutoaddCheckpointsforverificationautomaticallyandalsoprogrammatically.,AtextcheckisasearchforaspecifiedtextstringonaWebpage.Addsweb_reg_findfunctiontothescript.,关联的基本概念介绍Recording,WebServer,1.LoginUserNamejojoPasswordbean2.Yoursessionid123453.Requestforproductinfo4.Productinfofound,VuGenScript,Dynamicdataishard-codedinthescript,关联的基本概念介绍-PlayingBack,WebServer,1.LoginUserNamejojoPasswordbean2.Yoursessionid123453.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,Indicatesnomoreattributes,Optionalindicatesordinalorinstanceorthematch,TheleftRes=(ab?b:a)c?c:(ab?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,DEMOController,选择Scenario类型,Chooseoneofthesetypeswhenyoustartanewscenario:ManualGoal-Oriented,DEMOScenarioTypes,ManualScenariomainpurposeistolearnhowmanyVuserscanrunconcurrentlygivesyoumanualcontroloverhowmanyVusersrunandatwhattimesGoal-OrientedScenariogoalmaybethroughput,responsetimeornumberofconcurrentVusersLoadRunnermanagesVusersautomatically,Manual与Goal-OrientedScenarios比较,选择哪一种Scenarios类型?,ScenarioOutline,ScenarioType,Manualscenariowith1,000concurrentVusers,Goal-OrientedscenariowithTransactionResponseTimeastheGoalType,SchedulingScenarios,Allowsrepetitionofimportantusagepatternsthroughoutloadtestingfordefineddurationofloadtest.,DEMOHowtoaccessScheduleBuilder,SchedulebyScenario,AppliessamescheduleacrossallgroupsAllowsdelayinstarttimeforscenarioCreatesaprofileofusageby“users”,SchedulebyGroup,IndividualsettingsforeachgroupAllowsdelayinstarttimeforscenarioCreatesaprofileofusageby“businessprocess”,RampUp与RampDown,RampUp,RampDownOnlyapplicableforscenarioswhereintheDurationtabRunforoptionisselectedSpecifyhowmanyVuserstostopandhowoftenStopallVusersatoncePrimarilyusedtodetectmemoryleakandsystemrecoveryafterheavyload,AllowsloadingallVusersinthescenariograduallyTimedincrementspinpointtheexactpointatwhichasystem/softwarefailsordegrades,什么是Run-timeSetting,Run-timeSettingscanbeconfiguredinVuGenandintheControllerDifferentGroupsofVusersmanyhavedifferentRun-timeSettingsRun-timeSettingsgreatlyaffectVuserbehaviorRun-timeSettingsgreatlyaffectVuser“footprints”,Run-timeSettings,RunLogicPacingLogThink-TimeMiscellaneous,DEMOHowtoaccessRun-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.,DEMOHowtoaccessScenarioRun-timeSettings,Transactions不能说明一切,Transactionsmeasurethetimerequiredforabusinessprocess.Theperformanceoftransactionssuggestsapictureofthesystemcomponentsbehavior.,Transaction:searchExercisestheWeb,applicationanddatabaseserver,Thistransactionperformedpoorlywitharesponsetimeof30seconds.,Transaction:buyExercisestheWebandapplicationserver,Thistransactionperformedasexpectedwitharesponsetimeof1min.,PerformanceMonitors,Internet/Intranet,Databaseserver,Appservers,Webservers,Clients,LoadRunnerofferswiderangeofperformancemonitorsforisolatingbottlenecksMonitorsarenon-intrusiveandagent-lessMonitorsgatherdataforonline/offlineanalysisMonitorsdisplayreal-timedataduringtestingMonitorsgatherdataforofflinerootcauseanalysisaftertesting,ApartfromTransactionsperformance,youneedPerformancemonitorstohighlightsystemcomponentbottlenecks,PerformanceMonitors,ViewandcollectstatisticsduringScenarioexecutionusingLoadRunnerControlleronlinegraphsCorrelatethecollectedstatisticaldatainLoadRunnerAnalysisafterscenarioexecutionforrootcauseanalysisFacilitatecollaborationbetweenprojectmembersduringandafterScenarioexecutionbyallowinguserstoviewmultipleperformancemonitorsviathebrowser,DEMORunScenariowithBookFlightscriptandhowonlinemonitorsgivethecurrentstatistics.-Howtoaddanddeletemonitors.,配置Monitor,ToaddmeasurementforSystemResourcemonitor.,Dothis:1.Right-clickamonitorpane2.SelectAddMeasure-ment(s)frompop-upmenu3.Selectservermachinenameandresourcestomonitorfromthedialog,Administrativeprivilegesarereq

温馨提示

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

评论

0/150

提交评论