




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
LoadRunner简介LoadRunner工作原理LoadRunner安装LoadRunner的组成LoadRunner测试过程LR_开发测试脚本LR_创建运行场景LR_其他有用的设置LR_执行场景/监控场景LR_分析性能测试结果目录 LoadRunner是一种预测系统行为和性能的工业标准级负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。通过使用LoadRunner,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。目前企业的网络应用环境都必须支持大量用户,网络体系架构中含各类应用环境且由不同供应商提供软件和硬件产品。难以预知的用户负载和愈来愈复杂的应用环境使公司时时担心会发生用户响应速度过慢,系统崩溃等问题。这些都不可避免地导致公司收益的损失。MercuryInteractive的LoadRunner能让企业保护自己的收入来源,无需购置额外硬件而最大最大限度地利用现有的IT资源,并确保终端用户在应用系统的各个环节中对其测试应用的质量可靠性和可扩展性都有良好的评价。LoadRunner是一种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能。LoadRunner的测试对象是整个企业的系统,它通过模拟实际用户的操作行为和实行实时性能监测,来帮助您更快的查找和发现问题。此外,LoadRunner能支持广范的协议和技术,为您的特殊环境提供特殊的解决方案。
LoadRunner简介LoadRunner工作原理
LoadRunner启动以后,在任务栏会有一个Agent进程,通过Agent进程,监视各种协议的Client与Server端的通讯,使用自带的一套C语言函数将录制下来的用户操作转化为脚本。LoadRunner调用这些脚本向服务器端发出请求,并接收服务器的响应。至于服务器内部如何处理,它不关心。
LoadRunner安装安装:
按照安装向导一步步执行即可。
注:不要将LoadRunner安装在带有中文的路径下,LoadRunner安装时是不能识别汉字。破解:
安装完成后,在安装路径的bin目录下,替换文件lm70.dll和mlr5lprg.dll。运行附件里面deletelicense.exe,删除试用版本license。打开license管理器,点击添加newlicense,将以下license复制进去,OK,验证通过!通用的license有:golba-100:AEAMAUIK-YAFEKEKJJKEEA-BCJGI(通用协议的license)golba-1000:AEACFSJI-YASEKJJKEAHJD-BCLBR(通用协议的license)web-10000:AEABEXFR-YTIEKEKJJMFKEKEKWBRAUNQJU-KBYGB(只适用于HTTP/HTML协议)3LoadRunner的组成4LoadRunnerAnalysisVuGenControllerVirtualUserGenerator(VuGen)—创建脚本Controller—设计和运行场景Analysis—分析场景开发测试脚本
开发测试脚本需要几个步骤,可以用下图来表示:创建用户脚本需要用到VuGen。注:运行VuGen最好在1024*768的分辨率下,否则有些工具栏会看不到。5开发测试脚本录制基本的用户脚本:
启动HPVirtualUserGenerator,新建测试脚本,选择系统通讯协议,如下图以HTPP/HTML为例:注:如果系统通讯协议不只一种,可以点击“NewMultipleProtlcolScript”选择多个系统通讯协议,下图以HTTP+ODBC为例:6开发测试脚本7录制基本的用户脚本:点击上页图中的“Creat”按钮,进入StartRecording界面,选择Applicationtype、URLAddress等。
VuGen中的脚本分为三部分:vuser_init、vuser_end和Action。其中vuser_init和vuser_end都只能存在一个,不能再分割,而Action还可以分成无数多个部分(通过点击New按钮,新建ActionXXX)。在录制需要登陆的系统时,我们把登陆部分放到vuser_init中,把登陆后的操作部分放到Action中,把注销关闭登陆部分放到vuser_end中。
注:如果需要在登陆操作设集合点,那么登陆操作也要放到Action中,因为vuser_init中不能添加集合点,在其他情况下,我们只要把操作部分放到Action中即可。
重复执行测试脚本时,vuser_init和vuser_end中的内容只会执行一次,重复执行的只是Action中的部分。开发测试脚本8录制基本的用户脚本:点击上页图中“Options”按钮,设置脚本录制设置选项,下图中重点介绍Recording选项,其他选项默认即可。上图中有两种脚本录制方式,HTML和URL。两者的差异在于:HTML方式脚本容易维护,容易理解,推荐这种方式录制。URL方式脚本中的表示采用基于URL的方式,WAS和ACT中的录制方式就是这种,这种方式看上去比较乱。选择哪种方式录制,参考原则如下:1、基于浏览器的应用程序推荐使用HTML-basedScript。2、不是基于浏览器的应用程序推荐使用URL-basedScript。3、如果基于浏览器的应用程序中包含了JavaScript并且该脚本向服务器产生了请求,比如DataGrid的分页按钮等,也要使用URL-based方式录制。4、基于浏览器的应用程序中使用了HTTPS安全协议,使用URL-based方式录制。注:Correlation标签页的内容比较重要,主要是为了在录制过程中设置自动关联。单独章节讲解。开发测试脚本9录制基本的用户脚本:
脚本录制设置选项设置完毕后,点击“OK”按钮,VuGen开始录制脚本。录制完成后点击“Stop”按钮,VuGen自动生成用户脚本。下面简单介绍下录制过程中的工具条各个按钮的作用,如下图所示:注:事务、集合点、注释、文本检查点可以在录制过程中插入,也可以在完善脚本时插入。在录制过程中,不要使用浏览器的“后退”功能,LoadRunner支持不太好。开发测试脚本10完善测试脚本:当用户脚本录制完成后,在正式使用前我们还需要完善测试脚本,增强脚本的灵活性。一般情况下,我们通过以下方法来完善测试脚本。1、插入事务;2、插入集合点;3、插入注释;4、参数化;5、插入函数;6、
插入Text/Imag检查点;7、Run-TimeSetting;8、单机调测脚本。这里重点讲解“关联”“参数化”、“插入Text/Imag检查点”、“Run-TimeSetting”、“单机调测脚本”等。
关联:上一次请求响应数据库传入下一次请求中,并且这个数据每次都再变化事务(Transaction):是为了衡量服务器的性能,我们需要定义事务.
注:一个事务必定对应一个开始点和一个结束点。开始点和结束点之间的代码是具体事务的操作。事务的名称最好要有意义,能够清楚的说明该事务完成的动作。集合点(Rendezvous):是为了衡量在加重负载的情况下服务器的性能情况。在测试计划中,可能会要求系统能够承受1000人同时提交数据,在LR中可以通过在提交数据操作前面加入集合点,这样当虚拟用户运行到提交数据的集合点时,LoadRunner就会检查同时有多少用户运行到集合点,如果不到1000人,LoadRunner就会命令已经到集合点的用户在此等待,当在集合点等待的用户达到1000人时,LoadRunner命令1000人同时去提交数据,从而达到测试计划中的需求。
注:集合点经常和事务结合起来使用,放在事务之前。集合点只能插入到Action部分,vuser_init和vuser_end中不能插入集合点。集合点的名称最好要有意义,能够清楚的说明该集合点完成的动作。
插入注释(comment):是为了增强脚本的可读性。(注:插入注释最好在脚本录制过程中)
开发测试脚本11完善测试脚本_关联:为什么需要关联?因为loadruner脚本只是忠实记录了所有客户端发送服务器端的数据,并在脚本回放时按照录制的顺序将录制下来的数据重新发送出去,这种方式属于静态的脚本。在一些情况下,脚本需要动态的,如一些系统会采用sessionID/SeqID等方式来标识不同的任务(如:需要从服务器端获得一些数据,当作一个参数来构造下一次的请求),这就要求脚本上需要做相应的处理,来满足实际业务运行情况,这就是loadruner的关联技术。手工关联步骤:1、设置“RuntimeSetting”中的日志选项“Datareturnbyserver”,回放脚本,分析脚本运行失败的原因是否是因为关联造成的。2、在脚本中分析确定需要关联的动态内容。(录制两次,比较脚本的不同)3、确定要关联的动态内容的“左边界”、“右边界”和发生次数。4、在脚本适当的位置插入“web_reg_save_param”关联函数。5、在脚本中动态内容出现的地方,使用参数替换“写死”的动态内容。6、重新运行脚本,确保关联后的脚本能够运行成功。开发测试脚本12完善测试脚本_参数化:上面脚本中的0041Y00000001为登录的用户名,需要参数化,选中鼠标右击选择“RepacewithaParameter”选项,弹出以下窗口:注:参数的文件名不要使用con.dat、pm.dat或者lpt*.dat等系统装置名。开发测试脚本13完善测试脚本_参数化:
如果用户在录制脚本过程中,填写提交了一些数据,这些操作将都被记录到脚本中。当多个虚拟用户运行脚本时,都会提交相同的记录,这样做可能会被应用程序禁止而导致出,同时这也不符合实际的运行情况,而且有可能引起冲突。为了更加真实的模拟实际操作,需要各种各样的输入。这时就需要用到参数化用参数表示用户的脚本有两个优点:
1、可以使脚本的长度变短。
2、可以使用不同的数值来测试你的脚本。(eg,登录脚本中用户名和密码)参数化包含以下两项任务:1、在脚本中用参数取代常量值。2、设置参数的属性以及数据源。
注:参数化仅可以用于一个函数中的参量。不能用参数表示非函数参数的字符串。另外,不是所有的函数都可以参数化的。下面通过一个事例来介绍:开发测试脚本14完善测试脚本_参数化:在上页图中点击“Properties…”按钮,可以进行参数属性设置,参数数据可以通过两种方式构造,分别为“EditwithNotepad..”(即:文本方式编辑)和“DateWizard”(即:连接数据库选取)。详细信息见附件:lr_data.rar上图参数详情界面简单介绍各个参数的含义,参数取值配置(Selectnextrow)较重要,详见附件:LR参数取值的几种配置介绍.doc注:在参数数据显示区,最多只能看到100行,如果数据超过100行,只能点“Edit”按钮,进入记事本看。开发测试脚本15完善测试脚本_插入Text/Imag检查点:
在进行压力测试时,为了检查Web服务器返回的网页是否正确,VuGen允许我们插入Text/Imag检查点,这些检查点验证网页上是否存在指定的Text或者Imag,还可以测试在比较大的压力测试环境中,被测的网站功能是否保持正确。VuGen在测试Web时,有两种视图方式:TreeView/ScriptView。前面我们见到的一直都是ScriptView。在插入Text/Imag检查点时,用TreeView视图会比较方便。视图之间切换方式可以点击菜单栏ViewTreeView,或者通过点击工具栏中的Tree图标,如:如何进行文本检查点,详细见下面的视频附件:lr_Text检查点视频.rar,Image检查点同下视频的Text检查点,这里就不做介绍。注:如果Web窗体中包含有JavaScript脚本,那么在TreeView视图中显示可能会有问题。解决这个问题,可以设置“toolsGeneralOptionsCorrelation”选项,如下图。开发测试脚本16完善测试脚本_Run-TimeSetting:
当完善了测试脚本后,需要对VuGen的Run-TimeSetting进行配置,下面对经常需要设置的几个标签页进行说明。首先打开Run-TimeSetting窗口,可以通过菜单VuserRun-TimeSetting或者工具栏进入。Miscellaneous选项介绍,见下图:开发测试脚本17完善测试脚本_Run-TimeSetting:
Preferences选项介绍,重点关注下面的Checks选项,详细信息见下图:开发测试脚本18完善测试脚本_Run-TimeSetting:ThinkTime选项介绍,详细信息见下图:注:其它的标签设置采用默认值即可,这里不再详细的介绍。开发测试脚本完善测试脚本_单机运行测试脚本:
经过以上的各个步骤后,脚本就可以运行了,可以通过菜单“VuserRun”或者工具栏,或者快捷键盘F5来操作。执行“运行”命令后,VuGen先编译脚本,检查是否有语法等错误。如果有错误,VuGen将会提示错误。双击错误提示,VuGen能够定位到出现错误的那一行。为了验证脚本的正确性,我们还可以调试脚本,比如在脚本中加断点等,操作和在VC中完全一样
。开发测试脚本完善测试脚本_单机运行测试脚本:如果编译通过,就会开始运行。执行完毕后,点击菜单“ViewTestResults…”查看执行脚本运行结果,如下图:创建运行场景运行场景描述在测试活动中发生的各种事件。一个运行场景包括一个运行虚拟用户活动的LoadGenerator机器列表,一个测试脚本的列表以及大量的虚拟用户和虚拟用户组。创建运行场景使用Controller:在开始菜单中,启动Controller程序,出现“NewScenario”窗口。如果没有出现,可以在菜单或者工具栏中点击“New”ManualScenario:该项要完全手动的设置场景。。
ManualScenariowithPercentageMode:该项只有在“ManualScenario”选中的情况下才能选择。选择该项后,在场景中我们需要定义要使用的虚拟用户的总数,LoadGeneratormachine机器集,然后我们为每一个脚本分配要运行的虚拟用户的百分比。
Goal—OrientedScenario:在测试计划中,一般都包括性能测试要达到的目标。选择该项后,LoadRunner基于这个目标,自动为你创建一个场景。在场景中,只要定义好我们的目标即可。创建运行场景ManualScenario:在上页图中选择运行场景为“ManualScenario”,并在AvailableScripts文本框中选择待测试的脚本,点击“Add”按钮添加脚本,然后点击“OK”按钮即可。
注:这里可以选择多个测试脚本。
步骤1:(可选)测试脚本加载后,下一步,我们可以“添加LoadGeneratorMachines”,点击菜单“ScenarioLoadGenerator”如下
LoadGenerators窗口中,点击“Add”按钮,在弹出的窗口中输入目标机器Name(IP即可)和目标机器类型后点击“OK”按钮,添加完成后,点击“Connect”按钮,若Status为Reacy,表示该机器联接正常,如果为Failed,表示该机器不能联接,请检查原因。(可以通过菜单“ScenarioSaveLoadGeneratorsListasDefault”保存Generators列表)创建运行场景ManualScenario:
步骤2:设置Schedule(非常重要),如下图创建运行场景ManualScenario_设置集合点:步骤3:(可选)如果在脚本中设置了集合点,还需要在Controller中设置集合点策略。在菜单“ScenarioRendezvous”中调出设置集合点策略的窗口,如下图:点击“Pllicy”按钮,进入策略设置窗口,如下图:创建运行场景ManualScenariowithPercentageMode:点击“EditScenarioGoal…”按钮,编辑场景的目标,详细信息如下:1、这里的说明是以选择的目标为VirtualUsers时为基础的。选择不同的目标,内容会稍微有一点不同。2、如果需要测试多少人可以同时运行Web应用,那么推荐定义VirtualUsersGoal。运行定义该目标类型的场景和运行Manual类型的场景类似。创建运行场景ManualScenariowithPercentageMode:HitsperSecond:如果想测试WebServer的真正实力,推荐定义目标类型为:HitsperSecond、PagesperMinute或者TransactionsperSecond,这些类型都需要指定一个虚拟用户的最小值和最大值的范围。Controller试图使用最少的虚拟用户来达到定义的目标。如果使用最少的用户,不能达到目标,ontroller增加用户数,直到定义的最大值。如果使用了最多的虚拟用户数,定义的目标还没有实现,那么需要增加最大用户数,重新执行场景。TransactionsperSecond:创建运行场景ManualScenariowithPercentageMode:TransactionsResponseTime:
如果想知道在多少用户并发访问网站时,事务的响应时间达到性能指标说明书中规定响应时间的最大值,那么推荐使用TransactionsResponseTime类型。指定需要测试的事务的名称,虚拟用户数量的最小值和最大值,还有预先定义好的事务的响应时间。在场景运行中,如果使用了最多的虚拟用户,还不能达到定义的最大响应时间,说明WebServer还有能力接纳定义的虚拟用户的最多数量;如果在使用了部分虚拟用户,就达到了定义的最大的响应时间,或者LoadRunner提示如果使用最多数量的虚拟用户时将要超过最大响应时间,那么需要重新设计或者修补应用程序,同时可能需要升级WebServer的软硬件。PagesperMinute:
创建运行场景28ManualScenariowithPercentageMode:如果你定义的类型是PagesperMinute、Hits/TransactionsperSecond,Controller首先用最小用户数除以定义的目标,得到一个值,然后确定每个用户应该达到的hits/transactions或者pagesperminute,然后controller开始按照以下的策略加载用户:1、如果选择的是自动的加载虚拟用户,LoadRunner会首先加载50个用户。如果定义的最大用户数小于50,LoadRunner就会一次加载所有的虚拟用户。2、如果选择的是在场景运行一段时间后达到目标,LoadRunner就会尝试在定义的这段时间内达到目标,根据时间限制和计算出的每个用户的hits、transactions或者pages,LoadRunner确定第一批加载多少用户。3、如果选择的是按照一定的阶段达到目标(也就是先在x长时间内达到ypages/hits,然后再达到下一个目标),LoadRunner计算每个用户应该达到的数字后,再确定第一批加载多少用户。每加载一批用户后,LoadRunner会判断是否达到这批用户的目标。如果这批用户的目标没有达到,LoadRunner重新计算每一个用户应该达到的目标数字后,重新调整下一批加载用户的数量。默认情况下,LoadRunner每两分钟加载一批用户。如果Controller加载了最多数量的用户还没有达到预定的目标,LoadRunner会重新计算每个用户的目标,然后同时运行最大数量的用户,尝试达到预定的目标。如果出现以下情况,PagesperMinute、Hits/TransactionsperSecond类型的场景会置于“Failed”状态:1、Controller使用了指定的最大数量的用户,并且两次都没有达到目标所有的用户运行都失败2、
没有足够的LoadGenerators机器(现有的机器已经超载运行的情况下)3、Controller增加了几批用户后,pagesperminute或者hits/transactionspersecond没有增加4、Controlller加载第一批用户后,定义的目标没有被捕捉到其他有用的设置29用IP欺骗:当运行场景时,虚拟用户使用它们所在的LoadGenerator的固定的IP地址。同时每个LoadGenerator上运行大量的虚拟用户,这样就造成了大量的用户使用同一IP同时访问一个网站的情况,这种情况和实际运行的情况不符,并且有一些网站会根据用户IP来分配资源,这些网站会限制同一个IP的登录,使用等等。为了更加真实的模拟实际情况,LoadRunner允许运行的虚拟用户使用不同的IP访问统一网站,这种技术称为“IP欺骗”。启用该选项后,场景中运行的虚拟用户将模拟从不同的IP地址发送请求。该选项非常的有用。注意:IPSpoofer在连接LoadGenerators之前启用要使用IP欺骗,各个LoadGenerator机器必须使用固定的IP,不能使用动态IP(即DHCP)。设置IP欺骗操作步骤:1、使用IPWizard:在“开始”菜单程序中,找到LoadRunnerToolsIP向导,运行它,弹出如下窗口:
2、第一次运行IPWizard需要选择第一项“Createnewsettings”,如果以前运行过,可以选择第二项“Loadprevioussettingsfromfile”,选择保存好的文件;第三项用于使用IP欺骗进行测试完成后,释放IP的过程(因为该机会占用大量的IP资源,可能会导致其他机器没有IP可用的尴尬局面,使用该项,可以恢复到原来的状况)。其他设置启用IP欺骗:3、上页图中选择第一项,“Next”,出现IPWizard的第二个窗口,如下图:
4、上图中输入WebServerIP的IP,点击“下一步”按钮,,出现向导的第三个窗口,如下图:从“FromIP”文本框中输入要使用IP范围的第一个IP值,然后在“NumberstoAdd”输入一个数字,表示IP范围的值;假如第一个IP为00,范围大小为100,那么IPWizard将会使用192.168.6.N(100<=N<200),当然这个范围内已经使用的IP地址除外,否则会引起IP冲突。“Submask”采用默认情况即可,取决于使用的那种类型的网络IP,一般局域网内采用ClassC即可。然后“OK”,然后IPWizard开始检查该范围内没有使用的IP,并把没有使用的IP添加到本机的IP窗口中。到最后一个窗口,直接点“Finish”,
5、使用IPWizard后,重新启动机器后,在Controller的场景中,勾选“ScenarioEnableIPSpoofer
”选项即可。其他设置监控被测系统资源:在运行过程中,可以监视各个服务器的运行情况(DataBaseServer、WebServer等)。监视场景通过添加性能计数器来实现。(注:非常的重要,确定系统瓶颈全靠它了。)
在LRController的Run视图中添加Windows/Unix被测系统的IP,如下图:在弹出的窗口中,输入目标服务器的IP,弹出下图窗口,点击“Add”按钮,可以添加其他监控计数器,添加完成,点击“OK”按钮即可
Q:添加目标服务器,出现“Cannotinitializethemonitoring”错误怎么解决,以及各个性能测试的意义?A:详见附件“LR监控windwos/Linux方法”和“LR监控被测系统资源参数说明.doc”。执行场景/监控场景在测试场景设置完毕后,在LRController的Run页签中点击“StartScenario”按钮执行场景。一般组网环境比较复杂,执行场景需要团队合作:1、压力测试工程师通过LRController监控事务性能和服务器2、当压力测试开始执行时,网络管理员监控网络性能。3、在压力测试期间,应用服务器和数据库服务器管理员监控远程系统性能。在之前需要做脚本调试运行,如下图:调试运行3-5Vusers隔离超长时间事务做20%压力测试扩展性压力测试≥100%满负荷压力测试100%目标:
验证参数化的数据可以正常使用。运行时设置:
使用扩展日志和数据,以及忽略延迟时间。目的:
无错;此时表明可以继续下一步的压力测试。超长时间事务:在较小压力下,与其它事务相比明显需要很长的时间的才能完成的事务或与测试目标相比明显花费很长的时间的事务。执行场景/监控场景目标:
为发现是否存在瓶颈,隔离与压力无关且存在性能问题的事务。运行时设置:
使用标准日志和限制延迟时间在5秒内。;
目的:
隔离最坏情况下执行的事务。这可能在绝对时间(最长时间)内或可能与测目标相反(与测试目标慢的多)。扩展性压力测试≥100%满负荷压力测试100%调试运行3-5Vusers隔离超长时间事务做20%压力测试扩展性压力测试≥100%调试运行3-5Vusers隔离超长时间事务做20%压力测试满负荷压力测试100%目标:
验证系统在期望的压力下的系统性能。运行时设置:
关闭日志和使用思考时间。目的:比较压力测试目标和测试结果。执行场景/监控场景目标:
验证系统能够承受的压力极限
运行时设置:关闭日志和使用延迟时间现象:
超过压力测试目标,事务花费的时间可能是满负荷压力下所花费的时间的2倍。调试运行3-5Vusers隔离超长时间事务做20%压力测试满负荷压力测试100%扩展性压力测试≥100%Controller运行过程中场景状态_在场景状态窗口包括:
当前运行的Vuser数执行的时间每秒的点击率通过/失败的事务报错数注:点击上图中的“放大镜”图标,可以查场景运行的详细信息分析性能测试结果35Q1:事务响应时间是否在可接受的时间内?哪个事务用的时间最长?A1:总结报告提供了对某次测试的整体视图,可以判断每个事务完成用的时间,从而可以判断出那个事务用的时间最长,那些事务用的时间超出预定的可接受时间。Q2:网络带宽是否足够?A2:“Throughput”图显示在场景运行期间的每一秒钟,从WebServer上接受到的数据量的值。拿这个值和网络带宽比较,可以确定目前的网络带宽是否是瓶颈。如果该图的曲线随着用户数的增加,没有随着增加,而是呈比较平的直线,说明目前的网络速度不能够满足目前的系统流量。分析性能测试结果Q3:硬件和操作系统能否处理高负载?A3:在正常负载下,服务器的CPU利用率应该在80%以下。在整个测试中,服务器应该始终保持一定的可用物理内存。监控资源各个参数的指标,见附件:loadrunner监控Linux与Windows指标.ppt分析性能测试结果交易平均响应时间图:1、该图提供了在整个测试过程中交易响应时间的细节信息。2、根据该图,我们可以确定响应时间缓慢的交易。3、根据该图,我们可以测试过程中出现性能问题的转折点。分析性能测试结果_分解页面通过分解页面可以得到:比较大的响应时间到底是页面的哪个组件引起的?问题出在服务器上还是网络传输上。这里为了解说各个时间(比如
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年演出经纪人之演出经纪实务考试题库(原创题)
- 项目管理学试题及答案
- 物业给排水试题及答案
- 贵州省六盘水市纽绅中学2025届高考模拟预测地理试题(含答案)
- 政治●全国甲卷丨2021年普通高等学校招生全国统一考试政治试卷及答案
- 2025标准版授权合同样本
- 建材公司品牌建设与市场定位策略
- 2025某地产总包合同范本
- 2025项目管理合同进度款申请表
- 备考2024届高考物理一轮复习分层练习第七章动量守恒定律第1讲动量动量定理
- 公司员工升职加薪制度模板
- 2024年运动员培养合同:体育人才委托培养协议3篇
- 2025年重庆环卫集团有限公司招聘笔试参考题库含答案解析
- 塔吊安拆工培训
- DB50T 395-2011 城市道路检测技术规程
- 如何利用图书馆资源培养孩子的阅读习惯
- 2025福建福州地铁招聘488名工作人员高频重点提升(共500题)附带答案详解
- 环保行业绿色产业项目投资计划书
- 《招标投标法》考试题库200题(含答案)
- 某有限公司业务员提成管理制度方案范例(3篇)
- 视频剪辑动画效果与视觉传达研究
评论
0/150
提交评论