完整JMETER使用手冊_第1頁
完整JMETER使用手冊_第2頁
完整JMETER使用手冊_第3頁
完整JMETER使用手冊_第4頁
完整JMETER使用手冊_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

JMETER中文手冊1.簡介ApacheJMeter是100%純java桌面應(yīng)用程序,被設(shè)計(jì)用來測試客戶端/服務(wù)器結(jié)構(gòu)的軟件(例如web應(yīng)用程序?qū)ο?,?shù)據(jù)庫FTP服務(wù)器可以用來在一個(gè)服務(wù)器、網(wǎng)絡(luò)或者對象上模擬重負(fù)載來測試它的強(qiáng)度或者分析在不同的負(fù)載類型下的全面性能。另外,JMeter能夠通過讓你們用斷言創(chuàng)建測試腳本來驗(yàn)證我們的應(yīng)用程序是否返回了我們期望的結(jié)果,從而幫助我們回歸測試我們的程序。為了最大的靈活性,JMeter允許我們使用正則表達(dá)式創(chuàng)建斷言。1.1歷史Apache軟件組織的StefanoMazzocchi是JMeter的創(chuàng)始人。他編寫它起初是為了測試ApacheJServ的性能(一個(gè)已經(jīng)被ApacheTomcat工程所替代的工程)。我們重新設(shè)計(jì)JMeter來增強(qiáng)用戶界面并增加功能測試的能力。1.2未來我們希望看到作為開發(fā)者利用它的可插入架構(gòu)使JMeter是在沒有影響JMeter的負(fù)載測試能力的情況下盡可能使JMeter成為最實(shí)用的回歸測試工具。2.入門開始使用JMeter最容易的方法是首先下載最新版并且安裝它。這個(gè)版本包含所有你在構(gòu)建和運(yùn)行Web,,和JNDI等測試時(shí)使用需要的所有文件。如果你想執(zhí)行JDBCJDBC沒有提供任何JDBC驅(qū)動(dòng)。你可能需要下載的其它軟件:---和-?????包下一步,開始使用JMeter并且參見用戶手冊創(chuàng)建一個(gè)測試計(jì)劃一章使自己更加熟悉JMeter基礎(chǔ)(例如,添加和刪除元件)。?最后,參見如何構(gòu)建一個(gè)明確類型的測試用例的適合章節(jié)。例如,如果你對Web應(yīng)用測試感興趣,那就參見創(chuàng)建一個(gè)Web測試計(jì)劃。其他具體的測試計(jì)劃章節(jié)是:????????一旦你熟練創(chuàng)建和執(zhí)行JMeter測試計(jì)劃,通過你的測試計(jì)劃你會觀察到給你更多幫助的各種元件的配置(定時(shí)器,監(jiān)聽器,斷言,和其他)。2.1需求JMeter需要最小需求的運(yùn)行環(huán)境。2.1.1因?yàn)镴Meter僅使用Java標(biāo)準(zhǔn)API,請不要把因?yàn)镴RE實(shí)現(xiàn)版本而無法運(yùn)行JMeter的bug報(bào)告提交。2.1.2JMeter是100%純Java應(yīng)用程序并且能夠正確的在任何有適當(dāng)?shù)腏ava實(shí)現(xiàn)的操作系統(tǒng)上運(yùn)行。JMeter在下列環(huán)境已經(jīng)被測試:)???2.2可選如果你計(jì)劃做JMeter開發(fā)或者想使用SUN的java標(biāo)準(zhǔn)擴(kuò)展包,你將需要下列更多的可選包。2.2.1如果你想編譯JMeter源代碼或者開發(fā)JMeterJDK1.4或者更高。2.2.2JMeter使用Apache的XercesXML解析器,你可以選擇告訴JMeter使用一個(gè)不同的XML解析器。這樣做,把第三方的解析器的類包包含在JMeter的classpath中,并更新perties文件里的解析器實(shí)現(xiàn)的全類名。2.2.3JMeter有有限的Email能力。它能夠發(fā)送基于測試結(jié)果的POP/IMAP取樣器。它現(xiàn)在不支持SMTP取樣。為了能夠支持Email,需要添加Sun的JavaMail包和activation包到JMeterclasspath。2.2.4為了測試一個(gè)使用SSLweb服務(wù)器,JMeter需要一個(gè)提供SSL實(shí)現(xiàn)(例如Sun的JavaSecureSocketsExtension-JSSE)。包含需要的加密包到JMeter的classpath。同樣,通過注冊SSL提供者更新perties文件。JMeter默認(rèn)協(xié)議等級TLS(傳輸層安全性)。這可以通過修改在erties或者perties文件中的"tocol"來改變。JMeter如果服務(wù)器需要一個(gè)客戶端證書,這是可以提供的。為了更好的管理證書,也要有一個(gè)SSL管理器。。2.2.5如果你需要JDBC測試,需要添加廠商的JDBC驅(qū)動(dòng)到classpath。確認(rèn)文件是一個(gè)jar文件,而不是zip。2.2.6ApacheSOAP需要mail.jar和activation.jar.你需要下載并拷貝這兩個(gè)jar文件到你jmeter/lib目錄.一旦文件放到那里,JMeter會自動(dòng)找到它們。2.2.7為了運(yùn)行BeanShell函數(shù)或者任何BeanShell測試元件(取樣器,定時(shí)器等),你需要從下載beanshell的jar文件并拷貝jar文件到j(luò)meter/lib目錄,JMeter會自動(dòng)找到它。詳細(xì)參見包2.3安裝我們推薦大多數(shù)用戶運(yùn)行最新版本。要安裝一個(gè)構(gòu)建版本,簡單解壓zip/tar文件到你想安裝JMeter的目錄。保證一個(gè)JRE/JDK正確的安裝并且設(shè)置環(huán)境變量JAVA_HOME,其它不需要做什么了。安裝目錄接口應(yīng)該看到的像這樣一些東西(2.3.1版本):jakarta-jmeter-2.3.1jakarta-jmeter-2.3.1/binjakarta-jmeter-2.3.1/docsjakarta-jmeter-2.3.1/extrasjakarta-jmeter-2.3.1/lib/jakarta-jmeter-2.3.1/lib/extjakarta-jmeter-2.3.1/lib/junitjakarta-jmeter-2.3.1/printable_docs如果你想的話你可以重命名父目錄(例如jakarta-jmeter-2.3.1),但是不要改變?nèi)魏巫幽夸浢?。父目錄路徑中不能包含任何空格;如果包含,你運(yùn)行客戶端-服務(wù)器模式會有問題。2.4運(yùn)行JMeter要運(yùn)行JMeter,運(yùn)行jmeter.bat(forWindows)或者jmeter(forUnix)文件。那些文件在bin目錄下。稍微暫停后,JMeterGUI會顯示出來。在bin文件需要Win2K-)?????---在-注意:LAST可以在jmeter-n.cmd,jmeter-t.cmd和jmeter-n-r.cmd中使用,意味著最后一次測試會運(yùn)行.Unix腳本文件;可以運(yùn)行在大多Linux/Unix系統(tǒng).-)-??2.4.1JMeter自動(dòng)從下列目錄中的jar文件發(fā)現(xiàn)類。--??如果你開發(fā)新的JMeter組件,你可以壓縮它們成jar包并拷貝到JMeter的/lib/ext目錄。JMeter將會自動(dòng)發(fā)現(xiàn)在這里的任何jar文件中的JMeter組件。支持的jar文件(類庫)應(yīng)該放在lib目錄.如果你不想把擴(kuò)展jar包放到lib/ext目錄,可以在perties中定義search_paths屬性。不要使用lib/ext給那些公用的jar包;它僅僅是存放JMeter組件。其他jar包(例如JDBC,和任何JMeter代碼需要支持的類庫)應(yīng)該被代替放在lib目錄-而不是lib/ext目錄。你可以在$JAVA_HOME/jre/lib/ext安裝有用的jar文件,或者(自從2.1.1版本)你可以在perties中設(shè)置user.classpath屬性。注意設(shè)置CLASSPATHJMeter使用"javajava命令無記錄忽略CLASSPATH選項(xiàng)時(shí)-classpath/-cp有的java程序都是這樣,不僅僅是JMeter。]2.4.2JMeter防火墻/代理服務(wù)器的主機(jī)名和端口號。這樣做,從命令行使用以下參數(shù)運(yùn)行jmeter.bat/jmeter文件:-H[代理服務(wù)器主機(jī)名或者ip地址]-P[代理服務(wù)器端口]-N[非代理主機(jī)](例如:*.|localhost)-u[代理證書用戶名-如果需要]-a[代理證書密碼-如果需要]例如:jmeter-Hxy.server-P8000-uusername-apassword-Nlocalhost或者,你使用--proxyHost,--proxyPort,--username,and--password2.4.3命令行模式)為了不相互影響測試,你可以選擇運(yùn)行沒有用戶界面的JMeter。這樣做,使用下列命令選項(xiàng):-n這是指定JMeter在非用戶界面模式運(yùn)行-t[包含測試計(jì)劃的JMX文件的名字]-l[記錄取樣結(jié)果的JTL文件的名字]-r運(yùn)行在perties文件里所有的遠(yuǎn)程服務(wù)器(或者通過在命令行覆蓋屬性指定遠(yuǎn)程服務(wù)器)這個(gè)腳本也允許我們指定可選的防火墻/代理服務(wù)器信息:-H[代理服務(wù)器主機(jī)名或者ip地址]-P[代理服務(wù)器端口]例如:jmeter-n-tmy_test.jmx-llog.jtl-Hxy.server-P80002.4.4為了分布測試,在服務(wù)器模式運(yùn)行JMeter,并且通過用戶界面控制每一臺服務(wù)器。運(yùn)行jmeter-server/jmeter-server.bat,加上下列選項(xiàng)命令:這個(gè)腳本也允許我們指定可選的防火墻/代理服務(wù)器信息:-H[代理服務(wù)器主機(jī)名或者ip地址]-P[代理服務(wù)器端口]例如:jmeter-server-Hxy.server-P80002.4.5Java系統(tǒng)屬性,JMeter屬性,和日志屬性可以通過命令行直接覆蓋(代替更改perties文件)。這樣做,使用下列選項(xiàng):-D[prop_name]=[value]-定義一個(gè)java系統(tǒng)屬性值。-J[propname]=[value]-覆蓋一個(gè)JMeter屬性。-L[category]=[priority]-覆蓋一個(gè)日志設(shè)置,設(shè)置一個(gè)特殊目錄為給定的優(yōu)先級。-L標(biāo)志也可以使用沒有目錄名來設(shè)置根目錄日志等級。例如:jmeter-Duser.dir=/home/mstover/jmeter_stuff\-Jremote_hosts=-Ljmeter.engine=DEBUGjmeter-LDEBUG2.4.6如果JMeter發(fā)現(xiàn)一個(gè)錯(cuò)誤,perties文件中定義。一般定義為jmeter.log。并且在JMeter啟動(dòng)目錄,例如bin。當(dāng)在Windows下運(yùn)行時(shí),如果你不設(shè)置Windows可以做一些事都很容易地發(fā)現(xiàn)偽裝成文本文件的病毒和垃圾文件...]還有記錄錯(cuò)誤,jmeter.log文件記錄一些測試運(yùn)行信息。例如:10/17/200312:19:20PMINFO-jmeter.JMeter:Version1.9.2003100210/17/200312:19:45PMINFO-jmeter.gui.action.Load:Loadingfile:c:\mytestfiles\BSH.jmx10/17/200312:19:52PMINFO-jmeter.engine.StandardJMeterEngine:Runningthetest!10/17/200312:19:52PMINFO-jmeter.engine.StandardJMeterEngine:Starting1threadsforgroupBSH.Rampup=1.10/17/200312:19:52PMINFO-jmeter.engine.StandardJMeterEngine:Continueonerror10/17/200312:19:52PMINFO-jmeter.threads.JMeterThread:ThreadBSH1-1started10/17/200312:19:52PMINFO-jmeter.threads.JMeterThread:ThreadBSH1-1isdone10/17/200312:19:52PMINFO-jmeter.engine.StandardJMeterEngine:Testhasended日志文件對發(fā)現(xiàn)錯(cuò)誤原因很有幫助,作為JMeter不會打斷一個(gè)測試來顯示一個(gè)錯(cuò)誤對話框。2.4.7調(diào)用JMeter的"jmeter-?"命令將打印所有命令選項(xiàng)的一個(gè)列表。列表如下:-h,--help打印使用信息并退出-v,--version打印版本信息并推出-p,--propfile{argument}使用的JMeter屬性文件-q,--addprop{argument}附加的屬性文件-t,--testfile{argument}運(yùn)行的JMeter測試文件(.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,--password{argument}設(shè)置JMeter使用的代理服務(wù)器密碼-J,--jmeterproperty{argument}={value}定義附加的JMeter屬性-D,--systemproperty{argument}={value}定義附加的System屬性-S,--systemPropertyFile{}一個(gè)屬性文件被做為系統(tǒng)屬性添加-L,--loglevel{argument}={value}定義日志等級:[category=]level例如jorphan=INFOorjmeter.util=DEBUG-r,--runremote從非用戶界面模式啟動(dòng)遠(yuǎn)程服務(wù)器-d,--homedir{argument}使用的JMeter目錄2.5如果你希望改變JMeter運(yùn)行時(shí)的屬性你需要改變在/bin目錄的perties創(chuàng)建你自己的perties文件并且在命令行指定它。自從參數(shù)需要的,的。類的。你可以指明一個(gè)你的解析器實(shí)現(xiàn)。默認(rèn)值是:,在又見perties文件注釋,在你改變其它設(shè)置時(shí)會給你更多的信息。3.創(chuàng)建一個(gè)測試計(jì)劃一個(gè)測試計(jì)劃描述了一系列Jmeter個(gè)線程組,邏輯控制器,取樣發(fā)生控制,監(jiān)聽器,定時(shí)器,斷言和配置元件。3.1添加和刪除元件在一個(gè)樹上通過右擊可以添加元件到一個(gè)測試計(jì)劃外,元件可以從文件加載并且通過選擇"打開"選項(xiàng)添加。為了刪除元件,確保元件被選中,正確在元件上右擊,并且選擇"刪除"選項(xiàng)。3.2加載和保存元件為了從文件加載元件,右擊將要加載元件到的已經(jīng)存在的樹元件,并選擇"打開"選項(xiàng)。選擇你的元件保存的文件。JMeter會加載元件到樹中。為了保存樹元件,在一個(gè)元件上右擊,選擇"保存"選項(xiàng)。JMeter會保存已選的元件,加上所有下面的子元件。用這種方法,你能夠保存測試樹的片段,單獨(dú)元件,或者整個(gè)測試計(jì)劃。工作臺不會自動(dòng)保存測試計(jì)劃,但是它可以同上被單獨(dú)保存3.3配置樹元件在測試樹中的任何元件都在JMeter行為,對于一個(gè)元件什么能被配置依賴于它是一個(gè)什么類型的元件??梢酝ㄟ^拖拉測試樹周圍的元件操作測試樹。3.4保存測試計(jì)劃雖然這不是必須的,我們推薦你在運(yùn)行前保存測試計(jì)劃。為了保存測試計(jì)劃,從文件菜單選擇保存測試計(jì)劃(使用最新版本,你不再需要首先選擇測試計(jì)劃元件).JMeter允許你保存整個(gè)測試計(jì)劃樹或者僅它的一部分.為了僅保存測試計(jì)劃樹中特殊"支"位置的元件,從從這個(gè)"支"開始的地方選擇樹中的測試計(jì)劃元件,然后右擊鼠標(biāo)訪問保存菜單項(xiàng).另外選擇合適的測試計(jì)劃元件并從編輯菜單選擇保存.3.5運(yùn)行一個(gè)測試計(jì)劃為了運(yùn)行一個(gè)測試計(jì)劃,從"運(yùn)行"菜單項(xiàng)選擇"開始"。為了停止你的測試計(jì)劃,從同樣的菜單選擇"停止"。JMeter不會自動(dòng)給它是否正在運(yùn)行任何顯示。如果JMeter運(yùn)行,一些監(jiān)聽器使它變明顯,但是唯一確定的方法是檢查"運(yùn)行"菜單。如果"開始"不可用,"停止"可用,證明JMeter正在運(yùn)行你的測試計(jì)劃(或者,至少,它認(rèn)為它是)。有兩個(gè)類型的停止命令:停止(Control+'.')-立刻停止所有的線程?關(guān)閉(Control+',')-請求所有線程在當(dāng)前任務(wù)結(jié)束后停止?3.6作用域規(guī)則JMeter元件,后置處理器,前置處理器,斷言,定時(shí)器),一些主要是有序的(控制器,取樣器)。當(dāng)你創(chuàng)建測試計(jì)劃時(shí),你將創(chuàng)建一個(gè)有序的取樣請求(通過取樣器)列表,那些請求描述了一組步驟的執(zhí)行。那些請求常組織在也有序的控制器中。給出如下測試樹:測試樹例子請求的順序是One,Two,Three,F(xiàn)our。一些控制器影響它的子元件的順序,你可以在組件參考讀到特定的控制器。其他元素是分等級的。例如,一個(gè)斷言在測試樹中是分等級的。如果它的父元件是請求,它就被應(yīng)用于那個(gè)請求。如果它的父元件是控制器,它就影響所有那個(gè)控制器下的所有請求。如下測試樹:分級例子Assertion#1僅被應(yīng)用于請求One,Assertion#2僅被應(yīng)用于請求Two和Three。另一個(gè)例子,這次使用定時(shí)器:復(fù)雜的例子在這個(gè)例子里,請求的命名表現(xiàn)它們被執(zhí)行的順序。Timer#1應(yīng)用于請求Two,Three,和Four#1應(yīng)用于請求#2對所有請求有效。希望那些例子使你弄清了配置(分等級的)元件如何被應(yīng)用。如果你想每個(gè)請求都被樹分叉拒絕,到它的父元件,到它的父元件的父元件,等等,每次收集所有它的父元件的配置元件,你將看到它如何工作的。元件首部管理器,Cookie管理器和授權(quán)管理器的配置和默認(rèn)元件的配置被視為是不同的.默認(rèn)元件配置的設(shè)置被并入取樣器可以到達(dá)的一組值里了。然而來自管理器的設(shè)置沒有并入。如果多于一個(gè)管理器在一個(gè)取樣器范圍中,僅僅一個(gè)被使用,但是現(xiàn)在沒有辦法指定那個(gè)被使用。3.7錯(cuò)誤報(bào)告JMeter把警告和錯(cuò)誤信息報(bào)告在jmeter.log文件中,也有一些測試運(yùn)行本身的信息.只是偶爾取樣錯(cuò)誤(例如:HTTP404-找不到文件)是不會被正常的記錄在日志中的,取而代之的,他們會被當(dāng)作取樣結(jié)果的屬性來儲存,取樣結(jié)果的狀態(tài)能被許多不同的監(jiān)聽器所得到。4.測試計(jì)劃元件測試計(jì)劃對象有一個(gè)叫做"功能測試"復(fù)選框。如果被選擇,它會使JMeter記錄來自服務(wù)器返回的每個(gè)取樣的數(shù)據(jù)。如果你在測試監(jiān)聽器中選擇一個(gè)文件,這個(gè)數(shù)據(jù)將被寫入文件。如果你嘗試一個(gè)較小的測試來保證JMeter這樣的后果就是這個(gè)文件會快速的增大,并且JMeter的效率會影響。如果你不做壓力測試這個(gè)選項(xiàng)應(yīng)該關(guān)閉(默認(rèn)關(guān)閉)。如果你不記錄數(shù)據(jù)到文件,這個(gè)選項(xiàng)就沒有不同了。4.1線程組線程組元件是任何測試計(jì)劃的起點(diǎn)。一個(gè)測試計(jì)劃的所有元件必須在一個(gè)線程組下。由名字可以看出,線程組元件控制JMeter運(yùn)行測試時(shí)使用的線程數(shù)。線程組管理允許你:設(shè)置線程數(shù)設(shè)置ramp-upperiod設(shè)置執(zhí)行測試的次數(shù)???每個(gè)線程會作為一個(gè)整體執(zhí)行測試計(jì)劃并完全獨(dú)立于他測試線程。多線程用來模擬到達(dá)服務(wù)器程序的同步連接。Ramp-upperiod告訴JMeter10period是100秒,那么JMeter用100秒使所有10個(gè)線程啟動(dòng)并運(yùn)行。每個(gè)線程會在上一個(gè)線程啟動(dòng)后10秒(100/10)啟動(dòng)。如果有30個(gè)線程和一個(gè)120秒的ramp-upperiod,那么每個(gè)連續(xù)的線程會延遲4秒。Ramp-up個(gè)線程在第一個(gè)完成前啟動(dòng)(除非你想那樣發(fā)生)。使用ramp-up=線程數(shù)啟動(dòng),并上下調(diào)整到所需的。默認(rèn),線程組被配置僅循環(huán)一次。1.9版本引入了一個(gè)測試運(yùn)行*調(diào)度器*。單擊在線程組面板底部的復(fù)選框來顯示額外的文本域,在里面你可以輸入啟動(dòng)和結(jié)束時(shí)間。當(dāng)測試啟動(dòng)時(shí),如果必須JMeter會等待啟動(dòng)時(shí)間到達(dá)。在每個(gè)周期直到迭代限制到達(dá)。另外你可以使用啟動(dòng)延遲和持續(xù)時(shí)間文本域。注意啟動(dòng)延遲會覆蓋啟動(dòng)時(shí)間,持續(xù)時(shí)間會覆蓋結(jié)束時(shí)間。4.2控制器JMeter有兩種控制器:取樣器和邏輯控制器。取樣器告訴JMeterJMeter發(fā)送一個(gè)HTTP請求添加一個(gè)HTTP請求取樣器。你也可以通過添加一個(gè)或者多個(gè)配置元件到一個(gè)取樣器來定制一個(gè)請求。更多信息,見取樣器。邏輯控制器讓你定制當(dāng)發(fā)送請求時(shí)JMeter使用的判斷邏輯。例如,你可以添加交替控制器來在兩個(gè)HTTP請求取樣器之間交替。更多信息,見邏輯控制器。4.2.1取樣器(Sampler)取樣器告訴JMeter發(fā)送請求到服務(wù)器。JMeter取樣器包括:FTP請求?HTTP請求JDBC請求??Javaobject請求?LDAP請求SOAP/XML-RPC請求WebService(SOAP)請求每個(gè)取樣器有一些你可以設(shè)置的屬性。你可以通過添加一個(gè)或多個(gè)配置元件到取樣器來進(jìn)一步定制它。注意JMeter發(fā)送請求按照取樣器出現(xiàn)在樹中的順序。如果你想發(fā)送多個(gè)相同類型的請求(例如,HTTPRequest)到相同的服務(wù)器,可以考慮使用一個(gè)默認(rèn)配置元件。每個(gè)控制器有一個(gè)或者多個(gè)默認(rèn)配置元件(見下)。記得添加一個(gè)監(jiān)聽器到線程組來查看/保存你的請求結(jié)果到磁盤。如果你對使用JMeter平臺的基礎(chǔ)驗(yàn)證器到你的請求響應(yīng)感興趣,添加一個(gè)斷言到請求控制器。例如,在壓力測試一個(gè)web程序時(shí),服務(wù)器會返回一個(gè)成功的HTTP響應(yīng)代碼,但是這個(gè)頁面HTML允許你使用正則表達(dá)式創(chuàng)建斷言。JMeter內(nèi)建取樣器4.2.2邏輯控制器保持邏輯控制器讓你定制當(dāng)發(fā)送請求時(shí)JMeter使用的判斷邏輯。邏輯控制器還可以作為下列任何元件的子元件:取樣器(請求)、配置元件、和其他邏輯控制器。邏輯控制器可以改變來自它們的子元件的請求順序。它們可以修改請求本身,導(dǎo)致JMeter重復(fù)請求,等。理解邏輯控制器在測試計(jì)劃中的效果,考慮下列測試樹:測試計(jì)劃線程組o僅一次控制器登錄請求(一個(gè)HTTP請求)加載搜索頁面(HTTP取樣器)InterleaveController搜索"A"(HTTP取樣器)搜索"B"(HTTP取樣器)HTTP默認(rèn)請求(配置元件)HTTP默認(rèn)請求(配置元件)Cookie管理器(配置元件)這個(gè)測試的第一件事就是登錄請求僅在第一次經(jīng)過時(shí)被執(zhí)行。隨后的迭代會忽略它。這應(yīng)使用僅一次控制器。登陸后,下一個(gè)取樣器加載搜索頁面(假設(shè)一個(gè)用登錄的web應(yīng)用程序,并到達(dá)搜索頁面去搜索)。這僅是一個(gè)簡單的請求,不會被任何邏輯控制器過濾。加載搜索頁面后,我們要做一個(gè)搜索。事實(shí)上,我們想做兩個(gè)不同的搜索。然而,在每個(gè)搜索之間我們想要自己重新加載搜索頁面。我們通過4個(gè)簡單HTTP元件這樣做。(loadsearch,search"A",loadsearch,search"B").Instead,weusetheInterleaveControllerwhichpassesononechildrequesteachtimethroughthetest.Itkeepstheordering(ie-itdoesn'tpassoneonatrandom,but"remembers"itsplace)ofitschildelements.Interleaving2childrequestsmaybeoverkill,buttherecouldeasilyhavebeen8,or20childrequests.注意HTTP默認(rèn)請求屬于插入控制器。假如"SearchA"和"SearchB"共享同樣的PATH信息(一個(gè)HTTP請求說明中包括域,端口,方法,協(xié)議路徑和參數(shù),附加其他可選項(xiàng))。兩個(gè)搜索請求訪問同樣的后端搜索引擎(比方說Servle,或者cgi腳本),這樣是說得通的。與其兩者都配置使用相同信息的HTTP取樣器,我們可以抽象那些新到一個(gè)單獨(dú)的配置元件。當(dāng)內(nèi)部控制器通過"SearchHTTP默認(rèn)請求配置元件中獲得值填充空白。所以我們可以為那些請求保留PATH域?yàn)榭?,然后把那些信息放到配置元件。在這個(gè)例子中,這至多是一個(gè)很小的好處,但它顯示了這個(gè)特性。在這個(gè)樹中下一個(gè)元件是另一個(gè)HTTP默認(rèn)請求,這個(gè)時(shí)間被添加到線程組本身。這個(gè)線程組有一個(gè)內(nèi)建的邏輯控制器,因此它正好使用這個(gè)配置元件做為上面的描述。它填充任何穿過的請求的空白。在web程序中你所有的HTTP取樣器元件DOMAIN把那些信息放到HTTP默認(rèn)請求元件中,添加到線程組。通過這樣做,你可以在一個(gè)同的服務(wù)器通過改變你測試計(jì)劃中的一個(gè)域來測試你的程序。另外,你必須編輯每個(gè)取樣器。最后一個(gè)元件是一個(gè)HTTPCookie管理器。一個(gè)Cookie管理器應(yīng)該添加到所有web測試上-否則JMeter會忽略Cookie。邏輯控制器可以組合達(dá)到不同的結(jié)果。見內(nèi)建邏輯控制器列表。4.3監(jiān)聽器監(jiān)聽器提供訪問JMeter收集當(dāng)JMeter運(yùn)行的關(guān)于測試計(jì)劃的信息。圖形結(jié)果監(jiān)聽器在一張圖上繪制響應(yīng)時(shí)間。HTML和XML顯示響應(yīng)表現(xiàn)。其他監(jiān)聽器提供了摘要或者集合信息。另外,監(jiān)聽器可以指導(dǎo)它們收集的數(shù)據(jù)到一個(gè)文件供以后用。在JMeter中每一個(gè)監(jiān)聽器提供一個(gè)域來指出存儲數(shù)據(jù)的文件。在測試中監(jiān)聽器可以添加到任何位置。它們僅僅會從它們等級或者它們以下等級的元件收集數(shù)據(jù)。伴隨JMeter有很多有趣的監(jiān)聽器。4.4定時(shí)器默認(rèn),JMeter線程發(fā)送請求時(shí)不在請求間暫停。我們建議你通過添加一個(gè)可用的定時(shí)器到你的線程組來指定一個(gè)延遲。如果你不添加延遲,JMeter會在短時(shí)間內(nèi)產(chǎn)生太多請求,可能會壓倒你的服務(wù)。定時(shí)器會使JMeter在一個(gè)線程開始每個(gè)請求間延遲一段時(shí)間。如果你選擇添加多于一個(gè)定時(shí)器到一個(gè)線程組,JMeter會在執(zhí)行取樣器前獲得定時(shí)器數(shù)量并暫停那個(gè)時(shí)間量。4.5斷言斷言允許你斷言關(guān)于從測試服務(wù)器收到的響應(yīng)的行為。使用斷言你本質(zhì)上你可以測試你的應(yīng)用程序返回你期望的結(jié)果。例如,你可以斷言一個(gè)查詢的響應(yīng)會包含一些特殊的文本。你指定的文本可能是Perl風(fēng)格的正則表達(dá)式,并且你可以指出這個(gè)響應(yīng)是包含這個(gè)文本,還是匹配整個(gè)響應(yīng)。HTTP請求檢查文本"</HTML>"。JMeter會檢查在HTTP響應(yīng)中表現(xiàn)的文本。如果JMeter沒有找到這個(gè)文本,它會標(biāo)記這個(gè)為一個(gè)失敗的請求。為了查看斷言結(jié)果,添加一個(gè)斷言監(jiān)聽器到線程組。4.6配置元件配置元件配合取樣器工作。雖然它不發(fā)送請求(除了HTTP代理服務(wù)器),但是它可以添加或者修改請求。一個(gè)配置元件進(jìn)能訪問有所代替元件所在的樹分支的內(nèi)部。例如,如果你在一個(gè)簡單邏輯控制器里面設(shè)置一個(gè)HTTPCookie管理器很容易訪問"webPage1"和"webPage2"HTTP請求。但是不能訪問"webPage3"。同樣,一個(gè)在樹枝內(nèi)部的配置元件比在父支的同樣元件有更高的優(yōu)先級。例如,我們定義兩個(gè)HTTP默認(rèn)請求元件,"WebDefaults1"和"WebDefaults2"。如果我們把"WebDefaults1"放置在一個(gè)循環(huán)控制器內(nèi)部,僅"WebPage2"可以訪問它。另一HTTP請求會使用"WebDefaults2",如果我們把它放置在線程組(所有其他分支的父支)。圖1-測試計(jì)劃展示配置元件的可達(dá)性4.7前置處理器元件前置處理器在取樣器請求建立前執(zhí)行一些行為。如果前置處理器附屬于取樣器元件,那么它會僅在那個(gè)取樣器元件運(yùn)行前執(zhí)行。前置處理器最常用來在取樣請求運(yùn)行前修改它的設(shè)置,或者更新不能從響應(yīng)文本提取的變量。當(dāng)前置處理器執(zhí)行時(shí),詳細(xì)信息見作用域規(guī)則。4.8后置處理器元件后置控制器在取樣器請求建立后執(zhí)行一些行為。如果后置處理器附屬于取樣器元件,那么它會僅在那個(gè)取樣器元件運(yùn)行后執(zhí)行。后置處理器最常用來處理響應(yīng)數(shù)據(jù),常用來從它里面提取數(shù)值。\\\\\\詳細(xì)見作用域規(guī)則關(guān)于前置處理器執(zhí)行。4.9執(zhí)行順序1.配額制元件2.前置處理器3.定時(shí)器4.取樣器5.后置處理器(如果SampleResult不為空)6.斷言(如果SampleResult不為空)7.監(jiān)聽器(如果SampleResult不為空)PleasenotethatTimers,Assertions,Pre-andPost-Processorsareonlyprocessedifthereisasamplertowhichtheyapply.LogicControllersandSamplersareprocessedintheorderinwhichtheyappearinthetree.Othertestelementsareprocessedaccordingtothescopeinwhichtheyarefound,andthetypeoftestelement.[Withinatype,elementsareprocessedintheorderinwhichtheyappearinthetree].Forexample,inthefollowingtestplan:ControllerPost-Processor1oSampler1Sampler2ooTimer1Assertion1ooPre-Processor1Timer2ooPost-Processor2oTheorderofexecutionwouldbe:Pre-Processor1Timer1Timer2Sampler1Post-Processor1Post-Processor2Assertion1Pre-Processor1Timer1Timer2Sampler2Post-Processor1Post-Processor2Assertion14.10PropertiesandVariablesJMperties(seeGetttingStarted-ConfiguringJMeterformoredetails).Propertiesareglobaltojmeter,andaremostlyusedtodefinesomeofthedefaultsJMeteruses.Forexamplethepropertyremote_hostsdefinestheserversthatJMeterwilltrytorunremotely.Propertiesreferencedintestplans-seeFunctions-readaproperty-butcannotbeusedforthread-specificvalues.JMetervariablesarelocaltoeachthread.Thevaluesmaybethesameforeachthread,ortheymaybedifferent.Ifavariableisupdatedbyathread,onlythethreadcopyofthevariableischanged.ForexampletheRegularExpressionExtractorPost-Processorwillsetitsvariablesaccordingtothesamplethatitsthreadhasread,andthesecanbeusedlaterbythesamethread.Fordetailsofhowtoreferencevariablesandfunctions,seeFunctionsandVariablesNotethatthevaluesdefinedbytheTestPlanandtheUserDefinedVariablesconfigurationelementaremadeavailabletothewholetestplanatstartup.Ifthesamevariableisdefinedbymultipleelements,thenthelastonetakeseffect.OtherelementssuchastheUserParametersPre-ProcessororRegularExpressionExtractorPost-Processormaybeusedtoredefinethesamevariables.Theseredefinitionsonlyapplytothecurrentthread.Notethatglobalvariablescannotbeupdatedduringatest.ThesetPropertyfunctioncanbeusedtodefineaJMeterproperty.Theseareglobaltothetestplan,socanbeusedtopassinformationbetweenthreads.5.創(chuàng)建一個(gè)Web測試計(jì)劃在這一部分,你將學(xué)會如何創(chuàng)建一個(gè)基礎(chǔ)的測試計(jì)劃來測試一個(gè)Web站點(diǎn),你將會創(chuàng)建5個(gè)用戶向JackrtaHTTP個(gè)用戶*2次請求*重復(fù)2件:線程組,HTTP請求,HTTP請求默認(rèn)值和圖形結(jié)果。要?jiǎng)?chuàng)建更好的測試計(jì)劃,可以參考創(chuàng)建一個(gè)高級web測試計(jì)劃。5.1添加用戶處理每個(gè)JMeter測試計(jì)劃的第一步就是添加線程組元件。這個(gè)線程組會告訴JMeter你想要模擬的用戶數(shù)量,用戶應(yīng)該發(fā)送請求的頻率和應(yīng)該發(fā)送的數(shù)量。下一步來添加一個(gè)線程組:首先選擇這個(gè)測試計(jì)劃,用鼠標(biāo)右鍵點(diǎn)擊然后在得到的菜單中選擇"添加"-->"線程組"。這時(shí)你應(yīng)該看到這個(gè)線程組已經(jīng)在測試計(jì)劃下面了,如果沒有看到,就點(diǎn)擊測試計(jì)劃元件展開這個(gè)測試計(jì)劃樹。選擇它。這時(shí)你應(yīng)該看到JMeter窗口右邊的線程組控制面板了。圖5.1.線程組默認(rèn)值首先給這個(gè)線程組起一個(gè)有意義的名字。在名稱域中,輸入JakartaUsers.下一步,增加用戶的數(shù)量(稱為線程)為5。域Ramp-UpPeriod:,使用默認(rèn)值為0。這個(gè)屬性表示每個(gè)用戶啟動(dòng)的遲延時(shí)間。例如,如果你輸入Ramp-UpPeriod為5將會在5秒結(jié)束前完成啟動(dòng)所有的用戶。所以,如果你有五個(gè)用戶并且Ramp-UpPeriod為五秒,那么開始用戶的延遲就是1秒。(5個(gè)用戶/5秒=1用戶每秒)。如果你設(shè)置其值為0,JMeter將會立即啟動(dòng)你所有的用戶。域LoopCount:取消標(biāo)記為"永遠(yuǎn)"的復(fù)選框選擇并設(shè)置循環(huán)次數(shù)為2。這個(gè)屬性表示你的測試的重復(fù)次數(shù)。如果你設(shè)置為1,JMeter將你的測試只運(yùn)行一次。要讓JMeter不斷的運(yùn)行,你要選擇"永遠(yuǎn)"這個(gè)復(fù)選框。在大多數(shù)的應(yīng)用程序中,你需要手動(dòng)來接受你在控制面板中所做的修改。但在JMeter中,如果你做了修改,控制面板可以自動(dòng)的接受。如果你修改的元當(dāng)你選擇另外一個(gè)樹元件)。見圖5.2為完整的JakartaUsers線程組。圖5.2.JakartaUsers線程組5.2添加默認(rèn)HTTP請求屬性我們已經(jīng)定義了用戶,現(xiàn)在要定義他們的行為了。在這一部分,你將學(xué)會對你的HTTP請求設(shè)置默認(rèn)值。然后在5.3節(jié),用你在這里指定的默認(rèn)設(shè)置來添加HTTP請求元件。首先選擇JakartaUsers(就是剛才的線程組"添加"-->"配置元件"-->"HTTP請求默認(rèn)值"。然后選擇這個(gè)新元件來顯示其控制面板(見圖5.3)。圖5.3.HTTP請求默認(rèn)值跟大多數(shù)的JMeter元件一樣,HTTP請求默認(rèn)值控制面板也有一個(gè)名稱域。在這個(gè)例子中將它保留為默認(rèn)值。下面這個(gè)文本域是Web服務(wù)器的服務(wù)器/IP。對于你創(chuàng)建的測試計(jì)劃,所有的HTTP請求都將發(fā)送到相同的Web服務(wù)器。向這個(gè)域中輸入這個(gè)域名,這是唯一一個(gè)需要我們?nèi)バ薷乃哪J(rèn)值的文本域,其它的文本域都保留它們的默認(rèn)值。HTTP請求默認(rèn)值元件并不告訴JMeter來發(fā)送HTTPHTTP請求所用的默認(rèn)值。見圖5.4完整的HTTP請求默認(rèn)值元件圖5.4.測試計(jì)劃的HTTP默認(rèn)值5.3添加Cookie支持除非你的應(yīng)用程序明確的不使用Cookies,幾乎所有的網(wǎng)站應(yīng)用程序都會使用cookie支持。要添加cookie支持,可以簡單的在你的測試計(jì)劃中給每一個(gè)線程組添加一個(gè)HTTPCookie管理器。這樣確保每個(gè)線程組有自己的cookies,但是共享跨越所有的HTTP請求對象。添加HTTPCookie管理器,簡單地選擇這個(gè)線程組,選擇添加-->配置元件-->HTTPCookie管理器,也可以從編輯菜單或通過右鍵點(diǎn)擊來實(shí)現(xiàn)添加。5.4添加HTTP請求HTTPJakarta網(wǎng)站首頁(),第二個(gè)就是工程向?qū)ЬW(wǎng)頁()。JMeter按照它們在樹的出現(xiàn)的次序來發(fā)送請求。首先給JakartaUsers元件添加第一個(gè)HTTP請求(添加-->取樣器-->HTTP請求)。然后從樹中選擇HTTP請求元件并修改下列屬性(見圖5.5):(取樣器就是sampler)更改名稱域?yàn)?HomePage"。??設(shè)置路徑域?yàn)?/"。記得你不必設(shè)置服務(wù)器名域,因?yàn)槟阋呀?jīng)在HTTP默認(rèn)請求元件中指定了這個(gè)值。圖5.5.Jakarta首頁的HTTP請求下一步,添加每二個(gè)HTTP請求并修改下列屬性(見圖5.6):更改名稱域?yàn)?ProjectGuidelines"。?設(shè)置路徑域?yàn)?/site/guidelines.html"。?圖5.6.Jakarta工程Guidelines頁的HTTP請求5.5添加一個(gè)監(jiān)聽器來瀏覽/儲存測試結(jié)果最后一個(gè)需要添加到測試計(jì)劃的元件是監(jiān)聽器。這個(gè)元件的用途是將所有的HTTP請求結(jié)果存儲在一個(gè)文件中并顯現(xiàn)出數(shù)據(jù)的可視模型。選擇JakartaUsers元件,然后添加一個(gè)"圖形結(jié)果"監(jiān)聽器(添加-->監(jiān)聽器-->圖形結(jié)果).接著,你需要指定一個(gè)文件路徑和輸出文件名。你可以在文件名域中輸入或選擇瀏覽按鈕并選擇一個(gè)路徑然后輸入文件名。圖5.7.圖像結(jié)果監(jiān)聽器5.6登錄一個(gè)web站點(diǎn)在這它不是一個(gè)例子,但是一些網(wǎng)站需要在許可你做某些操作前登錄.在一個(gè)web瀏覽器中,登錄會表現(xiàn)為一個(gè)包含用戶名,密碼和一個(gè)提交按鈕的表單.這個(gè)按鈕產(chǎn)生一個(gè)POST請求,傳遞表單的值作為參數(shù).It'snotthecasehere,butsomeweb-sitesrequireyoutologinbeforepermittingyoutoperformcertainactions.Inaweb-browser,theloginwillbeshownasaformfortheusernameandpassword,andabuttontosubmittheform.ThebuttongeneratesaPOSTrequest,passingthevaluesoftheformitemsasparameters.在JMeter中這樣做,添加一個(gè)HTTP請求,并設(shè)置為POST方法.你還要通過表單知道域的名字和目標(biāo)頁面.通過查看那登陸頁面的代碼可以發(fā)現(xiàn)它們.TodothisinJMeter,addanHTTPRequest,andsetthemethodtoPOST.You'llneedtoknowthenamesofthefieldsusedbytheform,andthetargetpage.Thesecanbefoundoutbyinspectingthecodeoftheloginpage.[如果這比較難做,你可以使用JMeter代理記錄器來記錄登錄順序.Ifthisisdifficulttodo,youcanusetheJMeterProxyRecordertorecordtheloginsequence.]設(shè)置路徑為提交按鈕的目標(biāo).單擊添加按鈕并輸入用戶名和密碼資料.有時(shí)登錄表單包含附加的隱藏域.它們也需要被添加.Setthepathtothetargetofthesubmitbutton.ClicktheAddbuttontwiceandentertheusernameandpassworddetails.Sometimestheloginformcontainsadditionalhiddenfields.Thesewillneedtobeaddedaswell.Figure5.8.SampleHTTPloginrequest6.創(chuàng)建一個(gè)高級web測試計(jì)劃在這章,你將學(xué)到如何創(chuàng)建高級測試計(jì)劃來測試web站點(diǎn)。如果需要一個(gè)基礎(chǔ)的測試計(jì)劃例子,見創(chuàng)建一個(gè)web測試計(jì)劃。6.1用URL重寫處理用戶會話如果你的web應(yīng)用程序使用URL重寫,而不是cookies將需要做一點(diǎn)額外的工作。為了正確響應(yīng)URL重寫,JMeter需要解析從服務(wù)器得到的HTML并獲取唯一的會話ID。利用適當(dāng)?shù)腍TTPURL重寫修改器來完成這些。簡單地在修改器中輸入你的會話ID參數(shù)名,它會找到Id?"被選中,那么最后創(chuàng)建的會話ID將被保存,并且如果HTTP的上次取樣不包含一個(gè)會話ID,它將會被使用。URL重寫例子下載這個(gè)例子.在圖1中展示了一個(gè)使用URL重寫的測試計(jì)劃。注意URL重寫修改器附被添加到簡單控制器,因此確認(rèn)它僅影響簡單控制器下的請求.圖1-測試樹在圖2中,我們看到了URL重寫修改器的GUI,它僅僅有一個(gè)讓用戶指定會話ID參數(shù)名的文本域。有一個(gè)復(fù)選框來指示會話ID將被化為為路徑(以";"隔開),這樣勝過使用一個(gè)請求參數(shù)。圖2-請求參數(shù)6.2使用消息頭管理器HTTP消息頭管理器允許你定制JMeter在HTTP請求消息頭發(fā)送什么信息。這個(gè)消息頭包括像"User-Agent","Pragma","Referer"等屬性。HTTP消息頭管理器像HTTPCookie管理器一樣,如果你因?yàn)橐恍┰蚰悴幌M谀愕臏y試?yán)餅椴煌腍TTP請求對象指定不同的消息頭,可以添加到線程組等級。7.創(chuàng)建一個(gè)數(shù)據(jù)庫測試計(jì)劃在這一部分,你將學(xué)會如何去創(chuàng)建一個(gè)基礎(chǔ)的測試計(jì)劃來測試一個(gè)數(shù)據(jù)庫服務(wù)器。你會創(chuàng)建10個(gè)用戶來給數(shù)據(jù)庫服務(wù)器發(fā)送2次SQL請求。同樣,你也可以讓用戶運(yùn)行他們的測試三次。這樣總的JDBC3你將會用到下面的元件:線程組,JDBC請求,圖形結(jié)果。這個(gè)例子使用了MySQL數(shù)據(jù)庫驅(qū)動(dòng)。要使用這個(gè)驅(qū)動(dòng),它所包涵的.jar文件必須復(fù)制到../lib/directory下(詳情參見JMeter'sClassPath)。7.1添加用戶處理每個(gè)JMeter測試計(jì)劃的第一步就是添加線程組元件。這個(gè)線程組會告訴JMeter你想要模擬的用戶數(shù)量,用戶應(yīng)該發(fā)送請求的頻率和應(yīng)該發(fā)送的數(shù)量。線程組。這時(shí)你應(yīng)該看到這個(gè)線程組已經(jīng)在測試計(jì)劃下了,如果沒有看到,就點(diǎn)擊測試計(jì)劃元件展開這個(gè)測試計(jì)劃樹。選擇它。這時(shí)你應(yīng)該看到JMeter窗口右邊的線程組控制面板了(見下圖7.1)。Figure7.1.ThreadGroupwithDefaultValues首先給這個(gè)線程組起一個(gè)有意義的名字。在名稱域中,輸入JDBCUsers。你將需要一個(gè)可用的數(shù)據(jù)庫,數(shù)據(jù)庫表,和表的用戶使用權(quán)限。在這個(gè)例子中,數(shù)據(jù)庫是'mydb',表名是'Stocks'。接下來,將用戶的數(shù)量(即線程)增加到10。在下一個(gè)Ramp-UpPeriod文本域中,使用默認(rèn)值0。這個(gè)屬性表示每個(gè)用戶啟動(dòng)的遲延時(shí)間。例如,如果你輸入Ramp-UpPeriod為5秒,JMeter將會在五秒結(jié)束前完成啟動(dòng)所有的用戶。所以,如果你有五個(gè)用戶并且Ramp-UpPeriod為五秒,那么啟動(dòng)用戶的延遲就是1個(gè)用戶/5秒=1用戶每秒).如果你設(shè)置其值為0,JMeter將會立即啟動(dòng)你所有的用戶。3。這個(gè)屬性告訴JMeter將你的測試只運(yùn)行一次。要讓JMeter不斷的運(yùn)行,你要選擇"永遠(yuǎn)"這個(gè)復(fù)選框。在大多數(shù)的應(yīng)用程序中,你需要手動(dòng)來接受你在控制面板中所做的修改。但在JMeter中,如果你做了修改,控制面板可以自動(dòng)的接受。如果你修改的元件的名字,樹型菜單當(dāng)你離開控制面板后自動(dòng)更新。(例如,當(dāng)你選擇另外一個(gè)樹元件。)見圖7.2完整的JDBCUsers線程組.圖7.2.JDBCUsers線程組7.2添加JDBC請求JDBC請求的執(zhí)行。首先選擇JDBC用戶元件,點(diǎn)擊鼠標(biāo)右鍵,得到添加菜單,然后選擇添加-->配

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論