使用JMeter對(duì)SOAP應(yīng)用進(jìn)行壓力或性能測(cè)試
Appache JMeter 以及 SOAP 協(xié)議簡(jiǎn)述
開(kāi)源測(cè)試工具:Appache JMeter
JMeter 是 Apache 基金會(huì) Jakarta 上的一個(gè)純 Java 開(kāi)源項(xiàng)目,起初用于基于 Web 的壓力測(cè)試(pressure test),后來(lái)其應(yīng)用范圍逐漸擴(kuò)展到對(duì)文件傳輸 FTP, 大型數(shù)據(jù)庫(kù)(JDBC 方式),腳本程序(CGI, Perl 等),Web Services,Java 應(yīng)用系統(tǒng)等方面的測(cè)試。JMeter 本身主要用于性能測(cè)試,如系統(tǒng)壓力等。除此之外,JMeter 能夠?qū)?yīng)用系統(tǒng)做功能測(cè)試和回歸測(cè)試,并且能夠通過(guò)使用帶有斷言的腳本程序來(lái)驗(yàn)證系統(tǒng)然后返回用戶期望的結(jié)果。為了提高工具的應(yīng)用靈活性,JMeter 允許使用正則表達(dá)式創(chuàng)建斷言。正是由于它的靈活性和可擴(kuò)展性,JMeter 逐漸成為流行的開(kāi)源測(cè)試工具。
消息傳遞協(xié)議:SOAP
SOAP(Simple Object Access Protocol)稱為簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議, 是 W3C 定義的一種標(biāo)準(zhǔn)消息傳遞協(xié)議,而它通常被認(rèn)為是 Web Services 的事實(shí)標(biāo)準(zhǔn)。SOAP 協(xié)議使用 XML 語(yǔ)言來(lái)描述,SOAP 消息格式是由 XML Schema 模式定義,因而通過(guò)使用 XML 命名空間使得 SOAP 具有很強(qiáng)的可擴(kuò)展性。
SOAP 是在去中心化(Decentralized)分布式(Distributed)環(huán)境中用來(lái)信息交換的一個(gè)輕量級(jí)協(xié)議。SOAP 本身并不定義像程序模型或?qū)嵤┞暶鞯刃问降恼Z(yǔ)法,而只定義了一種簡(jiǎn)單機(jī)制:通過(guò)提供模塊化的包裝模型編碼機(jī)制來(lái)傳輸應(yīng)用信息。
SOAP 基本結(jié)構(gòu):
1) 信封 Envelope Envelope 元素是 SOAP 中的根元素,并且定義為在 SOAP 消息中必須出現(xiàn)。Envelope 元素中可以包含多可選的 Header 元素,但同時(shí)必須要包含一個(gè) Body 元素。
2) 消息頭 Header Header 可能出現(xiàn)在 SOAP 消息中,是一個(gè)可選元素。如果出現(xiàn)在消息中,那么 Header 一定要是 SOAP 中的第一個(gè)元素。SOAP Header 在 Web Services 中的應(yīng)用越來(lái)越廣泛,例如在應(yīng)用程序的安全性事物中使用標(biāo)準(zhǔn)的消息頭文件,因而成為擴(kuò)展 SOAP 協(xié)議的一個(gè)非常有效的方法。
3)消息體 Body Body 元素是 SOAP 中必須出現(xiàn)的一個(gè)元素,它要包含應(yīng)用程序中的傳輸數(shù)據(jù)或者反饋消息。 應(yīng)用程序中的傳輸數(shù)據(jù)可以是任意形式的 XML 數(shù)據(jù)。SOAP 消息接收者最終來(lái)處理 SOAP Body 體。
JMeter 調(diào)用 SOAP 框架機(jī)制
SOAP 使用 RPC(遠(yuǎn)程過(guò)程調(diào)用)和消息傳遞來(lái)建立通信服務(wù),SOAP RPC 定義了用于表示遠(yuǎn)程過(guò)程調(diào)用和應(yīng)答的協(xié)議。SOAP 協(xié)議本身僅僅定義了消息的交換結(jié)構(gòu),它可以和許多現(xiàn)存因特網(wǎng)協(xié)議結(jié)合在一起使用,其中包括超文本傳輸協(xié)議( HTTP),多用途網(wǎng)際郵件擴(kuò)充協(xié)議(MIME),Java 消息服務(wù)(JMS)以及簡(jiǎn)單郵件傳輸協(xié)議(SMTP)等。目前與 SOAP 應(yīng)用最為廣泛的是 HTTP 協(xié)議和 JMS 協(xié)議,而與之相對(duì)應(yīng)的兩種應(yīng)用就是 SOAP Over HTTP 和 SOAP Over JMS。
根據(jù) JMS 的規(guī)范,消息交換有 2 種方式:消息發(fā)布 / 訂閱方式和點(diǎn)對(duì)點(diǎn)方式。由這兩種交換方式所建立的消息收發(fā)系統(tǒng)都是異步的,即 JMS 客戶機(jī)可以發(fā)送消息而不必等待回應(yīng)。如果應(yīng)用程序測(cè)試者或測(cè)試腳本開(kāi)發(fā)者希望每一條消息都能夠被處理并且消息總是能夠被傳送到指定的位置,那么應(yīng)該使用點(diǎn)對(duì)點(diǎn)消息模型而不是消息發(fā)布 / 訂閱模型。
HTTP(超文本傳送協(xié)議)是屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,是萬(wàn)維網(wǎng) (WWW) 的基礎(chǔ),由于其簡(jiǎn)單快速、靈活、無(wú)連接、無(wú)狀態(tài)的方式,適用于分布式網(wǎng)絡(luò)信息系統(tǒng)。SOAP Over HTTP 應(yīng)用就是指的是遵守 SOAP 編碼規(guī)則的 HTTP 請(qǐng)求 / 響應(yīng),我們可以用簡(jiǎn)單的公式來(lái)對(duì)此作一個(gè)描述:HTTP + XML = SOAP。
JMeter 也同樣提供了兩種 Sampler 分別建立對(duì)這兩種服務(wù)的調(diào)用:Web Services (SOAP) Request 和 JMS Point-to-Point。前者使用互聯(lián)網(wǎng)中最為廣泛的超文本傳輸協(xié)議( HTTP)而后者使用 JMS 協(xié)議,JMS 是 Java 平臺(tái)面向消息中間件的技術(shù)規(guī)范,用它來(lái)提供創(chuàng)建、發(fā)送、接收、讀取消息的服務(wù)。許多廠商目前都支持 JMS,包括 BEA 的 WebLogic JMS service,IBM 的 MQSeries 和 Progress 的 SonicMQ。
圖 1.JMeter 框架基于上述兩種不同的協(xié)議對(duì) SOAP 消息的一次簡(jiǎn)單調(diào)用機(jī)制流程
準(zhǔn)備測(cè)試環(huán)境
當(dāng)精心編寫(xiě)好測(cè)試腳本滿懷信心的去運(yùn)行測(cè)試計(jì)劃時(shí),發(fā)現(xiàn)所有的測(cè)試腳本都 failed 掉了,原因可能是你的測(cè)試環(huán)境中并沒(méi)有完全準(zhǔn)備好。下面給出了準(zhǔn)備測(cè)試環(huán)境的詳細(xì)步驟:
1.環(huán)境變量設(shè)置:JMeter 運(yùn)行在 JRE/JDK 之上,在所有開(kāi)始之前要設(shè)置 JMeter 自動(dòng)檢測(cè)的環(huán)境變量 JAVA_HOME=#JAVA INSTALL DIRECTORY#.
2.JMeter 安裝:本文下面下載欄提供了 Apache JMeter 下載地址,首先要取得最新版本的 JMeter 測(cè)試工具,JMeter 最新版本包含了構(gòu)建和運(yùn)行絕大部分測(cè)試類型的文件,包括 Web (HTTP/HTTPS), FTP, JDBC, LDAP, Java, 和 JUnit 等。
3.準(zhǔn)備 jar 包:JMeter 雖然提供了對(duì) SOAP Over HTTP 以及 SOAP Over JMS 測(cè)試的 Sampler,但是出于對(duì) licence 的考慮它本身并沒(méi)有提供 JMS 需要使用的 jar 包。因此,在運(yùn)行測(cè)試之前需要將這些包復(fù)制到 JMeter 的 lib 目錄下,下面列表對(duì)測(cè)試所需 jar 包作了詳細(xì)說(shuō)明。
4.BeanShell 腳本處理:如果在測(cè)試用例中用到了 BeanShell 腳本,則需要將 BeanShell 包拷貝到 JMeter bin 目錄下。BeanShell 是一種兼容 Java 語(yǔ)言的輕量級(jí)腳本語(yǔ)言,JMeter 腳本中可能會(huì)經(jīng)常用它來(lái)做日志處理,正則表達(dá)式后處理(Post- Process)等。如果在測(cè)試用例中用到了 Mail Visualiser, Mail Reader 以及 Web Services (SOAP) sampler,則需要將 MAIL 包拷貝到 JMeter bin 目錄下。如果在測(cè)試用例中用到了 JMS 相關(guān)的 sampler,則需要將 JMS 包拷貝到 JMeter bin 目錄下。
下面的列表列出了不同的測(cè)試用例所需要的 jar 包,以及其下載地址:
bsh-2.0b4.jarhttp://www.beanshell.org/
mail.jar http://java.sun.com/products/javamail/index.jsp
jms.jarhttp://java.sun.com/products/jms/docs.html
調(diào)試腳本中非常有用的信息日志:jmeter.log 在腳本的調(diào)試和運(yùn)行過(guò)程中,所以的日志信息都會(huì)記錄在 jmeter.log 中,因此你會(huì)在這個(gè)文件中找到比較有用的信息。
注意事項(xiàng)
如果 JMeter 在執(zhí)行測(cè)試腳本過(guò)程中應(yīng)該修改 jmeter.bat 文件中的一些參數(shù),參數(shù)大小可以根據(jù)測(cè)試計(jì)劃合理確定:
HEAP=-Xms256m – Xmx1024m
NEW=-XX:NewSize=128m -XX:MaxNewSize=128m
TENURING=-XX:MaxTenuringThreshold=2
EVACUATION=-XX:MaxLiveObjectEvacuationRatio=20%
PERM=-XX:PermSize=64m -XX:MaxPermSize=64m
DEBUG=-verbose:gc -XX:+PrintTenuringDistribution
此外,在搭建測(cè)試環(huán)境時(shí)還需要更多注意的地方:
JMeter 使用兼容 JKD1.4 或者更高版本
JMeter 無(wú)法識(shí)別 zip 格式的包文件,所以需要的包文件均要求以 .jar 結(jié)尾
JMeter 會(huì)自動(dòng)在 JMETER_HOME/lib 和 ext 目錄下尋找需要的類
對(duì)于使用 CSVDataSet, 那么不要勾選 "Memory Cache"否則數(shù)據(jù)無(wú)法迭代
使用 JMeter 連接 SOAP Over HTTP 服務(wù)
JMeter 提供了 Web Service (SOAP) sampler,用以調(diào)用基于 HTTP 的 Web 服務(wù)。下面詳細(xì)說(shuō)明 SOAP Over HTTP 服務(wù)調(diào)用的各個(gè)屬性。
圖 2.SOAP Over HTTP 服務(wù)調(diào)用的各個(gè)屬性
SOAP Over HTTP 服務(wù)調(diào)用的各個(gè)屬性說(shuō)明:
WSDL URL:指定 WSDL 文件的目標(biāo)地址
Web Methods:選擇本次請(qǐng)求調(diào)用的方法
Protocol:指定使用的協(xié)議,默認(rèn)為 HTTP
Server Name Or IP:服務(wù)的地址(服務(wù)器名或 IP 地址)
Path:調(diào)用方法所在的位置
Timeout:設(shè)置請(qǐng)求超時(shí)限制
SOAPAction:存在于 WSDL 文件中的調(diào)用方法,默認(rèn)不必填寫(xiě)
Soap/XML-RPC Data:請(qǐng)求數(shù)據(jù)
下面是一次完整的 HTTP 請(qǐng)求與 HTTP 響應(yīng) SOAP 數(shù)據(jù):
HTTP Request <soapenv:Envelope> <soapenv:Body> <q0:getEndDate> <ip_id>12</ip_id> </q0:getEndDate> </soapenv:Body> </soapenv:Envelope> HTTP Response <soapenv:Envelope> <soapenv:Header/> <soapenv:Body> <p928:getEndDateResponse> dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2, startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3, endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]], firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2005,MONTH=8, WEEK_OF_YEAR=37,WEEK_OF_MONTH=2,DAY_OF_MONTH=7,DAY_OF_YEAR=250,DAY_OF_WEEK=4, DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0, MILLISECOND=0,ZONE_OFFSET=-18000000,DST_OFFSET=3600000] </p928:getEndDateResponse> </soapenv:Body> </soapenv:Envelope> |
使用 JMeter 連接 SOAP Over HTTP 服務(wù)
JMeter 提供了 Web Services (SOAP) sampler,用以調(diào)用基于 HTTP 的 Web 服務(wù)。下面詳細(xì)說(shuō)明 SOAP Over HTTP 服務(wù)調(diào)用的各個(gè)屬性。
圖 3.SOAP Over HTTP 服務(wù)調(diào)用的各個(gè)屬性
SOAP Over JMS 服務(wù)調(diào)用的各個(gè)屬性說(shuō)明:
QueueConnectionFactory:連接工廠的默認(rèn) JNDI 實(shí)體
JNDI name Request queue:JNDI 請(qǐng)求隊(duì)列名字
JNDI name Receive queue:JNDI 接收隊(duì)列名字
Timeout:請(qǐng)求超時(shí)設(shè)置
Communication style:通訊形式(包括僅僅請(qǐng)求和請(qǐng)求應(yīng)答)
Content:請(qǐng)求信封
JMS Properties:JMS 的一些屬性設(shè)置(對(duì)于 IBM WAS 必須要有 targetService 屬性)
Initial Context Factory:JNDI 的初始會(huì)話工廠
Provider URL:服務(wù)提供地址
下面是一次完整的 JMS 請(qǐng)求與 JMS 響應(yīng) SOAP 數(shù)據(jù):
JMS Request <soapenv:Envelope> <soapenv:Body> <tns0:getAuEmpPositionId> <ev_id>6098</ev_id> </tns0:getAuEmpPositionId> </soapenv:Body> </soapenv:Envelope> JMS Response <soapenv:Envelope> <soapenv:Header/> <soapenv:Body> <p150:getAuEmpPositionIdResponse> <getAuEmpPositionIdReturn xsi:nil="true"/> </p150:getAuEmpPositionIdResponse> </soapenv:Body> </soapenv:Envelope> |
設(shè)計(jì)高效的測(cè)試用例集
壓力測(cè)試或者系統(tǒng)測(cè)試不同于功能測(cè)試,測(cè)試的重點(diǎn)不在系統(tǒng)產(chǎn)品是不是滿足設(shè)計(jì)需求。它所看重的是系統(tǒng)在大的用戶量和負(fù)載情況下的可靠性以及系統(tǒng)響應(yīng) , 它目標(biāo)是測(cè)試系統(tǒng)的執(zhí)行效率,特別是在較短時(shí)間內(nèi)系統(tǒng)負(fù)載快速增長(zhǎng)時(shí)系統(tǒng)的相應(yīng)速度。在實(shí)際的測(cè)試過(guò)程中,大量用戶同時(shí)訪問(wèn)的系統(tǒng)節(jié)點(diǎn)也可能成為產(chǎn)品潛在的效率瓶頸。因此 , 壓力測(cè)試和系統(tǒng)測(cè)試也往往是在功能測(cè)試之后進(jìn)行。
對(duì)于普通的軟件系統(tǒng) , 產(chǎn)品的瓶頸可能會(huì)在數(shù)據(jù)庫(kù)服務(wù)器上,Web 服務(wù)器上,而對(duì)于 SOAP 服務(wù)系統(tǒng)測(cè)試,Web Services 服務(wù)器和 JMS 服務(wù)器是客戶端請(qǐng)求的主要節(jié)點(diǎn) , 同時(shí),主要業(yè)務(wù)邏輯的處理也都分布在這些節(jié)點(diǎn)上,它們很有可能成為系統(tǒng)訪問(wèn)的瓶頸,如果這些節(jié)點(diǎn)出現(xiàn)問(wèn)題,那么對(duì)整個(gè)系統(tǒng)的效率會(huì)有致命的影響,也是壓力測(cè)試和系統(tǒng)測(cè)試要優(yōu)先考慮的。
改進(jìn)測(cè)試策略、測(cè)試方法、測(cè)試過(guò)程,使用高效的測(cè)試用例集,從而保證產(chǎn)品質(zhì)量。這個(gè)是主要目的,也是最直接的目的。一個(gè)高效的測(cè)試用例集應(yīng)包含以及適應(yīng)如下要素:
在什么時(shí)候確定要執(zhí)行系統(tǒng)測(cè)試
如何去檢測(cè)并解決系統(tǒng)性能和負(fù)載問(wèn)題
收集監(jiān)視服務(wù)器性能數(shù)據(jù)(I/O,CPU,MEM)
盡量減少因?yàn)閭€(gè)人配置和某些測(cè)試用例而造成系統(tǒng)出現(xiàn)錯(cuò)誤和瓶頸
所有測(cè)試工作都得到有效協(xié)調(diào)并目標(biāo)一致
當(dāng)已經(jīng)確定了所需的 JMeter Samplers,并且在此基礎(chǔ)上設(shè)計(jì)出一個(gè)通用的測(cè)試計(jì)劃,那么就可以構(gòu)建我們的測(cè)試腳本了。本文的測(cè)試用例以及最終的測(cè)試計(jì)劃也是建立在這些要素之上。
測(cè)試計(jì)劃(Test Plan)描述了測(cè)試運(yùn)行過(guò)程中 JMeter 的執(zhí)行順序、過(guò)程以及步驟,一個(gè)完整的測(cè)試計(jì)劃包括一個(gè)或者多個(gè)線程組 (Thread Groups)、循環(huán)控制器(Loop Controllers)、監(jiān)聽(tīng)器 (Listener)、邏輯控制器(Logic Controller)、定時(shí)器(Timer)、斷言(Assertions)、配置信息(Config Elements)等。
在測(cè)試計(jì)劃中添加一個(gè)用戶定義變量配置元素(User Defined Variables), 可以在里面定義服務(wù)器地址,日志路徑,超時(shí)限制等變量,提供腳本重用。同時(shí)添加兩個(gè)用戶組,一個(gè)是 SOAP Over HTTP Group,一個(gè)是 SOAP Over JMS Group。在每個(gè)用戶組下面分別添加一個(gè)總的循環(huán)控制器(Loop Controller),用以控制腳本循環(huán)次數(shù)。在總循環(huán)控制器下面添加隨機(jī)選擇器(Random Selector)用以隨機(jī)選擇運(yùn)行測(cè)試腳本。下圖是我們整個(gè)的 Test Plan。
圖 4. 設(shè)計(jì)完成之后的 SOAP 測(cè)試計(jì)劃
啟動(dòng) SOAP 服務(wù)測(cè)試
當(dāng)準(zhǔn)備好我們的測(cè)試計(jì)劃之后就可以啟動(dòng)執(zhí)行壓力測(cè)試了,為了記錄測(cè)試結(jié)果和信息,要增加 Listener 來(lái)完成這個(gè)任務(wù)。JMeter 提供了可視化的界面以及統(tǒng)計(jì)報(bào)表來(lái)供我們選擇。這里我們使用表格(Summary Report)的形式來(lái)查看和分析測(cè)試結(jié)果。
你可以通過(guò)下面的步驟來(lái)給每個(gè) Group 增加 Summary Report 監(jiān)視器 :
1. 選中 Test Plan 中要添加 Listener 的 Group 節(jié)點(diǎn),這里我們選擇 SOAP Over JMS Group。
2. 右擊選擇 Add-->Listener-->Summary Report, 界面右邊會(huì)相應(yīng)的出現(xiàn)我們選擇的 Listener 的設(shè)置信息。
在經(jīng)過(guò)一系列工作之后,已經(jīng)完成了整個(gè) Test Plan,現(xiàn)在可以選擇 JMeter 菜單 run-->start 來(lái)啟動(dòng)我們的壓力測(cè)試了。下圖是運(yùn)行過(guò)程中測(cè)試統(tǒng)計(jì)數(shù)據(jù)的實(shí)時(shí)跟新信息。為了增加請(qǐng)求負(fù)載和獲得更有價(jià)值的數(shù)據(jù),我們可以更改線程數(shù)、等待時(shí)間和循環(huán)次數(shù)。
圖 5. 基于吞吐量的測(cè)試結(jié)果報(bào)表(Summary Report)
獲得的經(jīng)驗(yàn)
總結(jié):
使用 JMeter 來(lái)作為測(cè)試工具對(duì) SOAP 協(xié)議的服務(wù)進(jìn)行壓力和系統(tǒng)測(cè)試是一個(gè)很好選擇,選擇 JMeter 來(lái)進(jìn)行 SOAP 測(cè)試具有以下顯著的優(yōu)點(diǎn):首先 JMeter 提供了強(qiáng)大全面的 SOAP 請(qǐng)求 / 接收以及監(jiān)視功能,允許你執(zhí)行、捕獲在客戶端和服務(wù)器端的 SOAP 流量分析。其次,可以使用 JMeter 可以設(shè)計(jì)出高效、易維護(hù)的測(cè)試用例甚至測(cè)試計(jì)劃。最后,我們可以選擇 JMeter 提供的符合我們情況的結(jié)果 Listener,并且可以從這些 Listener 中很容易的分析出系統(tǒng)或者是服務(wù)存在的問(wèn)題和瓶頸。總體上講,我們?cè)?JMeter 測(cè)試框架中構(gòu)建的 SOAP 測(cè)試計(jì)劃很好的完成了對(duì) SOAP 協(xié)議的系統(tǒng)測(cè)試。下面詳細(xì)列出了我們?cè)诒敬螠y(cè)試過(guò)程中獲得的技巧以及經(jīng)驗(yàn)。
測(cè)試工具的選擇
測(cè)試工具在軟件和產(chǎn)品測(cè)試中是必不可少的,包括系統(tǒng)測(cè)試,壓力測(cè)試,性能測(cè)試以及功能測(cè)試。它也會(huì)與要測(cè)試的產(chǎn)品,測(cè)試的領(lǐng)域以及測(cè)試的重點(diǎn)有很大的關(guān)系。因此,選擇一款合適的測(cè)試工具對(duì)高效的完成測(cè)試是至關(guān)重要的。
設(shè)計(jì)高效的測(cè)試計(jì)劃
一個(gè)高效的測(cè)試用例集可以快速的診斷出系統(tǒng)的性能瓶頸。 為此應(yīng)該全面的分析了解要測(cè)試系統(tǒng)的架構(gòu)與應(yīng)用,盡量避免盲目或者重復(fù)的測(cè)試用例,最終來(lái)構(gòu)建效率盡可能高的測(cè)試用例集。
盡量全面的系統(tǒng)監(jiān)控
軟件缺陷和系統(tǒng)性能瓶頸的診斷可能會(huì)需要各個(gè)方面的檢測(cè)數(shù)據(jù),它們對(duì)問(wèn)題的解決會(huì)提供很大的幫助,因此測(cè)試過(guò)程中應(yīng)該有全面的系統(tǒng)監(jiān)控,包括服務(wù)器的各項(xiàng)數(shù)據(jù)(CPU,I/O,MEM), 后臺(tái)數(shù)據(jù)庫(kù)的各項(xiàng)數(shù)據(jù),相應(yīng)時(shí)間以及網(wǎng)絡(luò)流量等。
關(guān)注 SOAP 請(qǐng)求的超時(shí)(Timeout)
基于 SOAP 協(xié)議的請(qǐng)求,無(wú)論是 SOAP Over HTTP 還是 SOAP Over JMS 都會(huì)有請(qǐng)求超時(shí)(Timeout),引起請(qǐng)求超時(shí)的原因可能是多方面的(服務(wù)器的響應(yīng)速度,效率,網(wǎng)絡(luò)帶寬等),合理的分析以及設(shè)置請(qǐng)求超時(shí)能更準(zhǔn)確的掌握產(chǎn)品的性能情況。
posted on 2013-11-06 10:30 順其自然EVO 閱讀(339) 評(píng)論(0) 編輯 收藏 所屬分類: jmeter and badboy