版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、使用JMeter完成常用的壓力測(cè)試本文介紹了JMeter相關(guān)的基本概念。并以JMeter為例,介紹了使用它來(lái)完成最常用的三種類(lèi)型服務(wù)器,即Web服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器和消息中間件,壓力測(cè)試的方法、步驟以及注意事項(xiàng)。講到測(cè)試,人們腦海中首先浮現(xiàn)的就是針對(duì)軟件正確性的測(cè)試,即常說(shuō)的功能測(cè)試。但是軟件僅僅只是功能正確是不夠的。在實(shí)際開(kāi)發(fā)中,還有其它的非功能因素也起著決定性的因素,例如軟件的響應(yīng)速度。影響軟件響應(yīng)速度的因素有很多,有些是因?yàn)樗惴ú粔蚋咝?;還有些可能受用戶(hù)并發(fā)數(shù)的影響。在眾多類(lèi)型的軟件測(cè)試中,壓力測(cè)試正是以軟件響應(yīng)速度為測(cè)試目標(biāo),尤其是針對(duì)在較短時(shí)間內(nèi)大量并發(fā)用戶(hù)的訪(fǎng)問(wèn)時(shí),軟件的抗壓能力。
2、本文以JMeter為例,介紹了如何使用它來(lái)完成常用的壓力測(cè)試:Web測(cè)試、數(shù)據(jù)庫(kù)測(cè)試和JMS測(cè)試。概述JMeter最早是為了測(cè)試Tomcat的前身JServ的執(zhí)行效率而誕生的。到目前為止,它的最新版本是2.1.1,它的測(cè)試能力也不再僅僅只局限于對(duì)于Web服務(wù)器的測(cè)試,而是涵蓋了數(shù)據(jù)庫(kù)、JMS、WebService、LDAP等多種對(duì)象的測(cè)試能力。在最新的2.1.1中,它還提供了對(duì)于JUNIT的測(cè)試。JMeter的安裝非常簡(jiǎn)單,從官方網(wǎng)站上下載,解壓之后即可使用。運(yùn)行命令在JMETER_HOME%/bin下,對(duì)于Windows用戶(hù)來(lái)說(shuō),命令是jmeter.bat。運(yùn)行前請(qǐng)檢查JMeter的文檔,查
3、看是否具備相關(guān)的運(yùn)行條件。對(duì)于最新版(即2.1.1),需要JDK的版本要求是JDK1.4。JMeter的主要測(cè)試組件總結(jié)如下:測(cè)試計(jì)劃是使用JMeter進(jìn)行測(cè)試的起點(diǎn),它是其它JMeter測(cè)試元件的容器。線(xiàn)程組代表一定數(shù)量的并發(fā)用戶(hù),它可以用來(lái)模擬并發(fā)用戶(hù)發(fā)送請(qǐng)求。實(shí)際的請(qǐng)求內(nèi)容在Sampler中定義,它被線(xiàn)程組包含。監(jiān)聽(tīng)器負(fù)責(zé)收集測(cè)試結(jié)果,同時(shí)也被告知了結(jié)果顯示的方式。邏輯控制器可以自定義JMeter發(fā)送請(qǐng)求的行為邏輯,它與Sampler結(jié)合使用可以模擬復(fù)雜的請(qǐng)求序列。斷言可以用來(lái)判斷請(qǐng)求響應(yīng)的結(jié)果是否如用戶(hù)所期望的。它可以用來(lái)隔離問(wèn)題域,即在確保功能正確的前提下執(zhí)行壓力測(cè)試。這個(gè)限制對(duì)于有
4、效的測(cè)試是非常有用的。配置元件維護(hù)Sampler需要的配置信息,并根據(jù)實(shí)際的需要會(huì)修改請(qǐng)求的內(nèi)容。前置處理器和后置處理器負(fù)責(zé)在生成請(qǐng)求之前和之后完成工作。前置處理器常常用來(lái)修改請(qǐng)求的設(shè)置,后置處理器則常常用來(lái)處理響應(yīng)的數(shù)據(jù)。定時(shí)器負(fù)責(zé)定義請(qǐng)求之間的延遲間隔。JMeter的使用非常的容易,在ONJ上的文章UsingJMeter提供了一個(gè)非常好的入門(mén)。常用測(cè)試壓力測(cè)試不同于功能測(cè)試,軟件的正確性并不是它的測(cè)試重點(diǎn)。它所看重的是軟件的執(zhí)行效率,尤其是短時(shí)間內(nèi)訪(fǎng)問(wèn)用戶(hù)數(shù)爆炸性增長(zhǎng)時(shí)軟件的響應(yīng)速度,壓力測(cè)試往往是在功能測(cè)試之后進(jìn)行的。在實(shí)際的開(kāi)發(fā)過(guò)程中,軟件潛在的效率瓶頸一般都是那些可能有多個(gè)用戶(hù)同時(shí)訪(fǎng)
5、問(wèn)的節(jié)點(diǎn)。就目前JavaEE的平臺(tái)下開(kāi)發(fā)的軟件來(lái)說(shuō),這種節(jié)點(diǎn)通??赡苁牵篧eb服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器和JMS服務(wù)器。它們都是請(qǐng)求主要發(fā)生的地點(diǎn),請(qǐng)求頻率較其它的節(jié)點(diǎn)要高,而且處于請(qǐng)求序列的關(guān)鍵路徑之上。如果它們效率無(wú)法提高的話(huà),對(duì)于整個(gè)軟件的效率有致命的影響。而且在這些節(jié)點(diǎn)上一般都會(huì)發(fā)生較大規(guī)模的數(shù)據(jù)交換,有時(shí)其中還包含有業(yè)務(wù)邏輯處理,它們正是在進(jìn)行壓力測(cè)試時(shí)首先需要考慮的。本文以這三種節(jié)點(diǎn)為例,介紹如何使用JMeter來(lái)完成針對(duì)于它們的壓力測(cè)試。Web服務(wù)器對(duì)于大多數(shù)的項(xiàng)目來(lái)說(shuō),并不會(huì)自行開(kāi)發(fā)一個(gè)Web服務(wù)器,因此Web服務(wù)器壓力測(cè)試的對(duì)象實(shí)際就是-發(fā)布到Web服務(wù)器中的軟件。最簡(jiǎn)單的Web測(cè)
6、試計(jì)劃只需要三個(gè)JMeter的測(cè)試元件,如下圖:?測(cè)試計(jì)劃HTTP讖求0用表格寧看結(jié)果其中:在線(xiàn)程組中定義線(xiàn)程數(shù)、產(chǎn)生線(xiàn)程發(fā)生的時(shí)間和測(cè)試循環(huán)次數(shù)。在http請(qǐng)求中定義服務(wù)器、端口、協(xié)議和方法、請(qǐng)求路徑等。表格監(jiān)聽(tīng)器負(fù)責(zé)收集和顯示結(jié)果。這種設(shè)置對(duì)于包含了安全機(jī)制的web應(yīng)用是不夠的,典型的web應(yīng)用一般都會(huì):1.有一個(gè)登錄頁(yè),它是整個(gè)應(yīng)用的入口。當(dāng)用戶(hù)登錄之后,應(yīng)用會(huì)將用戶(hù)相關(guān)的安全信息放到session中。2.有一個(gè)filter,它攔截請(qǐng)求,檢查每個(gè)請(qǐng)求相關(guān)的session中是否包含有用戶(hù)安全信息。如果沒(méi)有,那么請(qǐng)求被重定向到登錄頁(yè),要求用戶(hù)提供安全信息。在這種配置下應(yīng)用上面的測(cè)試計(jì)劃,那么
7、除了登錄頁(yè)之外的其它請(qǐng)求都將因?yàn)槿鄙儆脩?hù)安全信息,而使請(qǐng)求實(shí)際定位到登錄頁(yè)。如果不加斷言,那么在監(jiān)聽(tīng)器看來(lái)所有的請(qǐng)求都是成功。而實(shí)際上,這些請(qǐng)求最終都沒(méi)有到達(dá)它們應(yīng)該去的地方。顯然,這種測(cè)試結(jié)果不是我們所期望的。為了成功的測(cè)試,至少有2種方法:方法一,去掉程序的安全設(shè)置,如filter,使得不需要用戶(hù)安全信息也能訪(fǎng)問(wèn)受限內(nèi)容;方法二,不修改程序,使用JMeter提供的HttpURL重寫(xiě)修飾符或HttpCookie管理器。對(duì)于第一種方法,有其局限性:需要修改程序配置,如去掉web.xml中關(guān)于安全filter的設(shè)置。需要維護(hù)多個(gè)版本的web.xml,如壓力測(cè)試和功能測(cè)試分別各自的web.xml,
8、增加了維護(hù)成本,而且有可能會(huì)在測(cè)試之后忘記將web.xml修改回來(lái)。對(duì)于一些需要用戶(hù)安全信息的頁(yè)面無(wú)能為力,如某些業(yè)務(wù)審計(jì)操作需要用戶(hù)安全信息來(lái)記錄。因?yàn)槿鄙龠@樣的信息,注定了測(cè)試的失敗。如果解決為了這個(gè)問(wèn)題進(jìn)一步的修改程序,那么因?yàn)榇嬖诙鄠€(gè)版本的程序,那么其維護(hù)難度將大大增加。雖然,第二種方法配置難度增加了,但是它不用修改程序。而且還可將測(cè)試計(jì)劃保存成文件,以便重復(fù)使用。因此,選用第二種方法是較為理想的做法。下面以一個(gè)簡(jiǎn)化的例子說(shuō)明使用方法二的配置步驟。1.例子由以下幾個(gè)文件組成:AuthorizenFilter.java,過(guò)濾器負(fù)責(zé)檢驗(yàn)session中是否存在用戶(hù)信息。如果沒(méi)有,那么就轉(zhuǎn)向
9、到login.jsp。它的主要方法doFilter內(nèi)容如下:publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletExceptionHttpServletRequestreq=(HttpServletRequest)request;HttpServletResponseres=(HttpServletResponse)response;HttpSessionsession=req.getSession();Useruser=(User)
10、session.getAttribute(user);if(null=user)Stringuri=req.getRequestURI();/如果請(qǐng)求頁(yè)是登錄頁(yè),不轉(zhuǎn)向if(uri.equalsIgnoreCase(/gWeb/login.jsp)chain.doFilter(request,response);elseres.sendRedirect(/gWeb/login.jsp);elsechain.doFilter(request,response);User.java,用戶(hù)類(lèi)負(fù)責(zé)記錄用戶(hù)的信息。為了簡(jiǎn)化,這里的登錄操作只允許指定用戶(hù)名和密碼。主要內(nèi)容如下:publicclassUse
11、rprivateStringuser;privateStringpwd;publicUser(Stringuser,Stringpwd)this.user=user;this.pwd=pwd;publicbooleanlogin()returnuser.equals(foxgem)&pwd.equals(12345678);publicStringgetUser()returnuser;publicvoidsetUser(Stringuser)this.user=user;Login.jsp和welcome.jsp。其中l(wèi)ogin.jsp負(fù)責(zé)生成User對(duì)象,并調(diào)用User的login。當(dāng)lo
12、gin返回為true時(shí)轉(zhuǎn)向到welcome.jsp。其驗(yàn)證部分的代碼:web.xml,配置filter攔截所有訪(fǎng)問(wèn)JSP頁(yè)面的請(qǐng)求:authorizenorg.foxgem.jmeter.AuthorizenFilterauthorizen*.jsp2.創(chuàng)建如下結(jié)構(gòu)的Web測(cè)試計(jì)劃:T=測(cè)試計(jì)劃申HTTP請(qǐng)求晌應(yīng)斷言HTTP請(qǐng)求駄認(rèn)値申老循壞授制黔中HTTP謫求響慮斷言畫(huà)用表格察看結(jié)果HTTPCookie管理貉其中主要測(cè)試元件說(shuō)明如下:http請(qǐng)求默認(rèn)值負(fù)責(zé)記錄請(qǐng)求的默認(rèn)值,如服務(wù)器、協(xié)議、端口等。第一個(gè)http請(qǐng)求,請(qǐng)求login.jsp,并附加驗(yàn)證所需要的參數(shù)(user=foxgem,pw
13、d=12345678,Submit=Submit);其包含的響應(yīng)斷言驗(yàn)證url中包含welcome.jsp,這一點(diǎn)可以從程序中反應(yīng)。第二個(gè)http請(qǐng)求,請(qǐng)求是welcome.jsp;其包含的響應(yīng)斷言驗(yàn)證響應(yīng)文本中包含foxgem,它是welcome.jsp頁(yè)面邏輯的一部分。httpcookie管理器負(fù)責(zé)管理整個(gè)測(cè)試過(guò)程中使用的cookie,它不需要設(shè)置任何屬性。循環(huán)控制器設(shè)置發(fā)送第二個(gè)請(qǐng)求的循環(huán)次數(shù),表格監(jiān)聽(tīng)器負(fù)責(zé)收集和顯示第二個(gè)請(qǐng)求的測(cè)試結(jié)果。啟動(dòng)測(cè)試計(jì)劃之后,執(zhí)行的順序是:首先,第一個(gè)請(qǐng)求登錄頁(yè)進(jìn)行登錄;成功登錄之后,使用循環(huán)控制器執(zhí)行第二個(gè)請(qǐng)求。請(qǐng)求welcome.jsp時(shí),響應(yīng)斷言用來(lái)
14、驗(yàn)證是否確實(shí)是welocme.jsp來(lái)處理請(qǐng)求,而不是因?yàn)槠渌?yè)。在這個(gè)測(cè)試計(jì)劃中需要注意的是httpcookie管理器。正是由于它的作用,使得第二個(gè)請(qǐng)求能順利的發(fā)送到welcome.jsp進(jìn)行處理,而不是因?yàn)槿鄙儆脩?hù)安全信息轉(zhuǎn)發(fā)到login.jsp。在這個(gè)例子中,我們并沒(méi)有在程序中使用cookie(使用的是session),那么httpcookie管理器怎么會(huì)起作用呢?這是因?yàn)樵趕ervlet/jsp規(guī)范中對(duì)于session的狀態(tài)跟蹤有2種方式:使用cookie,保留和傳遞sessionid。它不要求程序?qū)τ趗rl有什么特殊的處理,但是要求瀏覽器允許cookie。在這個(gè)例子中,就是這種情形。
15、使用url重寫(xiě),每次顯式的在瀏覽器和服務(wù)器之間傳遞sessionid。它要求程序?qū)rl進(jìn)行編碼,對(duì)瀏覽器沒(méi)有要求。對(duì)于第二種情形,可以使用JMeter前置管理器中的httpurl重寫(xiě)修飾符來(lái)完成。對(duì)于Tomcat,Session參數(shù)是jsessionid,路徑擴(kuò)展使用;。使用url編碼時(shí)需要注意,必須將瀏覽器的cookie功能關(guān)閉。因?yàn)閡rl編碼函數(shù),如encodeURL,會(huì)判斷是否需要將sessionid編碼到url中。當(dāng)瀏覽器允許cookie時(shí),就不會(huì)進(jìn)行編碼。如果cookie而不是session來(lái)保存用戶(hù)安全信息,那么直接使用httpcookie管理器就行了。此時(shí),需要將使用的cook
16、ie參數(shù)和值直接寫(xiě)到管理器中,由它負(fù)責(zé)管理。對(duì)于其它的cookie使用,也是如此操作。登錄問(wèn)題解決之后,對(duì)于Web服務(wù)器的測(cè)試就沒(méi)什么難點(diǎn)了。剩下的就是根據(jù)實(shí)際需要,靈活運(yùn)用相關(guān)的測(cè)試組件搭建編寫(xiě)的測(cè)試計(jì)劃。(當(dāng)然,對(duì)于安全問(wèn)題還有其它的使用情景。在使用時(shí)需要明確:JMeter是否支持,如果支持使用哪種測(cè)試組件解決。)數(shù)據(jù)庫(kù)服務(wù)器數(shù)據(jù)庫(kù)服務(wù)器在大多數(shù)企業(yè)項(xiàng)目中是不可缺少的,對(duì)于它進(jìn)行壓力測(cè)試是為了找出:數(shù)據(jù)庫(kù)對(duì)象是否可以有效地承受來(lái)自多個(gè)用戶(hù)的訪(fǎng)問(wèn)。這些對(duì)象主要是:索引、觸發(fā)器、存儲(chǔ)過(guò)程和鎖。通過(guò)對(duì)于SQL語(yǔ)句和存儲(chǔ)過(guò)程的測(cè)試JMeter可以間接的反應(yīng)數(shù)據(jù)庫(kù)對(duì)象是否需要優(yōu)化。JMeter使用J
17、DBC發(fā)送請(qǐng)求,完成對(duì)于數(shù)據(jù)庫(kù)的測(cè)試。一個(gè)數(shù)據(jù)庫(kù)測(cè)試計(jì)劃,建立如下結(jié)構(gòu)即可:中:測(cè)試計(jì)劃-JDBCConnectionConfiguration-#JDBCRequest回圖形結(jié)果其中:JDBC連接配置,負(fù)責(zé)配置數(shù)據(jù)庫(kù)連接相關(guān)的信息。如:數(shù)據(jù)庫(kù)url、數(shù)據(jù)庫(kù)驅(qū)動(dòng)類(lèi)名、用戶(hù)名和密碼等等。在這些配置中,綁定到池的變量名(VariableNameBoundtoPool)是一個(gè)非常重要的屬性,這個(gè)屬性會(huì)在JDBC請(qǐng)求中被引用。通過(guò)它,JDBC請(qǐng)求和JDBC連接配置建立關(guān)聯(lián)。(測(cè)試前,請(qǐng)將所需要的數(shù)據(jù)庫(kù)驅(qū)動(dòng)放到JMeter的classpath中)。JDBC請(qǐng)求,負(fù)責(zé)發(fā)送請(qǐng)求進(jìn)行測(cè)試。圖形結(jié)果,收集顯示測(cè)
18、試結(jié)果。在實(shí)際的項(xiàng)目中,至少有2種類(lèi)型的JDBC請(qǐng)求需要關(guān)注:select語(yǔ)句和存儲(chǔ)過(guò)程。前者反應(yīng)了select語(yǔ)句是否高效,以及表的索引等是否需要優(yōu)化;后者則是反應(yīng)存儲(chǔ)過(guò)程的算法是否高效。它們?nèi)绻实拖拢厝粫?huì)帶來(lái)響應(yīng)上的不盡如人意。對(duì)于這兩種請(qǐng)求,JDBC請(qǐng)求的配置略有區(qū)別:Select語(yǔ)句存儲(chǔ)過(guò)程callPRBBZCJL(2005|6)如果對(duì)于Oracle,如果測(cè)試的是函數(shù),那么也可以使用select語(yǔ)句來(lái)進(jìn)行配置,此時(shí)可以使用:select函數(shù)(入?yún)ⅲゝromdual形式的語(yǔ)句來(lái)測(cè)試,其中dual是oracle的關(guān)鍵字,表示啞表。對(duì)于其它廠商的數(shù)據(jù)庫(kù)產(chǎn)品,請(qǐng)查找手冊(cè)。JMS服務(wù)器MO
19、M作為消息數(shù)據(jù)交換的平臺(tái),也是影響應(yīng)用執(zhí)行效率的潛在環(huán)節(jié)。在Java程序中,是通過(guò)JMS與MOM進(jìn)行交互的。作為Java實(shí)現(xiàn)的壓力測(cè)試工具,JMeter也能使用JMS對(duì)應(yīng)用的消息交換和相關(guān)的數(shù)據(jù)處理能力進(jìn)行測(cè)試。這一點(diǎn)應(yīng)該不難理解,因?yàn)樵谡麄€(gè)測(cè)試過(guò)程中,JMeter測(cè)試的重點(diǎn)應(yīng)該是消息的產(chǎn)生者和消費(fèi)者的本身能力,而不是MOM本身。根據(jù)JMS規(guī)范,消息交換有2種方式:發(fā)布/訂閱和點(diǎn)對(duì)點(diǎn)。JMeter針對(duì)這兩種情形,分別提供了不同的Sampler進(jìn)行支持。以下MOM我們使用ActiveMQ3.2.1,分別描述這兩種消息交換方式是如何使用JMeter進(jìn)行測(cè)試。測(cè)試前的準(zhǔn)備(兩種情況都適用)JMete
20、r雖然能使用JMS對(duì)MOM進(jìn)行測(cè)試,但是它本身并沒(méi)有提供JMS需要使用的包。因此,在測(cè)試之前需要將這些包復(fù)制到%JMETER_HOME%/lib下。對(duì)于ActiveMQ來(lái)說(shuō),就是復(fù)制%ACTIVEMQ_HOME%/lib。%ACTIVEMQ_HOME%/optional是可選包,可根據(jù)實(shí)際情況來(lái)考慮是否復(fù)制。JMeter在測(cè)試時(shí)使用了JNDI,為了提供JNDI提供者的信息,需要提供perties。同時(shí)需要將perties放到JMeter的classpath中,建議將它與bin下的ApacheJMeter.jar打包在一起。對(duì)于ActiveMQ,perties的示例內(nèi)容如下:java.namin
21、g.factory.initial=org.activemq.jndi.ActiveMQInitialContextFvider.url=tcp:/localhost:61616#指定connectionFactory的jndi名字,多個(gè)名字之間可以逗號(hào)分隔。#以下為例:#對(duì)于topic,使用(TopicConnectionFactory)context.lookup(connectionFactry)#對(duì)于queue,(QueueConnectionFactory)context.lookup(connectionFactory)connectionFactoryNames=connecti
22、onFactory#注冊(cè)queue,格式:#queue.jndiName=physicalName#使用時(shí):(Queue)context.lookup(jndiName),此處是MyQueuequeue.MyQueue=example.MyQueue#注冊(cè)topic,格式:#topic.jndiName=physicalName#使用時(shí):(Topic)context.lookup(jndiName),此處是MyTopictopic.MyTopic=example.MyTopic發(fā)布/訂閱在實(shí)際測(cè)試時(shí),發(fā)布者和訂閱者并不是需要同時(shí)出現(xiàn)的。例如,有時(shí)我們可能想測(cè)試單位時(shí)間內(nèi)消息發(fā)布者的消息產(chǎn)生量,此時(shí)就不需要消息發(fā)布者,只需要訂閱者就可以了。本例為了說(shuō)明這兩種Sampler的使用,因此建立如下的測(cè)試計(jì)劃:?E測(cè)試計(jì)劃V線(xiàn)程蟲(chóng)其中JMSPublisher和JMSSubscriber的屬性:選擇使用perties,連接工廠是connectionFactory,主題是MyTopic,其它使用默認(rèn)配置。對(duì)于JMSPublisher,還需提供測(cè)試用的文本消息。啟動(dòng)ActiveMQ,運(yùn)行測(cè)試計(jì)劃。如果配置正確,那么與ActiveMQ成功連接之后,在JMeter的后臺(tái)會(huì)打印出相關(guān)信息。在測(cè)試過(guò)程中,JMeter后臺(tái)打印可能會(huì)出現(xiàn)java.lang.Inter
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年企業(yè)碳交易咨詢(xún)服務(wù)合同
- 體育俱樂(lè)部會(huì)員管理與行為規(guī)范制度
- 2024年城市地鐵運(yùn)營(yíng)許可合同
- 電商企業(yè)公文寫(xiě)作策略方案
- 幼兒園科技教育2022年工作總結(jié)
- 2024年國(guó)際學(xué)校高低壓配電工程施工及材料采購(gòu)合同
- 2024年創(chuàng)業(yè)公司借款合同范文
- 2024年合伙人協(xié)議:建筑工程合同范本
- 行駛系統(tǒng):車(chē)架相關(guān)行業(yè)投資方案
- 鄉(xiāng)鎮(zhèn)中心小學(xué)“黃河文化”校外教育合作方案
- 道法22.第10課第二框《履行遵紀(jì)守法義務(wù)》
- 安徽省蕪湖市部分學(xué)校2023-2024學(xué)年九年級(jí)上學(xué)期期中語(yǔ)文試題(含答案)
- 學(xué)校人事管理制度改革方案
- 韓國(guó)《寄生蟲(chóng)》電影鑒賞解讀
- 三對(duì)三籃球賽記錄表
- 石油和天然氣輸送行業(yè)物聯(lián)網(wǎng)與智能化技術(shù)
- 高考英語(yǔ)高頻詞匯匯總
- 浙江省金華市2022-2023學(xué)年六年級(jí)上學(xué)期期中科學(xué)試卷
- 六年級(jí)語(yǔ)文下冊(cè)《記一次體育比賽》教案設(shè)計(jì)
- 文檔系統(tǒng)需求方案(完整版)資料
- 貴州省高中信息技術(shù)會(huì)考復(fù)習(xí)
評(píng)論
0/150
提交評(píng)論