版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Contents目 錄一. 性能測試實施流程介紹二. 性能測試腳本介紹三. 性能測試監(jiān)控介紹四. 性能測試分析介紹五. 性能測試測試報告介紹Contents目 錄 一.性能測試實施流程介紹 1.了解什么是性能測試 2.性能測試流程 3.性能測試常見類型 4.常用性能測試工具分類 1.性能測試?yán)镎?性能測試是通過自動化的測試工具模擬多種正常、峰值以及異常負載條件來對系統(tǒng)的各項性能指標(biāo)進行測試。 性能是衡量在一個環(huán)境下運行一個或多個應(yīng)用程序的效率 主要的指標(biāo)一般是響應(yīng)時間,tps, 交易成功率 2.性能測試流程: 3.性能測試常見類型: 4.常用性能測試工具分類:.Loadrunner LoadR
2、unner 是一種預(yù)測系統(tǒng)行為和性能的負載測試工具。通過以模擬上千萬用戶實施并發(fā)負載及實時性能監(jiān)測的方式來確認和查找問題,LoadRunner 能夠?qū)φ麄€企業(yè)架構(gòu)進行測試。通過使用LoadRunner ,企業(yè)能最大限度地縮短測試時間,優(yōu)化性能和加速應(yīng)用系統(tǒng)的發(fā)布周. .Jmeter JMeter是Apache組織的開放源代碼項目,它是功能和性能測試的工具,100%的用java實現(xiàn)。這個工具相對于上面的LoadRunner來說,是比較輕量級的工具,便于安裝且免費開源。不僅可以進行功能測試也可以進行性能測試,一般可以用來做接口測試。這款工具學(xué)習(xí)起來也非常的容易,只要用這個工具做過幾次測試,就可以非
3、常熟悉的運用了。Contents目 錄 二.性能測試腳本介紹 1.事務(wù) 2.參數(shù)化 3.斷言 4.關(guān)聯(lián) 5.集合點 6.思考時間 1.事務(wù):用戶自定義的一個標(biāo)識,用來衡量不同的操作所花費的時間,事務(wù)時間反映的是一個操作過程的響應(yīng)時間。 2.參數(shù)化:參數(shù)化作為測試腳本中最基本的使用技巧,需要每個從事性能測試的小伙伴都能熟練掌握。 在測試工具中,每一個模擬用戶都是一個線程,而在我們的仿真模型里,每一個用戶都應(yīng)該是一個真實的業(yè)務(wù)實體,每個用戶代表的業(yè)務(wù)含義、他可以去處理的業(yè)務(wù)以及在處理業(yè)務(wù)的過程中可以操作的數(shù)據(jù)都應(yīng)該是不同的,這樣才可以更真實的表達現(xiàn)實世界中系統(tǒng)使用的負載模型。為了達到這個目的,將測
4、試工具的每一個線程和仿真模型中的每一個用戶及操作對應(yīng)起來,就需要使用到參數(shù)化的腳本處理。 說的有些太嚴(yán)肅了,簡單舉個例子,比如我們要測試用戶注冊的功能,注冊的用戶名是不允許重復(fù)的。我們錄制完 的 腳本都是hard code,直接進行并發(fā)測試的話,無疑所有模擬用戶的線程在注冊的時候輸入的都是相同的用戶名和密碼,這樣肯定是會有很多錯誤請求無法達到服務(wù)端,也就不能產(chǎn)生我們預(yù)期的負載壓力。這時候,針對用戶名就需要我們使用參數(shù)化的技巧來實現(xiàn),每個注冊的用戶每次注冊都使用不同的用戶名來填寫注冊信息。 3 .斷言: jmeter中有個元件叫做斷言(Assertion),它的作用和loadrunner中的檢查
5、點類似; 用于檢查測試中得到的響應(yīng)數(shù)據(jù)等是否符合預(yù)期,用以保證性能測試過程中的數(shù)據(jù)交互與預(yù)期一致。 使用斷言的目的:在request的返回層面增加一層判斷機制;因為request成功了,并不代表結(jié)果一定正確。 3.1.斷言與beanshell組合使用 . 首先存儲一個接口的響應(yīng)結(jié)果 . 變量存儲好后,再需要斷言的接口后面添加BeanShell斷言,使用Failrue來標(biāo)識斷言失敗,F(xiàn)ailureMessage標(biāo)示斷言失敗的原因, 4.關(guān)聯(lián)(correlation):在腳本回放過程中,客戶端發(fā)出請求,通過關(guān)聯(lián)函數(shù)所定義的左右邊界值(也就是關(guān)聯(lián)規(guī)則),在服務(wù)器所響應(yīng)的內(nèi)容中查找,得到相應(yīng)的值,已變
6、量的形式替換錄制時的靜態(tài)值,從而向服務(wù)器發(fā)出正確的請求,這種動態(tài)獲得服務(wù)器響應(yīng)內(nèi)容的方法被稱作關(guān)聯(lián)。 5.集合點:集合點用以同步虛擬用戶,以便恰好在同一時刻執(zhí)行任務(wù)。在測試計劃中,可能會要求系統(tǒng)能夠承受1000 人同時提交數(shù)據(jù),在LoadRunner 中可以通過在提交數(shù)據(jù)操作前面加入集合點,這樣當(dāng)虛擬用戶運行到提交數(shù)據(jù)的集合點時,LoadRunner 就會檢查同時有多少用戶運行到集合點,如果不到1000 人,LoadRunner 就會命令已經(jīng)到集合點的用戶在此等待,當(dāng)在集合點等待的用戶達到1000 人時,LoadRunner 命令1000 人同時去提交數(shù)據(jù),從而達到測試計劃中的需求。 jmet
7、er也是,Number of Simulated Users to Group by的意思是分批執(zhí)行請求。當(dāng)線程數(shù)到達設(shè)置的數(shù)量后,才開始發(fā)送請求。 例如設(shè)置為5,如果啟動的線程數(shù)到了4是不發(fā)送請求的,之后當(dāng)再啟動一個線程,線程數(shù)為5的時候才開始發(fā)送請求。 這樣就相當(dāng)于設(shè)置了集合點。只有達到我們想要的并發(fā)線程數(shù)的時候才開始并發(fā)。 如果我們的并發(fā)線程數(shù)為10,那我們就可以設(shè)置線程組的線程數(shù)為10,加個Synchronizing Timer,設(shè)置為10就可以。 Timout的意思是等待請求多久后,不管線程數(shù)有沒有到達設(shè)置的并發(fā)數(shù)量都開始運行測試。 6.思考時間:用戶自定義的一個標(biāo)識,用來衡量不同的
8、操作所花費的時間,事務(wù)時間反映的是一個操作過程的響應(yīng)時間。Pacing:請求和請求之間的間隔 先明確一些概念: 1)定時器是在每個sampler(采樣器)之前執(zhí)行的,而不是之后; 是的,你沒有看錯,不管這個定時器的位置放在sampler之后,還是之下,它都在sampler之前得到執(zhí)行。 2)定時器是有作用域的;當(dāng)執(zhí)行一個sampler之前時,所有當(dāng)前作用域內(nèi)的定時器都會被執(zhí)行; 3)如果希望定時器僅應(yīng)用于其中一個sampler,則把該定時器作為子節(jié)點加入; 4)如果希望在sampler執(zhí)行完之后再等待,則可使用Test Action;一、固定定時器(Constant Timer)毫無疑問,這是
9、最重要的定時器。需要注意的是,固定定時器的延時不會計入單個sampler的響應(yīng)時間,但會計入事務(wù)控制器的時間。如下圖,固定定時器的時長設(shè)為300毫秒。定時器時長并不計入java請求的響應(yīng)時間,但被計入“事務(wù)控制器”的總時間如果你堅持看到這里,并且對loadrunner的think time和pacing這兩個概念還有記憶的話,我們可以有答案了:對于“java請求”這個sampler來說,定時器相當(dāng)于loadrunner中的pacing;對于“事務(wù)控制器”來說,定時器相當(dāng)于loadrunner中的think time。我們通常說的響應(yīng)時間,應(yīng)該大部分情況下是針對某一個具體的sampler(htt
10、p請求),而不是針對一組sampler組合的事務(wù) Contents目 錄 三.性能測試運行及監(jiān)控介紹 1.性能測試腳本的運行 2.性能測試資源的監(jiān)控 1.性能測試腳本的運行: 1.1 .性能側(cè)測試幾種類型的設(shè)置: . 基準(zhǔn)測試的設(shè)置: .負載測試的設(shè)置: .混合場景的設(shè)置: https:/ .穩(wěn)定性場景的設(shè)置: 1.2.腳本的運行有兩種: 1.2.1.第一種: .設(shè)置線程組頁面 . 設(shè)置好的腳本放到壓力發(fā)起機上 . 運行命令: .Jmeter -n -t /home/baseuser/ljd/zzt.jmx -l /home/baseuser/ljd/zzt.jtl -e -o /home/b
11、aseuser/ljd/wuliaoleixing .把收集到信息拉到本地電腦上-n表示以nogui方式運行測試計劃-t表示測試計劃,后面跟測試計劃名稱-l表示測試結(jié)果,后面跟測試結(jié)果文件名稱1.2.2第二種: 負載運行: 由于jmeter是java寫的,效率沒loadrunner那么好,loadrunner是c語言寫的. Jmeter是有一臺主控機來控制很多的負載機,client主動去連 server, server只要打開一個服務(wù)就行,腳本放在主控機上的,就是是這樣的一個過程。Saver上必須先安裝jmeter工具,然后改下配置文件。 修改配置文件如下: 在bin下面找到一個文件prope
12、rtics cd apache-jmeter-3.2/ cd bin ./jmeter-server 假設(shè),我的腳本里線程設(shè)置100,那么3臺每臺Saver就300. Loadrunner可以每臺機器單獨設(shè)置,但jmeter不行2、在控制機執(zhí)行分布式命令jmeter -n -t testplan/comic.jmx -r -l testResult/result1.jtl 啟動所有從機執(zhí)行腳本2.性能測試資源的監(jiān)控: 2 .1安裝工具nmon: (我這邊有下載的工具及安裝步驟) 2.2 用nmon 監(jiān)控工具收集后臺資源 收集命令: ./nmon_x86_64_centos6 -f -s 6 -
13、c 30 說明:-f 以文件的形式輸出,默認輸出是機器名+日期.nmon的格式,也可以用-F指定輸出的文件名,例如:-s是采樣頻率,隔多長時間收集一次,這里我指定的是6秒一次;-c是采樣次數(shù),一共要收集多少次,這里我指定的是30次。 2.3 用nmon分析工具形成圖表形式的文檔 分析工具:Contents目 錄 四.性能測試分析介紹 1. 操作系統(tǒng)性能監(jiān)控分析(cpu,內(nèi)存, 磁盤io) 2.jvm堆模型,gc垃圾收集監(jiān)控分析 3. tomca(中間件)監(jiān)控分析 4.針對錯誤提示信息的分析 1.1 .cpu : 單線程死鎖 這個判斷 流程比較多,生產(chǎn)上基本不會有問題, 1.2 .查看cpu利用
14、率比較高的線程實現(xiàn): 1.L 1.3 .cpu常用命令詳解: uptime: 滿足什么會于運行對列: 1.沒有在等待i/o操作的結(jié)果 2.沒有主動進入等待狀態(tài)(沒有調(diào)用“wait”) 3.沒有被停止(等待終止)L 1.3 .cpu常用命令詳解: top: L 1.3 .cpu常用命令詳解: top: L buffer和cache的作用是縮短i/0系統(tǒng)的調(diào)用的時間,比如讀寫等,一般一個系統(tǒng) 而言,如果 cache的值越大,說明cache住的文件數(shù)多,如果頻繁地訪問文件都能被命中,很明顯會比讀取磁盤調(diào)用快,磁盤的io必定會減小。 cache的命中率是關(guān)鍵,如果頻繁訪問的文件不能被命中,對cache
15、而言是個比較大的資源浪費,此時應(yīng)考慮drop cache并且提升對應(yīng)的cache命中率。命令: Free -m sync Echo 3 /proc/sys/vm/drop _caches L 1.2 .內(nèi)存: 內(nèi)存使用率:內(nèi)存使用率=(1-空閑內(nèi)存/總內(nèi)存大小)*100% 或 內(nèi)存使用率=(總內(nèi)存-空閑內(nèi)存-cached緩存-buffers緩存)/總內(nèi)存 內(nèi)存使用率:無性能壓力:0%50%、有一定性能壓力:50%70%、達到性能閥值:70%80%、嚴(yán)重性能問題:80%100%內(nèi)存使用率長時間處于95%以上 -P1級bug內(nèi)存使用率長時間處于90%以上 -P2級bug 1.2 .磁盤: IO瓶頸
16、往往是我們可能會忽略的地方(我們常會看top、free、netstat等等,但經(jīng)常會忽略IO的負載情況),今天給大家詳細分享一下如何確認一臺服務(wù)器的IO負載是否到達了瓶頸,以及可能優(yōu)化、定位的點。 先來看一臺典型的IO密集型服務(wù)器的cpu統(tǒng)計圖: 可以看到,CPU總使用率不高,平均1.1%,max到5.6%,雖然大部分都耗在了iowait上,但才百分之五左右,應(yīng)該還沒到瓶頸吧?這里要特別注意:iowaitIO負載,要看真實的IO負載情況,一般使用iostat x 命令$ iostat x 1avg-cpu: %user %nice %system %iowait %steal %idle 0.
17、04 0.00 0.04 4.99 0.00 94.92Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %utilsda 0.00 81.00 104.00 4.00 13760.00 680.00 133.70 2.08 19.29 9.25 99.90sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00sda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00sda3
18、 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00sda4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00sda5 0.00 81.00 104.00 4.00 13760.00 680.00 133.70 2.08 19.29 9.25 99.90這里重點指標(biāo)是svctm和util這兩列svctm指的是“平均每次設(shè)備I/O操作的服務(wù)時間 (毫秒)”%util指的是“一秒鐘I/O 操作的利用率,或者說一秒中有多少時間 I/O 隊列是非空的?!蔽覀冞@里發(fā)現(xiàn)%util已經(jīng)接近1
19、00%,可以知道其實目前這臺服務(wù)器的IO已經(jīng)到達瓶頸了。那為什么最前面的cpu統(tǒng)計圖的iowait項只有5.5%左右呢?因為這個iowait(也就是top里的wa%)指的是從整體來看,CPU等待IO的耗時占比:%wa iowait也就是說,CPU拿出一部分時間來等待IO完成(iowait),但從磁盤的角度看,磁盤的利用率已經(jīng)滿了(util%),這種情況下,CPU使用率 可能不高,但是系統(tǒng)整體QPS已經(jīng)上不去了,如果加大流量,會導(dǎo)致單次IO耗時的繼續(xù)增加(因為IO請求都堵在隊列里了),從而影響系統(tǒng)整體的處理性能。確認了IO負載過高后,可以使用iotop工具具體查看IO負載主要是落在哪個進程上了。
20、詳解iostat 命令rrqm/s: 每秒進行 merge 的讀操作數(shù)目。wrqm/s: 每秒進行 merge 的寫操作數(shù)目。r/s: 每秒完成的讀 I/O 設(shè)備次數(shù)。w/s: 每秒完成的寫 I/O 設(shè)備次數(shù)。rsec/s: 每秒讀扇區(qū)數(shù)。wsec/s: 每秒寫扇區(qū)數(shù)。rkB/s: 每秒讀字節(jié)數(shù)。wkB/s: 每秒寫字節(jié)數(shù)。avgrq-sz: 平均每次設(shè)備I/O操作的數(shù)據(jù)大小 (扇區(qū))。avgqu-sz: 平均I/O隊列長度。await: 平均每次設(shè)備I/O操作的等待時間 (毫秒)。svctm: 平均每次設(shè)備I/O操作的服務(wù)時間 (毫秒)。%util: 一秒中有百分之多少的時間用于 I/O 操
21、作(使用率)或者說一秒中有多少時間 I/O 隊列是非空的。如果 %util 接近 100%,說明產(chǎn)生的I/O請求太多,I/O系統(tǒng)已經(jīng)滿負荷,該磁盤可能存在瓶頸。await: await的大小一般取決于服務(wù)時間(svctm) 以及 I/O 隊列的長度和 I/O 請求的發(fā)出模式。如果 svctm 比較接近 await,說明I/O 幾乎沒有等待時間;如果 await 遠大于 svctm,說明 I/O隊列太長,應(yīng)用得到的響應(yīng)時間變慢,r/s+w/s 類似于交款人的總數(shù)平均隊列長度(avgqu-sz)類似于單位時間里平均排隊人的個數(shù)平均服務(wù)時間(svctm)類似于收銀員的收款速度平均等待時間(await
22、)類似于平均每人的等待時間平均I/O數(shù)據(jù)(avgrq-sz)類似于平均每人所買的東西多少I/O 操作率 (%util)類似于收款臺前有人排隊的時間比例。 2.jvm堆模型,gc垃圾收集監(jiān)控分析 內(nèi)存的溢出: Out Of memory Java虛擬機中的OOm 內(nèi)存的溢出可能有兩種:1.代碼寫的不好 2.堆內(nèi)存分配的太小了 此處代碼演示 -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=C:/ 2.2堆內(nèi)存的重點: 這里有兩點:GC:不會導(dǎo)致java程序的暫停,快速的收集下就可以了FULL GC :但是一旦發(fā)生fu
23、ll gc ,java里有一個非常重要的概念 stop the word ,用戶的線程就全部胡暫停了。 假設(shè)在大量并發(fā)時,在大量的full gc ,用戶的線程暫停了,就會影響速度。這里經(jīng)歷了兩次full gc 任然不能回收,就內(nèi)存溢出了 DefNew:年輕代,串行垃圾回收器5478K-640K(6144K):執(zhí)行前,之行后,(6144K)新生代最大的大小0.0205187 secs:所花的時間Times: user=0.02 sys=0.00, real=0.02 secs :回收時,用戶占了多少時間,系統(tǒng)太占了多少時間,真實的人的感受時間Tenured:老年代回收 Metaspace:永久代
24、回收Full gc :整個堆回收 命令行工具:Jstatjmp 主要看FGC,值不能太大 S0C:年輕代中第一個survivor(幸存區(qū))的容量 (字節(jié)) S1C:年輕代中第二個survivor(幸存區(qū))的容量 (字節(jié)) S0U:年輕代中第一個survivor(幸存區(qū))目前已使用空間 (字節(jié)) S1U:年輕代中第二個survivor(幸存區(qū))目前已使用空間 (字節(jié)) EC:年輕代中Eden(伊甸園)的容量 (字節(jié)) EU:年輕代中Eden(伊甸園)目前已使用空間 (字節(jié)) OC:Old代的容量 (字節(jié)) OU:Old代目前已使用空間 (字節(jié)) PC:Perm(持久代)的容量 (字節(jié)) PU:P
25、erm(持久代)目前已使用空間 (字節(jié)) YGC:從應(yīng)用程序啟動到采樣時年輕代中g(shù)c次數(shù) YGCT:從應(yīng)用程序啟動到采樣時年輕代中g(shù)c所用時間(s) FGC:從應(yīng)用程序啟動到采樣時old代(全gc)gc次數(shù) FGCT:從應(yīng)用程序啟動到采樣時old代(全gc)gc所用時間(s) GCT:從應(yīng)用程序啟動到采樣時gc用的總時間(s) NGCMN:年輕代(young)中初始化(最小)的大小 (字節(jié)) NGCMX:年輕代(young)的最大容量 (字節(jié)) NGC:年輕代(young)中當(dāng)前的容量 (字節(jié)) OGCMN:old代中初始化(最小)的大小 (字節(jié)) OGCMX:old代的最大容量 (字節(jié)) O
26、GC:old代當(dāng)前新生成的容量 (字節(jié)) PGCMN:perm代中初始化(最小)的大小 (字節(jié)) PGCMX:perm代的最大容量 (字節(jié)) PGC:perm代當(dāng)前新生成的容量 (字節(jié)) S0:年輕代中第一個survivor(幸存區(qū))已使用的占當(dāng)前容量百分比 S1:年輕代中第二個survivor(幸存區(qū))已使用的占當(dāng)前容量百分比 E:年輕代中Eden(伊甸園)已使用的占當(dāng)前容量百分比 O:old代已使用的占當(dāng)前容量百分比 P:perm代已使用的占當(dāng)前容量百分比 S0CMX:年輕代中第一個survivor(幸存區(qū))的最大容量 (字節(jié)) S1CMX :年輕代中第二個survivor(幸存區(qū))的最大
27、容量 (字節(jié)) ECMX:年輕代中Eden(伊甸園)的最大容量 (字節(jié)) DSS:當(dāng)前需要survivor(幸存區(qū))的容量 (字節(jié))(Eden區(qū)已滿) TT: 持有次數(shù)限制 MTT : 最大持有次數(shù)限制 主要看FGC,值不能太大4.1 JVM 調(diào)優(yōu)對于jvm調(diào)優(yōu)的主要目的是減少GC的頻率和Full GC 的次數(shù),過多的GC和Full GC會占用很多的系統(tǒng)資源(主要是CPU)影響系統(tǒng)的吞吐量,特別要關(guān)注Full GC,因為它是對整個堆進行整理,導(dǎo)致Full GC 的一般幾種情況:1.老年代空間不足2.調(diào)優(yōu)時盡量讓對象在新生代GC被回收,讓新生代多存活一段時間和不要創(chuàng)建過大的對象以及數(shù)組避免直接在老年代創(chuàng)建對象3.增加持久代的空間4.垃圾回收機制不要手動觸發(fā)(System.gc(),盡量依靠JVN的自身的回收機制調(diào)優(yōu)過程主要是通過控制堆內(nèi)存的各個部分的比例和GC的策略來實現(xiàn),下面看一下各比例不良導(dǎo)致的一些情況:1.新生代設(shè)置過小一是新生代GC數(shù)非常頻繁,增大系統(tǒng)消耗,二是導(dǎo)致大對象直接進入老年代,占據(jù)老年代的剩余空間,誘發(fā)Full GC2.新生代設(shè)置過大一是新生代設(shè)置過大會導(dǎo)致老年代過小(堆的大小是一定的),從而誘發(fā)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 籍電器維修技術(shù)總結(jié)
- 汽車行業(yè)工程師的工作總結(jié)
- 【八年級下冊歷史】第12課 民族大團結(jié) 同步練習(xí)
- 2024年秋葉飄教案
- 2024年秋天的懷念教案篇
- 2024年美術(shù)教案匯編8篇
- 制造業(yè)合同范本(2篇)
- 2024無錫經(jīng)典財稅獨家資料初級會計職稱考試《初級會計經(jīng)濟法基礎(chǔ)》考試密卷
- 2024年福建省《公共基礎(chǔ)之管理公文》必刷500題帶解析含答案ab卷
- 【人教版九上歷史】背誦秘笈
- 2024年濟南歷城區(qū)九年級中考化學(xué)一??荚囋囶}(含答案)
- GB/T 19923-2024城市污水再生利用工業(yè)用水水質(zhì)
- 護理組長述職演講
- 2024年生開心果市場需求分析報告
- 修理廠環(huán)保規(guī)定匯總
- 現(xiàn)代材料分析測試技術(shù)課件
- 2022-2023學(xué)年北京市海淀區(qū)高一(上)期末地理試卷
- 2024年其他招錄考試-大學(xué)畢業(yè)生士兵提干筆試歷年真題薈萃含答案
- 北魏政治和北方民族大交融【全國一等獎】
- 淮安市2023-2024學(xué)年七年級上學(xué)期期末歷史試卷(含答案解析)
- 培養(yǎng)學(xué)生深度思考的能力
評論
0/150
提交評論