完整的JMETER使用手冊(cè)-適合初學(xué)者_(dá)第1頁(yè)
完整的JMETER使用手冊(cè)-適合初學(xué)者_(dá)第2頁(yè)
完整的JMETER使用手冊(cè)-適合初學(xué)者_(dá)第3頁(yè)
完整的JMETER使用手冊(cè)-適合初學(xué)者_(dá)第4頁(yè)
完整的JMETER使用手冊(cè)-適合初學(xué)者_(dá)第5頁(yè)
已閱讀5頁(yè),還剩72頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、JMETER中文手冊(cè)分享1.簡(jiǎn)介Apache JMeter是100%純java桌面應(yīng)用程序,被設(shè)計(jì)用來(lái)測(cè)試C/S結(jié)構(gòu)的軟件(例如web應(yīng)用程序)。它可以用來(lái)測(cè)試包括基于靜態(tài)和動(dòng)態(tài)資源程序的性能,例如靜態(tài)文件,Java Servlets,Java對(duì)象,數(shù)據(jù)庫(kù),F(xiàn)TP服務(wù)器等等。JMeter可以用來(lái)在一個(gè)服務(wù)器、網(wǎng)絡(luò)或者對(duì)象上模擬重負(fù)載來(lái)測(cè)試它的強(qiáng)度或者分析在不同的負(fù)載類型下的全面性能。另外,JMeter能夠通過(guò)讓你們用斷言創(chuàng)建測(cè)試腳本來(lái)驗(yàn)證我們的應(yīng)用程序是否返回了我們期望的結(jié)果,從而幫助我們回歸測(cè)試我們的程序。為了最大的靈活性,JMeter允許我們使用正則表達(dá)式創(chuàng)建斷言。1.1 歷史Apache

2、軟件組織的Stefano Mazzocchi是JMeter的創(chuàng)始人。他編寫它起初是為了測(cè)試Apache JServ的性能(一個(gè)已經(jīng)被Apache Tomcat工程所替代的工程)。我們重新設(shè)計(jì)JMeter來(lái)增強(qiáng)用戶界面并增加功能測(cè)試的能力。1.2 未來(lái)我們希望看到作為開發(fā)者利用它的可插入架構(gòu)使JMeter的功能快速擴(kuò)展。未來(lái)發(fā)展的主要目標(biāo)是在沒有影響JMeter的負(fù)載測(cè)試能力的情況下盡可能使JMeter成為最實(shí)用的回歸測(cè)試工具。2.入門開始使用JMeter最容易的方法是首先下載最新版并且安裝它。這個(gè)版本包含所有你在構(gòu)建和運(yùn)行Web,F(xiàn)TP,JDBC,和JNDI等測(cè)試時(shí)使用需要的所有文件。如果你想

3、執(zhí)行JDBC測(cè)試,你當(dāng)然需要從供應(yīng)商得到適當(dāng)?shù)腏DBC驅(qū)動(dòng)。JMeter沒有提供任何JDBC驅(qū)動(dòng)。你可能需要下載的其它軟件:BeanShell - BeanShell函數(shù)和測(cè)試元件需要Java Activation Framework - JavaMail需要Java Mail - Mail可視化,Mail Reader 和 WebService(SOAP)取樣器需要JMS - JMS取樣器需要下一步, 開始使用JMeter并且參見用戶手冊(cè)創(chuàng)建一個(gè)測(cè)試計(jì)劃一章使自己更加熟悉JMeter基礎(chǔ)(例如,添加和刪除元件)。最后, 參見如何構(gòu)建一個(gè)明確類型的測(cè)試用例的適合章節(jié)。例如,如果你對(duì)Web應(yīng)用測(cè)

4、試感興趣,那就參見創(chuàng)建一個(gè)Web測(cè)試計(jì)劃。其他具體的測(cè)試計(jì)劃章節(jié)是:高級(jí)Web測(cè)試計(jì)劃、JDBC、FTP、JMS 點(diǎn)到點(diǎn)、JMS 主題、LDAP2.1 需求JMeter 需要最小需求的運(yùn)行環(huán)境。2.1.1 Java版本JMeter需要一個(gè)完全適當(dāng)?shù)腏VM1.4或者更高因?yàn)镴Meter 僅使用Java標(biāo)準(zhǔn)API, 請(qǐng)不要把因?yàn)镴RE實(shí)現(xiàn)版本而無(wú)法運(yùn)行JMeter的bug報(bào)告提交。2.1.2 操作系統(tǒng)JMeter是100%純Java應(yīng)用程序并且能夠正確的在任何有適當(dāng)?shù)腏ava實(shí)現(xiàn)的操作系統(tǒng)上運(yùn)行。JMeter 在下列環(huán)境已經(jīng)被測(cè)試:Unix(Solaris, Linux, 等)、Windows (

5、98, NT, 2000, xp)、OpenVMS Alpha 7.3+2.2 可選如果你計(jì)劃做JMeter開發(fā)或者想使用SUN的java標(biāo)準(zhǔn)擴(kuò)展包,你將需要下列更多的可選包。2.2.1 Java編譯器如果你想編譯JMeter源代碼或者開發(fā)JMeter插件,你將需要一個(gè)完整的適當(dāng)?shù)腏DK1.4或者更高。2.2.2 SAX XML解析器JMeter 使用 Apache的 Xerces XML解析器,你可以選擇告訴JMeter使用一個(gè)不同的XML解析器。這樣做,把第三方的解析器的類包包含在JMeter的classpath中, 并更新 perties 文件里的解析器實(shí)現(xiàn)的全類名。

6、2.2.3 Email支持JMeter有有限的Email能力。 它能夠發(fā)送基于測(cè)試結(jié)果的Email,并且支持POP/IMAP 取樣器。它現(xiàn)在不支持SMTP取樣。為了能夠支持Email, 需要添加Sun的JavaMail包和activation包到JMeter classpath 。2.2.4 SSL加密為了測(cè)試一個(gè)使用SSL加密(HPPS)的web服務(wù)器, JMeter 需要一個(gè)提供SSL實(shí)現(xiàn)(例如 Sun的Java Secure Sockets Extension - JSSE)。包含需要的加密包到JMeter的classpath。 同樣,通過(guò)注冊(cè)SSL提供者更新pert

7、ies文件。JMeter默認(rèn)協(xié)議等級(jí)TLS(傳輸層安全性)。這可以通過(guò)修改在erties或者perties文件中的tocol來(lái)改變。JMeter被配置接受所有的證書,不管是否信賴和合法時(shí)間等。這允許在測(cè)試服務(wù)器最大靈活性。如果服務(wù)器需要一個(gè)客戶端證書,這是可以提供的。為了更好的管理證書,也要有一個(gè)SSL管理器 。2.2.5 JDBC驅(qū)動(dòng)如果你需要JDBC測(cè)試,需要添加廠商的JDBC驅(qū)動(dòng)到classpath。確認(rèn)文件是一個(gè)jar文件,而不是zip。2.2.6 Apache SOAPApache SOAP需要mail.jar和a

8、ctivation.jar.你需要下載并拷貝這兩個(gè)jar文件到你jmeter/lib 目錄.一旦文件放到那里,JMeter 會(huì)自動(dòng)找到它們。2.2.7 BeanShell為了運(yùn)行BeanShell函數(shù)或者任何BeanShell測(cè)試元件(取樣器,定時(shí)器等),你需要從/下載beanshell的jar文件并拷貝jar文件到j(luò)meter/lib目錄,JMeter會(huì)自動(dòng)找到它。2.2.8 ActiveMQ 3.0類庫(kù)詳細(xì)參見 /initial-configuration.html詳細(xì)參見JMeter Clas

9、spath 一章安裝附加的jar包2.3 安裝我們推薦大多數(shù)用戶運(yùn)行最新版本。要安裝一個(gè)構(gòu)建版本,簡(jiǎn)單解壓zip/tar文件到你想安裝JMeter的目錄。保證一個(gè)JRE/JDK正確的安裝并且設(shè)置環(huán)境變量JAVA_HOME,其它不需要做什么了。安裝目錄接口應(yīng)該看到的像這樣一些東西(2.3.1版本):jakarta-jmeter-2.3.1 jakarta-jmeter-2.3.1/bin jakarta-jmeter-2.3.1/docs jakarta-jmeter-2.3.1/extras jakarta-jmeter-2.3.1/lib/ jakarta-jmeter-2.3.1/lib/

10、ext jakarta-jmeter-2.3.1/lib/junit jakarta-jmeter-2.3.1/printable_docs如果你想的話你可以重命名父目錄(例如 jakarta-jmeter-2.3.1) ,但是不要改變?nèi)魏巫幽夸浢?。父目錄路徑中不能包含任何空格;如果包含,你運(yùn)行客戶端-服務(wù)器模式會(huì)有問題。2.4 運(yùn)行JMeter要運(yùn)行JMeter, 運(yùn)行jmeter.bat (for Windows)或者jmeter (for Unix) 文件。那些文件在bin目錄下。稍微暫停后,JMeter GUI會(huì)顯示出來(lái)。在bin目錄你會(huì)發(fā)現(xiàn)有些附加腳本很有用。Windows腳本文件(

11、CMD文件需要Win2K或者更新):jmeter.bat - 運(yùn)行JMeter(默認(rèn)在GUI模式)jmeter-n.cmd - 使用一個(gè)JMX文件運(yùn)行非GUI測(cè)試jmeter-n-r.cmd - 使用一個(gè)JMX文件遠(yuǎn)程運(yùn)行一個(gè)非GUI測(cè)試jmeter-t.cmd - 在GUI模式使用一個(gè)JMX文件jmeter-server.bat - 以服務(wù)器模式啟動(dòng)JMeter注意: LAST可以在jmeter-n.cmd, jmeter-t.cmd 和 jmeter-n-r.cmd中使用,意味著最后一次測(cè)試會(huì)運(yùn)行.Unix腳本文件可以運(yùn)行在大多Linux/Unix系統(tǒng).jmeter - 運(yùn)行JMeter(

12、默認(rèn)在GUI模式)jmeter-server - 以服務(wù)器模式啟動(dòng)JMeter2.4.1 JMeter ClasspathJMeter 自動(dòng)從下列目錄中的jar文件發(fā)現(xiàn)類。JMETER_HOME/lib - 用來(lái)放使用的jar文件JMETER_HOME/lib/ext - 用來(lái)放JMeter組件和擴(kuò)展如果你開發(fā)新的JMeter組件,你可以壓縮它們成jar包并拷貝到JMeter的/lib/ext目錄。JMeter將會(huì)自動(dòng)發(fā)現(xiàn)在這里的任何jar文件中的JMeter組件。支持的jar文件(類庫(kù))應(yīng)該放在lib目錄.如果你不想把擴(kuò)展jar包放到lib/ext目錄,可以在pertie

13、s中定義search_paths屬性。不要使用lib/ext給那些公用的jar包;它僅僅是存放JMeter組件。其他jar包(例如JDBC, 和任何JMeter代碼需要支持的類庫(kù))應(yīng)該被代替放在lib目錄 ,而不是lib/ext目錄。你可以在$JAVA_HOME/jre/lib/ext安裝有用的jar文件,或者(自從2.1.1版本)你可以在perties中設(shè)置user.classpath屬性。注意設(shè)置CLASSPATH環(huán)境變量將不起作用。這是因?yàn)镴Meter 使用java -jar啟動(dòng),并且java命令無(wú)記錄忽略CLASSPATH變量,并且當(dāng)使用-jar選項(xiàng)時(shí)-classp

14、ath/-cp選項(xiàng)也被使用。2.4.2 使用代理服務(wù)器如果你從防火墻/代理服務(wù)器后測(cè)試,你需要提供給JMeter防火墻/代理服務(wù)器的主機(jī)名和端口號(hào)。這樣做,從命令行使用以下參數(shù)運(yùn)行jmeter.bat/jmeter文件: -H 代理服務(wù)器主機(jī)名或者ip地址-P 代理服務(wù)器端口-N 非代理主機(jī) (例如:*.|localhost)-u 代理證書用戶名- 如果需要-a 代理證書密碼 - 如果需要例如 : jmeter -H xy.server -P 8000 -u username -a password -N localhost或者, 你使用 -proxyHost,

15、 -proxyPort, -username, and -passwordJMeter也有自己的內(nèi)建HTTP代理服務(wù)器,來(lái)記錄HTTP(不是 HTTPS)瀏覽器會(huì)話。這是和上面的代理設(shè)置描述不混淆的,它是在JMeter發(fā)出HTTP或者HTTPS請(qǐng)求時(shí)使用的。2.4.3 非用戶界面模式(命令行模式)為了不相互影響測(cè)試, 你可以選擇運(yùn)行沒有用戶界面的JMeter。這樣做,使用下列命令選項(xiàng):-n 這是指定JMeter在非用戶界面模式運(yùn)行-t 包含測(cè)試計(jì)劃的JMX文件的名字-l 記錄取樣結(jié)果的JTL文件的名字-r 運(yùn)行在perties文件里所有的遠(yuǎn)程服務(wù)器 (或者通過(guò)在命令行覆蓋屬

16、性指定遠(yuǎn)程服務(wù)器)這個(gè)腳本也允許我們指定可選的防火墻/代理服務(wù)器信息:-H 代理服務(wù)器主機(jī)名或者ip地址-P 代理服務(wù)器端口例如 : jmeter -n -t my_test.jmx -l log.jtl -H xy.server -P 80002.4.4 服務(wù)器模式為了分布測(cè)試,在服務(wù)器模式運(yùn)行JMeter,并且通過(guò)用戶界面控制每一臺(tái)服務(wù)器。jmeter-server/jmeter-server.bat 腳本使用適當(dāng)?shù)腸lasspath為你開始遠(yuǎn)程注冊(cè)。如果失敗,參見關(guān)于JMeter服務(wù)器啟動(dòng)細(xì)節(jié)。運(yùn)行jmeter-server/jmeter-server.bat,加上下列選項(xiàng)命

17、令:這個(gè)腳本也允許我們指定可選的防火墻/代理服務(wù)器信息:-H 代理服務(wù)器主機(jī)名或者ip地址-P 代理服務(wù)器端口例如 : jmeter-server -H xy.server -P 80002.4.5 通過(guò)命令行覆蓋屬性Java系統(tǒng)屬性,JMeter屬性,和日志屬性可以通過(guò)命令行直接覆蓋(代替更改perties文件)。這樣做,使用下列選項(xiàng):-Dprop_name=value - 定義一個(gè)java系統(tǒng)屬性值。-Jprop name=value - 覆蓋一個(gè)JMeter屬性。-Lcategory=priority - 覆蓋一個(gè)日志設(shè)置,設(shè)置一個(gè)特殊目錄為給定的優(yōu)先級(jí)。

18、-L 標(biāo)志也可以使用沒有目錄名來(lái)設(shè)置根目錄日志等級(jí)。例如 :jmeter -Duser.dir=/home/mstover/jmeter_stuff -Jremote_hosts= -Ljmeter.engine=DEBUGjmeter -LDEBUG注意:命令行參數(shù)在啟動(dòng)時(shí)較早被處理,但是在日志系統(tǒng)被設(shè)置以后。嘗試使用-J標(biāo)志更新log_level或者log_file屬性無(wú)效。2.4.6 日志和錯(cuò)誤信息如果JMeter發(fā)現(xiàn)一個(gè)錯(cuò)誤, 一個(gè)消息將被寫入日志文件。日志文件名在perties文件中定義。一般定義為jmeter.log 。并且在JMeter啟動(dòng)目

19、錄,例如bin。當(dāng)在Windows下運(yùn)行時(shí),如果你不設(shè)置Windows顯示文件擴(kuò)展名,文件名會(huì)僅顯示為 JMeter。還有記錄錯(cuò)誤,jmeter.log 文件記錄一些測(cè)試運(yùn)行信息。例如:10/17/2003 12:19:20 PM INFO - jmeter.JMeter: Version 1.9.2003100210/17/2003 12:19:45 PM INFO - jmeter.gui.action.Load:Loadingfile:c:mytestfilesBSH.jmx10/17/2003 12:19:52 PM INFO - jmeter.engine.StandardJMete

20、rEngine: Running the test!10/17/2003 12:19:52 PM INFO - jmeter.engine.StandardJMeterEngine: Starting 1 threads for group BSH. Ramp up = 1.10/17/2003 12:19:52 PM INFO - jmeter.engine.StandardJMeterEngine: Continue on error10/17/2003 12:19:52 PM INFO - jmeter.threads.JMeterThread: Thread BSH1-1 starte

21、d10/17/2003 12:19:52 PM INFO - jmeter.threads.JMeterThread: Thread BSH1-1 is done10/17/2003 12:19:52 PM INFO - jmeter.engine.StandardJMeterEngine: Test has ended日志文件對(duì)發(fā)現(xiàn)錯(cuò)誤原因很有幫助,作為JMeter不會(huì)打斷一個(gè)測(cè)試來(lái)顯示一個(gè)錯(cuò)誤對(duì)話框。2.4.7 命令行選項(xiàng)目錄調(diào)用JMeter的jmeter -?命令將打印所有命令選項(xiàng)的一個(gè)列表。列表如下:-h,-help打印使用信息并退出-v, -version打印版本信息并推出-p, -

22、propfile argument使用的JMeter屬性文件-q, -addprop argument附加的屬性文件-t, -testfile argument運(yùn)行的JMeter測(cè)試文件(.jmx)-l, -logfile argument日志取樣文件-n, -nongui 非用戶界面運(yùn)行JMeter-s, -server 運(yùn)行JMeter服務(wù)器-H, -proxyHost argument設(shè)置JMeter使用的代理服務(wù)器-P, -proxyPort argument設(shè)置JMeter使用的代理服務(wù)器端口-u, -username argument設(shè)置JMeter使用的代理服務(wù)器用戶名-a, -

23、password argument設(shè)置JMeter使用的代理服務(wù)器密碼-J, -jmeterproperty argument=value定義附加的 JMeter 屬性-D, -systemproperty argument=value定義附加的 System 屬性-S, -systemPropertyFile filename一個(gè)屬性文件被做為系統(tǒng)屬性添加-L, -loglevel argument=value定義日志等級(jí): category=level例如 jorphan=INFO or jmeter.util=DEBUG-r, -runremote從非用戶界面模式啟動(dòng)遠(yuǎn)程服務(wù)器-d, -

24、homedir argument 使用的JMeter目錄2.5 配置JMeter如果你希望改變JMeter運(yùn)行時(shí)的屬性你需要改變?cè)?bin目錄下的perties文件,或者創(chuàng)建你自己的perties文件并且在命令行指定它。注意:自從2.1.2,你能夠通過(guò)JMeter屬性perties在文件中定義附加的JMeter屬性,perties默認(rèn)值是perties。如果在當(dāng)前目錄被發(fā)現(xiàn),這個(gè)文件被自動(dòng)加載。類似的,perties被用來(lái)更新系統(tǒng)屬性。參數(shù):屬性描述vider你可以為你的S

25、SL實(shí)現(xiàn)指定類。如果你想使用來(lái)自sun的JSSE,是這樣:.ssl.Internal.ssl.Provider。JMeter默認(rèn)提供https支持。如果你正在使用JDK1.4, 或者你使用帶JSSE類的jar文件在JMeter的classpath里的JDK1.4。 C.ernal.ssl.ProviderJMeter默認(rèn)提供https支持是在你使用JDK1.4或者你使用把JSSE類的jar包放到JMeter classpath中的JDK1.3時(shí)候。 xml.parser你可以指明一個(gè)你的XML解析器實(shí)現(xiàn)。默認(rèn)值是:org.apache.xerces.parsers.SAXPars

26、er remote_hosts逗號(hào)分割遠(yuǎn)程JMeter主機(jī)列表。如果你在一個(gè)分布式環(huán)境運(yùn)行JMeter,列出你用JMeter遠(yuǎn)程主機(jī)運(yùn)行的機(jī)器。這允許你使用機(jī)器的用戶界面控制那些服務(wù)器。 not_in_menu在JMeter選項(xiàng)屏中你不想看到的組件列表。如果JMeter被添加越來(lái)越多的組件,你會(huì)希望定制JMeter只出現(xiàn)那些你感興趣的組件。你可以在這兒列出那些類名和他們的類標(biāo)簽(JMeter的用戶界面出現(xiàn)的字符串),它們將在選項(xiàng)屏中不出現(xiàn)。 search_paths列出那些JMeter搜索JMeter附加類的路徑(以;分割);例如附加的取樣器。被添加到lib/ext目錄的任何jar包都被發(fā)現(xiàn)。

27、 user.classpathJMeter搜索的公用類庫(kù)的路徑列表。被添加到lib目錄的任何jar包都被發(fā)現(xiàn)。 perties附加的JMeter屬性文件名。 初始化屬性文件后它們被添加,但是在-q和-J選項(xiàng)被處理之前。 perties附加的系統(tǒng)屬性文件名。 -S和-D選項(xiàng)被執(zhí)行前添加。 3. 創(chuàng)建一個(gè)測(cè)試計(jì)劃一個(gè)測(cè)試計(jì)劃描述了一系列Jmeter運(yùn)行時(shí)要執(zhí)行的步驟。一個(gè)完整的測(cè)試計(jì)劃包含一個(gè)或者多個(gè)線程組,邏輯控制器,取樣發(fā)生控制,監(jiān)聽器,定時(shí)器,斷言和配置元件。3.1 添加和刪除元件在一個(gè)樹上通過(guò)右擊可以添加元件到一個(gè)測(cè)試計(jì)劃 ,并且從添加列表中選擇一個(gè)新元

28、件。另外,元件可以從文件加載并且通過(guò)選擇打開選項(xiàng)添加。為了刪除元件,確保元件被選中,正確在元件上右擊,并且選擇刪除選項(xiàng)。3.2 加載和保存元件為了從文件加載元件,右擊將要加載元件到的已經(jīng)存在的樹元件,并選擇打開選項(xiàng)。選擇你的元件保存的文件。JMeter會(huì)加載元件到樹中。為了保存樹元件,在一個(gè)元件上右擊,選擇保存選項(xiàng)。JMeter會(huì)保存已選的元件,加上所有下面的子元件。用這種方法,你能夠保存測(cè)試樹的片段,單獨(dú)元件,或者整個(gè)測(cè)試計(jì)劃。3.3 配置樹元件在測(cè)試樹中的任何元件都在JMeter的右側(cè)框架顯示配置。那些配置允許你配置測(cè)試元件的細(xì)節(jié)行為,對(duì)于一個(gè)元件什么能被配置依賴于它是一個(gè)什么類型的元件。

29、3.4 保存測(cè)試計(jì)劃雖然這不是必須的,我們推薦你在運(yùn)行前保存測(cè)試計(jì)劃。為了保存測(cè)試計(jì)劃,從文件菜單選擇保存測(cè)試計(jì)劃(使用最新版本,你不再需要首先選擇測(cè)試計(jì)劃元件)。JMeter允許你保存整個(gè)測(cè)試計(jì)劃樹或者僅它的一部分。為了僅保存測(cè)試計(jì)劃樹中特殊支位置的元件,從從這個(gè)支開始的地方選擇樹中的測(cè)試計(jì)劃元件,然后右擊鼠標(biāo)訪問保存菜單項(xiàng)。另外選擇合適的測(cè)試計(jì)劃元件并從編輯菜單選擇保存。3.5 運(yùn)行一個(gè)測(cè)試計(jì)劃為了運(yùn)行一個(gè)測(cè)試計(jì)劃,從運(yùn)行菜單項(xiàng)選擇開始。為了停止你的測(cè)試計(jì)劃,從同樣的菜單選擇停止。JMeter不會(huì)自動(dòng)給它是否正在運(yùn)行任何顯示。如果JMeter運(yùn)行,一些監(jiān)聽器使它變明顯,但是唯一確定的方法是

30、檢查運(yùn)行菜單。如果開始不可用,停止 可用,證明JMeter正在運(yùn)行你的測(cè)試計(jì)劃(或者至少它認(rèn)為它是)。有兩個(gè)類型的停止命令:停止(Control + .)- 立刻停止所有的線程關(guān)閉(Control + ,)- 請(qǐng)求所有線程在當(dāng)前任務(wù)結(jié)束后停止3.6 元件作用域及執(zhí)行順序3.6.1 作用域規(guī)則JMeter中共有8類可被執(zhí)行的元件(測(cè)試計(jì)劃與線程組不屬于元件),這些元件中,取樣器是典型的不與其它元件發(fā)生交互作用的元件,邏輯控制器只對(duì)其子節(jié)點(diǎn)的取樣器有效,而其它元件(configelements、timers、post-processors、assertions、listeners、)需要與取樣器(

31、sampler)等元件交互。配置元件(configelements):元件會(huì)影響其作用范圍內(nèi)的所有元件。前置處理程序(Per-processors):元件在其作用范圍內(nèi)的每一個(gè)sampler元件之前執(zhí)行。定時(shí)器(timers):元件對(duì)其作用范圍內(nèi)的每一個(gè)sampler有效后置處理程序(Post-processors):元件在其作用范圍內(nèi)的每一個(gè)sampler元件之后執(zhí)行。斷言(Assertions):元件對(duì)其作用范圍內(nèi)的每一個(gè)sampler元件執(zhí)行后的結(jié)果執(zhí)行校驗(yàn)。監(jiān)聽器(Listeners):元件收集其作用范圍的每一個(gè)sampler元件的信息并呈現(xiàn)。在jmeter中,元件的作用域是靠測(cè)試計(jì)劃

32、的的樹型結(jié)構(gòu)中元件的父子關(guān)系來(lái)確定的,作用域的原則是:取樣器(sampler)元件不和其它元件相互作用,因此不存在作用域的問題。邏輯控制器(LogicController)元件只對(duì)其子節(jié)點(diǎn)中的取樣器和邏輯控制器作用。除取樣器和邏輯控制器元件外,其他6類元件,如果是某個(gè)sampler的子節(jié)點(diǎn),則該元件公對(duì)其父子節(jié)點(diǎn)起作用。除取樣器和邏輯控制器元件外的其他6類元件,如果其父節(jié)點(diǎn)不是sampler,則其作用域是該元件父節(jié)點(diǎn)下的其他所有后代節(jié)點(diǎn)(包括子節(jié)點(diǎn),子節(jié)點(diǎn)的子節(jié)點(diǎn)等)。3.6.2 元件的執(zhí)行順序了解了元件有作用域之后,來(lái)看看元件的執(zhí)行順序,元件執(zhí)行順序的規(guī)則很簡(jiǎn)單,在同一作用域名范圍內(nèi),測(cè)試計(jì)

33、劃中的元件按照如下順序執(zhí)行。(1)配置元件(configelements)(2)前置處理程序(Per-processors)(3)定時(shí)器(timers)(4)取樣器(Sampler)(5)后置處理程序(Post-processors)(除非Sampler得到的返回結(jié)果為空)。(6)斷言(Assertions)(除非Sampler得到的返回結(jié)果為空)。(7)監(jiān)聽器(Listeners)(除非Sampler得到的返回結(jié)果為空)。關(guān)于執(zhí)行順序,有三點(diǎn)需要注意:*前置處理器、后置處理器和斷言等元件只能對(duì)取樣器作用,因此如果在它們的作用域內(nèi)沒有任何取樣器,則不會(huì)被執(zhí)行。*如果在同一作用域范圍內(nèi)有多個(gè)同一

34、類型的元件,則這些元件按照它們?cè)跍y(cè)試計(jì)劃中的上下順序依次執(zhí)行。* 一個(gè)斷言在測(cè)試樹中是分等級(jí)的。如果它的父元件是請(qǐng)求,它就被應(yīng)用于那個(gè)請(qǐng)求。如果它的父元件是控制器,它就影響所有那個(gè)控制器下的所有請(qǐng)求。請(qǐng)求的順序是 One,Two,Three,F(xiàn)our。一些控制器影響它的子元件的順序,你可以在組件參考讀到特定的控制器。Assertion #1僅被應(yīng)用于請(qǐng)求One,Assertion #2僅被應(yīng)用于請(qǐng)求Two和Three。在這個(gè)例子里,請(qǐng)求的命名表現(xiàn)它們被執(zhí)行的順序。Timer #1應(yīng)用于請(qǐng)求Two,Three,和Four(注意對(duì)于分等級(jí)的元件怎樣的順序是不相關(guān)的)。Assertion #1應(yīng)用于

35、請(qǐng)求Three。Timer #2對(duì)所有請(qǐng)求有效。元件首部管理器,Cookie管理器和授權(quán)管理器的配置和默認(rèn)元件的配置被視為是不同的默認(rèn)元件配置的設(shè)置被并入取樣器可以到達(dá)的一組值里了。然而來(lái)自管理器的設(shè)置沒有并入。如果多于一個(gè)管理器在一個(gè)取樣器范圍中,僅僅一個(gè)被使用,但是現(xiàn)在沒有辦法指定那個(gè)被使用。3.7 錯(cuò)誤報(bào)告JMeter把警告和錯(cuò)誤信息報(bào)告在jmeter.log文件中,也有一些測(cè)試運(yùn)行本身的信息.只是偶爾地,JMeter對(duì)于某些錯(cuò)誤是無(wú)法補(bǔ)捉和記錄的,這些信息會(huì)顯示在命令臺(tái)上。如果一個(gè)測(cè)試的執(zhí)行并不是你所期待的,請(qǐng)檢查日志,也許錯(cuò)誤會(huì)被報(bào)告(例如:也許在函數(shù)調(diào)用上有語(yǔ)法錯(cuò)誤)。取樣錯(cuò)誤(例

36、如:HTTP 404 -找不到文件)是不會(huì)被正常的記錄在日志中的,取而代之的,他們會(huì)被當(dāng)作取樣結(jié)果的屬性來(lái)儲(chǔ)存,取樣結(jié)果的狀態(tài)能被許多不同的監(jiān)聽器所得到。4. 測(cè)試計(jì)劃元件測(cè)試計(jì)劃對(duì)象有一個(gè)叫做功能測(cè)試復(fù)選框。如果被選擇,它會(huì)使JMeter記錄來(lái)自服務(wù)器返回的每個(gè)取樣的數(shù)據(jù)。如果你在測(cè)試監(jiān)聽器中選擇一個(gè)文 件,這個(gè)數(shù)據(jù)將被寫入文件。如果你嘗試一個(gè)較小的測(cè)試來(lái)保證JMeter配置正確并且你的服務(wù)器正在返回期望的結(jié)果,這是很有用的。這樣的后果就是這個(gè)文 件會(huì)快速的增大,并且JMeter的效率會(huì)影響。如果你不做壓力測(cè)試這個(gè)選項(xiàng)應(yīng)該關(guān)閉(默認(rèn)關(guān)閉)。如果你不記錄數(shù)據(jù)到文件,這個(gè)選項(xiàng)就沒有不同了。4.1

37、 線程組線程組元件是任何測(cè)試計(jì)劃的起點(diǎn)。一個(gè)測(cè)試計(jì)劃的所有元件必須在一個(gè)線程組下。由名字可以看出,線程組元件控制JMeter運(yùn)行測(cè)試時(shí)使用的線程數(shù)。線程組管理允許你:設(shè)置線程數(shù)設(shè)置ramp-up period設(shè)置執(zhí)行測(cè)試的次數(shù)每個(gè)線程會(huì)作為一個(gè)整體執(zhí)行測(cè)試計(jì)劃并完全獨(dú)立于他測(cè)試線程。多線程用來(lái)模擬到達(dá)服務(wù)器程序的同步連接。 Ramp-up period告訴JMeter多久開始ramp-up選擇的全部線程。如果使用10個(gè)線程,ramp-up period是100秒,那么JMeter用100秒使所有10個(gè)線程啟動(dòng)并運(yùn)行。每個(gè)線程會(huì)在上一個(gè)線程啟動(dòng)后10秒(100/10)啟動(dòng)。如果有30 個(gè)線程和一

38、個(gè)120秒的ramp-up period,那么每個(gè)連續(xù)的線程會(huì)延遲4秒。Ramp-up需要要充足長(zhǎng)以避免在啟動(dòng)測(cè)試時(shí)有一個(gè)太大的工作負(fù)載,并且要充足小以至于最后一個(gè)線程在第一個(gè)完成前啟動(dòng)(除非你想那樣發(fā)生)。 使用ramp-up=線程數(shù)啟動(dòng),并上下調(diào)整到所需的。默認(rèn),線程組被配置僅循環(huán)一次。 1.9版本引入了一個(gè)測(cè)試運(yùn)行*調(diào)度器*。 單擊在線程組面板底部的復(fù)選框來(lái)顯示額外的文本域,在里面你可以輸入啟動(dòng)和結(jié)束時(shí)間。當(dāng)測(cè)試啟動(dòng)時(shí),如果必須JMeter會(huì)等待啟動(dòng)時(shí)間到達(dá)。在每個(gè)周期 結(jié)束,JMeter檢驗(yàn)結(jié)束時(shí)間是否到達(dá),如果是,運(yùn)行停止,如果不是測(cè)試被允許繼續(xù),直到迭代限制到達(dá)。另外你可以使用啟動(dòng)

39、延遲和持續(xù)時(shí)間文本域。注意啟動(dòng)延遲會(huì)覆蓋啟動(dòng)時(shí)間,持續(xù)時(shí)間會(huì)覆蓋結(jié)束時(shí)間。 4.2控制器JMeter有兩種控制器:取樣器和邏輯控制器。取樣器告訴JMeter發(fā)送請(qǐng)求到服務(wù)器。例如,如果你要JMeter發(fā)送一個(gè)HTTP請(qǐng)求添加一個(gè)HTTP請(qǐng)求取樣器。你也可以通過(guò)添加一個(gè)或者多個(gè)配置元件到一個(gè)取樣器來(lái)定制一個(gè)請(qǐng)求。更多信息,見取樣器。邏輯控制器讓你定制當(dāng)發(fā)送請(qǐng)求時(shí)JMeter使用的判斷邏輯。例如,你可以添加交替控制器來(lái)在兩個(gè)HTTP請(qǐng)求取樣器之間交替 。更多信息,見邏輯控制器。4.2.1 取樣器(Sampler)取樣器告訴JMeter發(fā)送請(qǐng)求到服務(wù)器。JMeter取樣器包括:FTP 請(qǐng)求HTTP

40、請(qǐng)求JDBC 請(qǐng)求Java object 請(qǐng)求LDAP 請(qǐng)求SOAP/XML-RPC 請(qǐng)求WebService (SOAP) 請(qǐng)求每個(gè)取樣器有一些你可以設(shè)置的屬性。你可以通過(guò)添加一個(gè)或多個(gè)配置元件到取樣器來(lái)進(jìn)一步定制它。注意JMeter發(fā)送請(qǐng)求按照取樣器出現(xiàn)在樹中的順序。 如果你想發(fā)送多個(gè)相同類型的請(qǐng)求(例如,HTTP Request)到相同的服務(wù)器,可以考慮使用一個(gè)默認(rèn)配置元件。每個(gè)控制器有一個(gè)或者多個(gè)默認(rèn)配置元件(見下)。 記得添加一個(gè)監(jiān)聽器到線程組來(lái)查看/保存你的請(qǐng)求結(jié)果到磁盤。如果你對(duì)使用JMeter平臺(tái)的基礎(chǔ)驗(yàn)證器到你的請(qǐng)求響應(yīng)感興趣,添加一個(gè)斷言到請(qǐng)求控制器。例如, 在壓力測(cè)試一個(gè)

41、web程序時(shí),服務(wù)器會(huì)返回一個(gè)成功的HTTP響應(yīng)代碼,但是這個(gè)頁(yè)面有錯(cuò)誤或者被忽略部分。你可以添加斷言來(lái)檢查某個(gè)HTML標(biāo)簽,一些 錯(cuò)誤字符串,等等。JMeter允許你使用正則表達(dá)式創(chuàng)建斷言。JMeter 內(nèi)建取樣器4.2.2 邏輯控制器保持邏輯控制器讓你定制當(dāng)發(fā)送請(qǐng)求時(shí)JMeter使用的判斷邏輯。邏輯控制器還可以作為下列任何元件的子元件:取樣器(請(qǐng)求)、配置元件、和其他邏輯控制器。邏輯控制器可以改變來(lái)自它們的子元件的請(qǐng)求順序。它們可以修改請(qǐng)求本身,導(dǎo)致JMeter重復(fù)請(qǐng)求,等。理解邏輯控制器在測(cè)試計(jì)劃中的效果,考慮下列測(cè)試樹:測(cè)試計(jì)劃 線程組 僅一次控制器 登錄請(qǐng)求(一個(gè)HTTP請(qǐng)求)加載搜

42、索頁(yè)面(HTTP取樣器)Interleave Controller 搜索A(HTTP取樣器)搜索B(HTTP取樣器)HTTP默認(rèn)請(qǐng)求(配置元件)HTTP默認(rèn)請(qǐng)求(配置元件)Cookie管理器(配置元件)這個(gè)測(cè)試的第一件事就是登錄請(qǐng)求僅在第一次經(jīng)過(guò)時(shí)被執(zhí)行。隨后的迭代會(huì)忽略它。這應(yīng)使用僅一次控制器。登陸后,下一個(gè)取樣器加載搜索頁(yè)面( 假設(shè)一個(gè)用登錄的web應(yīng)用程序,并到達(dá)搜索頁(yè)面去搜索)。這僅是一個(gè)簡(jiǎn)單的請(qǐng)求,不會(huì)被任何邏輯控制器過(guò)濾。加載搜索頁(yè)面后,我們要做一個(gè)搜索。事實(shí)上,我們想做兩個(gè)不同的搜索。然而,在每個(gè)搜索之間我們想要自己重新加載搜索頁(yè)面。我們通過(guò)4個(gè)簡(jiǎn)單 HTTP元件這樣做。(loa

43、d search, search A, load search, search B). Instead, we use the Interleave Controller which passes on one child request each time through the test. It keeps the ordering (ie - it doesnt pass one on at random, but remembers its place) of its child elements. Interleaving 2 child requests may be overki

44、ll, but there could easily have been 8, or 20 child requests.注意HTTP默認(rèn)請(qǐng)求屬于插入控制器。假如Search A和Search B共享同樣的PATH信息(一個(gè)HTTP請(qǐng)求說(shuō)明中包括域,端口,方法,協(xié)議路徑和參數(shù),附加其他可選項(xiàng))。兩個(gè)搜索請(qǐng)求訪問同樣的后端搜索引擎(比方 說(shuō)Servle,或者cgi腳本),這樣是說(shuō)得通的。與其兩者都配置使用相同信息的HTTP取樣器,我們可以抽象那些新到一個(gè)單獨(dú)的配置元件。當(dāng)內(nèi)部控制 器通過(guò)Search A或者Search B傳遞時(shí),它會(huì)從HTTP默認(rèn)請(qǐng)求配置元件中獲得值填充空白。所以我們可以為那些

45、請(qǐng)求保留PATH域?yàn)榭?,然后把那些信息放到配置元件。在這個(gè)例子中, 這至多是一個(gè)很小的好處,但它顯示了這個(gè)特性。在這個(gè)樹中下一個(gè)元件是另一個(gè)HTTP默認(rèn)請(qǐng)求,這個(gè)時(shí)間被添加到線程組本身。這個(gè)線程組有一個(gè)內(nèi)建的邏輯控制器,因此它正好使用這個(gè)配置元件做為 上面的描述。它填充任何穿過(guò)的請(qǐng)求的空白。 在web程序中你所有的HTTP取樣器元件DOMAIN域?yàn)榭?,這是極度有用的,替代的,把那些信息放到HTTP默認(rèn)請(qǐng)求元件中,添加到線程組。通過(guò)這樣 做,你可以在一個(gè)同的服務(wù)器通過(guò)改變你測(cè)試計(jì)劃中的一個(gè)域來(lái)測(cè)試你的程序。另外,你必須編輯每個(gè)取樣器。最后一個(gè)元件是一個(gè)HTTP Cookie管理器。一個(gè)Cooki

46、e管理器應(yīng)該添加到所有web測(cè)試上-否則JMeter會(huì)忽略Cookie。通過(guò)在線程組級(jí)添加它,我們可以確定所有的線程分享同樣的Cookie。邏輯控制器可以組合達(dá)到不同的結(jié)果。見內(nèi)建邏輯控制器列表。 4.3 監(jiān)聽器監(jiān)聽器提供訪問JMeter收集當(dāng)JMeter運(yùn)行的關(guān)于測(cè)試計(jì)劃的信息。圖形結(jié)果監(jiān)聽器在一張圖上繪制響應(yīng)時(shí)間。查看結(jié)果樹監(jiān)聽器顯示了請(qǐng)求和響應(yīng)取樣器的細(xì)節(jié),并且以基礎(chǔ)的HTML和XML顯示響應(yīng)表現(xiàn)。其他監(jiān)聽器提供了摘要或者集合信息。另外,監(jiān)聽器可以指導(dǎo)它們收集的數(shù)據(jù)到一個(gè)文件供以后用。在JMeter中每一個(gè)監(jiān)聽器提供一個(gè)域來(lái)指出存儲(chǔ)數(shù)據(jù)的文件。在測(cè)試中監(jiān)聽器可以添加到任何位置。它們僅僅會(huì)

47、從它們等級(jí)或者它們以下等級(jí)的元件收集數(shù)據(jù)。伴隨JMeter有很多有趣的監(jiān)聽器。4.4 定時(shí)器默認(rèn),JMeter線程發(fā)送請(qǐng)求時(shí)不在請(qǐng)求間暫停。我們建議你通過(guò)添加一個(gè)可用的定時(shí)器到你的線程組來(lái)指定一個(gè)延遲。如果你不添加延遲,JMeter會(huì)在短時(shí)間內(nèi)產(chǎn)生太多請(qǐng)求,可能會(huì)壓倒你的服務(wù)。 定時(shí)器會(huì)使JMeter在一個(gè)線程開始每個(gè)請(qǐng)求間延遲一段時(shí)間。如果你選擇添加多于一個(gè)定時(shí)器到一個(gè)線程組,JMeter會(huì)在執(zhí)行取樣器前獲得定時(shí)器數(shù)量并暫停那個(gè)時(shí)間量。4.5 斷言斷言允許你斷言關(guān)于從測(cè)試服務(wù)器收到的響應(yīng)的行為。使用斷言你本質(zhì)上你可以測(cè)試你的應(yīng)用程序返回你期望的結(jié)果。 例如,你可以斷言一個(gè)查詢的響應(yīng)會(huì)包含一些

48、特殊的文本。你指定的文本可能是Perl風(fēng)格的正則表達(dá)式, 并且你可以指出這個(gè)響應(yīng)是包含這個(gè)文本,還是匹配整個(gè)響應(yīng)。你可以添加一個(gè)斷言到任何取樣器。例如你可以添加一個(gè)斷言到HTTP請(qǐng)求檢查文本。JMeter會(huì)檢查在HTTP響應(yīng)中表現(xiàn)的文本。如果JMeter沒有找到這個(gè)文本,它會(huì)標(biāo)記這個(gè)為一個(gè)失敗的請(qǐng)求。為了查看斷言結(jié)果,添加一個(gè)斷言監(jiān)聽器到線程組。Assertion-斷言,通常是用于對(duì)每一個(gè)request sampler進(jìn)行額外驗(yàn)證的工具。下面通過(guò)一個(gè)例子來(lái)介紹一下常用的幾個(gè)Assertions。假設(shè)現(xiàn)在要進(jìn)行一個(gè)登陸的壓力測(cè)試,下面是對(duì)pass的幾個(gè)定義:1.正確login后,必須收到返回的身

49、份驗(yàn)證和用戶個(gè)人信息下載的完成信息;2.響應(yīng)時(shí)間不能超過(guò)150毫秒3.返回的結(jié)果大小不能小于750bytes根據(jù)以上的要求,我們?cè)趯?duì)應(yīng)的request sampler下面添加了以下的Assertions。A.Response AssertionResponse Field to Test - 標(biāo)示被檢查對(duì)象是什么?Pattern Matching Rules - 標(biāo)明被檢查對(duì)象與驗(yàn)證內(nèi)容之間的關(guān)系,Contains(包含關(guān)系);Matches(匹配關(guān)系);Equals(相等關(guān)系);Not(非關(guān)系)Pattern to Test - 需要驗(yàn)證的內(nèi)容列表B.Duration AssertionDu

50、ration to Assert - 允許的響應(yīng)時(shí)間的最大值C.Size AssertionSize to Assert - 對(duì)于返回結(jié)果文件大小的標(biāo)準(zhǔn)定義二、結(jié)果分析添加了以上的Assertions后,我運(yùn)行了一次腳本。以下是存放結(jié)果的.jtl文件的內(nèi)容:timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,Latency11/04/08 13:22:03,172,Do Login,200,OK,Thread Group 1-1,text,fa

51、lse,The operation lasted too long: It took 172 milliseconds, but should not have lasted longer than 150 milliseconds.,835,17211/04/08 13:22:03,156,Do Login,200,OK,Thread Group 1-2,text,false,Test failed: text expected to contain /loginMsg=OK/,633,15611/04/08 13:22:03,156,Do Login,200,OK,Thread Group

52、 1-3,text,false,The operation lasted too long: It took 156 milliseconds, but should not have lasted longer than 150 milliseconds.,839,15611/04/08 13:22:03,156,Do Login,200,OK,Thread Group 1-4,text,false,The operation lasted too long: It took 156 milliseconds, but should not have lasted longer than 1

53、50 milliseconds.,836,15611/04/08 13:22:03,78,Do Login,200,OK,Thread Group 1-5,text,true,779,7811/04/08 13:22:03,63,Do Login,200,OK,Thread Group 1-7,text,false,Test failed: text expected to contain /loginMsg=OK/,570,6311/04/08 13:22:03,141,Do Login,200,OK,Thread Group 1-6,text,false,The result was th

54、e wrong size: It was 721 bytes, but should have been greater than 750 bytes.,721,14111/04/08 13:22:03,78,Do Login,200,OK,Thread Group 1-9,text,false,The result was the wrong size: It was 724 bytes, but should have been greater than 750 bytes.,724,7811/04/08 13:22:03,204,Do Login,200,OK,Thread Group

55、1-10,text,false,The operation lasted too long: It took 204 milliseconds, but should not have lasted longer than 150 milliseconds.,1137,20411/04/08 13:22:03,2985,Do Login,200,OK,Thread Group 1-8,text,false,Test failed: text expected to contain /loginMsg=OK/,570,2985我們可以看到,每一個(gè)Sampler都會(huì)經(jīng)過(guò)Assertions的判斷,

56、只要有一個(gè)不符合條件的都會(huì)標(biāo)示為False。4.6 配置元件配置元件配合取樣器工作。雖然它不發(fā)送請(qǐng)求(除了HTTP代理服務(wù)器),但是它可以添加或者修改請(qǐng)求。一個(gè)配置元件進(jìn)能訪問有所代替元件所在的樹分支的內(nèi)部。例如,如果你在一個(gè)簡(jiǎn)單邏輯控制器里面設(shè)置一個(gè)HTTP Cookie管理器,Cookie管理器很容易訪問web Page 1和web Page 2HTTP請(qǐng)求。但是不能訪問web Page 3。 同樣,一個(gè)在樹枝內(nèi)部的配置元件比在父支的同樣元件有更高的優(yōu)先級(jí)。例如,我們定義兩個(gè)HTTP默認(rèn)請(qǐng)求元件,Web Defaults 1和Web Defaults 2。 如果我們把Web Defaults 1放置在一個(gè)循環(huán)控制器內(nèi)部,僅Web Page 2可以訪問它。另一HTTP請(qǐng)求會(huì)使用Web Defaults 2,如果我們把它放置在線程組 (所有其他分支的父支)。圖 1 - 測(cè)試計(jì)劃展示配置元件的可達(dá)性4.7 前置處理器元件前置處理器在取樣器請(qǐng)求建立前執(zhí)行一些行為。如果前置處理器附屬于取樣器元件,那么它會(huì)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論