(中國軟件與技術服務股份有限公司,北京 100081)
法律智能問答系統(tǒng)[1]由于其專業(yè)知識強、涉及領域廣、用戶群體大、使用便捷、節(jié)約人力等優(yōu)點,近些年被各級法院積極用于滿足人民群眾對法律知識的咨詢需求。此類系統(tǒng)設計[2-3]上對支持的用戶訪問量,存儲的法律知識量,檢索速度,數(shù)據(jù)安全都提出較高要求。采用TLS1.2雙向認證并混合使用http協(xié)議與WebSocket協(xié)議恰好滿足Web法律智能問答系統(tǒng)以上幾點要求。在信息推送機制[4]上,作為較新的WebSocket協(xié)議相比于 Http協(xié)議,建立一次消息連接就可以實現(xiàn)多次消息傳輸?shù)臋C制很大程度地提高了網絡與服務器資源的利用率。采用TLS1.2協(xié)議對WebSocket協(xié)議進行加密所形成的wss協(xié)議(即TLS協(xié)議加密的WebSocket協(xié)議),又進一步保證了傳輸數(shù)據(jù)的保密性和完整性,提高互聯(lián)網數(shù)據(jù)傳輸?shù)陌踩?。針對這種新協(xié)議設計的系統(tǒng)的性能測試,在測試工具選取,測試腳本編制,性能測試場景設計幾方面必然會與傳統(tǒng)的基于http協(xié)議的Web應用系統(tǒng)的性能測試有明顯的區(qū)別,本文將圍繞以上幾個方面系統(tǒng)地闡述此類Web法律智能問答系統(tǒng)[5]進行性能測試的方法。
目前國內主流性能測試工具是Loadrunner與Jmeter[6]。表1從不同角度分析了這兩種工具對Web法律智能問答系統(tǒng)進行性能測試的支持情況。
從表1的對比分析來看,兩種工具同時滿足此類系統(tǒng)性能測試的情況下,從支持的并發(fā)用戶數(shù)量,安裝便捷性及測試成本方面比較,Jmeter3.1更適合作為此類系統(tǒng)的性能測試工具。因此,下文將選用Jmeter3.1工具講述性能測試環(huán)境的搭建。
Jmeter本身并不支持對Html5新增的WebSocket協(xié)議的測試,但它可以通過安裝插件的方式達到對WebSocekt性能測試的支持。為了支持wss協(xié)議測試,需要安裝的插件如下:
JMeterWebSocketSamplers-0.11.1.jar:插件中包含的WebSocket Open Connection、WebSocket Request-Response Sampler、WebSocket Close三個組件。
表1 性能測試工具比較
可以支持wss協(xié)議測試,將此jar包放置到Jmeter目錄的libext目錄下,重新啟動jmeter可以在sampler中看到以上幾個組件。
TLS協(xié)議分為單向認證與雙向認證。單向認證,TLS握手階段只驗證服務器證書的真實性。雙向認證,TLS握手階段客戶端與服務器需要驗證對方證書的真實性?;趯meter的TLS1.2協(xié)議的支持,從Jmeter的源代碼分析HTTPHC4Impl類中創(chuàng)建https調用的是LazySchemeSocketFactory類,此類又是調用HC4TrustAllSSLSocketFactory類,這個類中有明確注釋對X509Certificate的證書全部信任,Jmeter對于服務器端證書采用全部信任,因此對于單向認證的情況,無需單獨創(chuàng)建證書文件,使用Jmeter自動創(chuàng)建的證書即可。而對于雙向認證,Jmeter需要配置客戶端證書。從PC端瀏覽器導出客戶端證書默認是cer格式,移動端使用的是p12格式,這兩種格式的證書要被Jmeter使用,都需要先轉換為jks或keystore格式。
2.2.1 轉換證書格式
轉換方法如下:
使用java的bin目錄下的keytool工具,然后分別使用如下命令:
keytool-importcert-file 原證書路徑原證書文件名.cer-alias 新證書別名-keystore 新證書路徑新證書文件名.jks
keytool -importkeystore-srckeystore 原證書路徑原證書文件名.p12 -srcstoretype PKCS12 -deststoretype JKS-destkeystore 新證書路徑新證書文件名.jks
輸入上述命令后,會繼續(xù)要求用戶輸入證書的訪問密碼,此密碼會在Jmeter調用證書時使用,然后提示添加對證書信任選擇y添加證書信任,此時會在指定的目錄生成符合Jmeter格式要求的新證書。
查看新證書的詳細信息,使用如下命令:
keytool-list-v-keystore 證書路徑證書文件名.jks
2.2.2 Jmeter配置客戶端證書
對客戶端證書有兩種配置方法:一種是修改Jmeter的system.properties文件,一種是將證書配置信息寫入Beanshell設置中。比較兩種配置方法,第一種方法證書的配置信息沒有寫入腳本文件jmx中,當Jmeter測試不同應用,證書需要更改時,或者腳本發(fā)生遷移更換測試環(huán)境時都需要重新配置腳本,第2種方法配置信息寫入腳本文件,避免上述需要修改system.properties文件的問題,因而方便腳本遷移與Jmeter工具的管理,因此建議采用第2種配置方法。
Beanshell設置客戶端證書的具體方法如下:
在Jmeter的【測試計劃】的【線程組】中的添加【BeanShell Sampler】采樣器,在采樣器的script部分添加如下信息:
Importorg.apache.jmeter.util.SSLManager;
System.setProperty("javax.net.ssl.keyStore", "證書路徑證書名稱.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "證書訪問密碼");
SSLManager.reset();
SSLManager.getInstance();
后兩條SSLManager函數(shù)就是完成將證書加載到SSL管理器的操作。
由于Jmeter有緩存機制,Jmeter啟動期間只需要運行一次【BeanShell Sampler】采樣器即可完成對TLS1.2協(xié)議的客戶端證書配置,因此將【BeanShell Sampler】采樣器可以放置到【僅一次控制器】中。配置完上述信息后重新啟動Jmeter,加載測試腳本完成客戶端證書的配置。對于同一應用系統(tǒng)https與wss使用一套TLS1.2認證證書,因此不需要為wss協(xié)議單獨配置證書。將客戶端證書安裝到錄制https腳本的瀏覽器的證書目錄中。
PerfMon的使用主要包含兩部分:ServerAgent、PerfMon,ServerAgent放在監(jiān)控服務器上;PerfMon是在Jmeter上運行的插件,用來收集并展示服務器端各項性能指標。在jmeter-plugins-manage中下載安裝perfmon插件,此部分有成熟的配置方法,在本文中將不做詳細描述。
Jmeter支持多壓力機分布式部署,用于解決性能測試中由于大并發(fā)用戶數(shù)、大數(shù)據(jù)量傳輸引起的壓力機本身資源及網絡帶寬的限制。
圖1 Jmeter分布式部署
圖1是Jmeter分布式部署的網絡拓撲圖,一臺裝有Jmeter的物理機作為控制臺,其它裝有Jmeter的物理機作為壓力機受控制臺調度。修改每臺壓力機的Jmeter的安裝目錄下的bin/jmeter.properties文件的remote_hosts屬性,添加本臺物理機的ip地址與jmeter端口號;修改控制臺的Jmeter的安裝目錄下的bin/jmeter.properties文件的remote_hosts屬性,添加本臺物理機與其他壓力機的ip地址與jmeter端口號,并用逗號隔開。Windows環(huán)境下點擊jmeter-server.bat,完成壓力機的啟動,運行控制臺的jmeter腳本時可以選擇啟動指定壓力機或者啟動全部壓力機。
JMeterWebSocketSamplers-0.11.1.jar是2.1節(jié)Jmeter安裝的用于WebSocket測試的組件,它支持wss協(xié)議的主要采樣器如下:
1)WebSocket Open Connection;
2)WebSocket request-response Sampler;
3)WebSocket Close。
WebSocket Open Connection:支持握手階段,建立WebSocket連接,它只提供消息連接的建立而不負責消息傳輸。WebSocket Close:客戶端主動關閉WebSocket請求。一般在WebSocket request-response Sampler后使用,用于關閉不需要的WebSocket連接,減少服務器連接池的占用。WebSocket request-response Sampler作為wss測試的核心組件,可以完成wss連接的創(chuàng)建與消息傳輸任務。因此本文重點講述此采樣器的使用方法。
WebSocket request-response Sampler支持wss與ws兩種協(xié)議。它的配置頁面如圖2所示,主要由三部分組成,分別是Connnection,Server URL,Data。Connection用于選擇創(chuàng)建連接的方式;Server URL配置測試的協(xié)議種類,服務器的URL及訪問端口;Data用于配置的測試數(shù)據(jù),連接的超時時間。
圖2 websocket請求響應采樣器
使用此采樣器進行性能測試需要注意的地方是Connection部分的連接創(chuàng)建的方式的選擇,不同的選擇適用于不同的性能測試場景,下面將簡述兩種選擇方式的區(qū)別。第1種是使用之前創(chuàng)建完成沒有關閉的Websocket連接,例如使用WebSocket Open Connection或者WebSocket request-response Sample在之前創(chuàng)建成功的Websocket通信鏈路,優(yōu)點是減少連接創(chuàng)建時間請求響應時間更短,節(jié)約服務器的連接資源數(shù);第2種創(chuàng)建新的Websocket連接,優(yōu)點是避免使用已有連接進行請求時出現(xiàn)超時失敗的情況。分析以上兩種連接方式的優(yōu)點,選擇策略如下:當測試的并發(fā)請求數(shù)較少,對響應時間要求較短的情況,選擇第一種使用已創(chuàng)建的連接的方式;當測試的并發(fā)請求較多,對響應的成功率要求較高的情況,選擇第2種方式使用新創(chuàng)建連接。
另外,此采樣器Data部分配置測試數(shù)據(jù)時,支持參數(shù)變量的引用,可以將測試數(shù)據(jù)進行參數(shù)化,使用不同的測試數(shù)據(jù)進行性能測試能更好的模擬真實的用戶使用場景。
圖3是Jmeter測試結果樹控件返回的請求數(shù)據(jù),圖4是Jmeter測試結果樹控件返回的響應數(shù)據(jù)。檢查請求數(shù)據(jù)可以判斷請求數(shù)據(jù)參數(shù)化調用的正確性;抽取部分響應數(shù)據(jù)做響應斷言,可以判斷請求返回的結果的正確性判斷,如何選擇響應斷言數(shù)據(jù),將在4.2節(jié)詳述。
圖3 wss請求體
圖4 wss響應體
https腳本可以利用Jmeter的【HTTP代理服務器】,使用瀏覽器進行錄制。此協(xié)議的腳本的錄制方法較為成熟,此文不予詳述。
從監(jiān)聽器中選擇【jp@gc - Transactions per Second】、【jp@gc - PerfMon Metrics Collector】與【jp@gc - Response Times Over Time】三個組件作為性能指標監(jiān)控組件,【jp@gc - Transactions per Second】用于統(tǒng)計每秒的事務數(shù),【jp@gc - PerfMon Metrics Collector】用于監(jiān)控服務器的CPU,內存,I/O使用情況,【jp@gc - Response Times Over Time】用于監(jiān)控請求的響應時間,同時添加【聚合報告】,用于統(tǒng)計每個事務與請求的響應時間,錯誤率,吞吐量等詳細信息。在腳本編制階段可以添加【察看結果樹】組件用于查看腳本運行的正確性與輔助優(yōu)化測試腳本。
由于Jmeter自身的監(jiān)控插件存在局限性,為了獲取更詳細的服務器監(jiān)控數(shù)據(jù),Linux操作系統(tǒng)可以使用nmon監(jiān)控工具,Window操作系統(tǒng)可以使用系統(tǒng)自帶的資源監(jiān)視器,并配合Jave自帶的Jconsole工具,與各類數(shù)據(jù)庫監(jiān)控工具。這些工具的綜合使用可以較為全面的監(jiān)控系統(tǒng)性能測試過程中服務器的各項指標,查找分析系統(tǒng)的性能瓶頸。
前3節(jié)主要是針對智能法律問答系統(tǒng)使用的協(xié)議wss與https協(xié)議的特殊性,講述性能測試工具的選擇,測試工具的配置與腳本的編寫。本章節(jié)將分析智能法律問答系統(tǒng)的數(shù)據(jù)與業(yè)務特點,重點講述針對此類系統(tǒng)的性能測試的設計方法。
分析智能法律問答系統(tǒng)的設計特點,主要是由自然語言句型識別,分詞處理,關鍵詞檢索幾個主要步驟組成[7]。因此對測試數(shù)據(jù)的選取也是圍繞以上幾個步驟,將作為性能測試輸入數(shù)據(jù)的各類法律問題[8]按以下規(guī)則進行分類:
1)問句中包含系統(tǒng)設定的關鍵詞在系統(tǒng)中的使用頻率;
2)問句中包含的系統(tǒng)設定的關鍵詞的數(shù)量;
3)問句句型的復雜度,分詞和關鍵詞提取的難易程度;
4)問句所屬的業(yè)務領域占系統(tǒng)設定的全部業(yè)務領域的比例。
根據(jù)系統(tǒng)設計的性能指標[9],按每個規(guī)則將測試數(shù)據(jù)分為高中低三類,根據(jù)不同的性能測試場景選取不同類別的數(shù)據(jù)進行測試可以保證數(shù)據(jù)覆蓋的全面性,真實性。
同時也需要考慮系統(tǒng)已存儲的問答對數(shù)量對性能測試的影響,百萬級數(shù)量的問答對的檢索速度會明顯與萬級數(shù)量的問答對的檢索速度不同。所以也要將系統(tǒng)存儲的問答對的數(shù)量級進行等級劃分。
不同的法律領域的問題答案顯然是不同的,但相同領域的法律問題回答必然包含相同的法律詞匯,因此可以選取不同法律領域使用較多的法律詞匯作為問題答案必須包含的關鍵詞,作為系統(tǒng)返回的答案的正確性的判斷[10]。將這些關鍵詞用正則表達式組合在一起,只要系統(tǒng)返回的答案滿足正則表達式的設定規(guī)則就判斷系統(tǒng)返回的結果是正確的。具體操作就是在wss請求體加上正則表達式抽取器,然后再加上此請求體的響應斷言控件,響應斷言判斷正則表達式抽取的內容是否與包含此領域問題設定的關鍵詞,包含則認為系統(tǒng)返回問題答案正確,不包含則認為系統(tǒng)返回問題答案錯誤。
基于wss協(xié)議智能法律問答系統(tǒng)的業(yè)務特點,性能測試主要選擇壓力測試與疲勞測試兩種類型[11]??蛇x取系統(tǒng)的主要業(yè)務場景包括:
1)不同規(guī)則分類的問題響應時間測試:使用4.1節(jié)分類后的測試數(shù)據(jù)進行壓力測試,用于測試系統(tǒng)在法律領域的廣度與問句的復雜度下的性能表現(xiàn)。
2)不同用戶量的測試:不同數(shù)量級的用戶數(shù)使用同類問題進行壓力測試,測試系統(tǒng)的響應時間與用戶承載量。
3)不同問答對存儲數(shù)量的壓力測試:向系統(tǒng)提前灌入預估出使用半年,2年,5年后問答對數(shù)量,分別在系統(tǒng)存儲不同數(shù)量級的問答對情況下,測試常規(guī)用戶量使用下系統(tǒng)的性能表現(xiàn)。
4)長時間運行穩(wěn)定性測試:常規(guī)數(shù)量用戶持續(xù)使用問答系統(tǒng),在12小時,24小時,3*24小時后系統(tǒng)的各項指標的穩(wěn)定性。
5)長時間待機可靠性測試:保持系統(tǒng)應用啟動,在7*24小時,31*24小時期間,利用測試工具間斷性的使用問答系統(tǒng),驗證系統(tǒng)的可用性。
本文針對目前法律領域使用越來越廣泛的智能問答系統(tǒng),系統(tǒng)地闡述了對此類系統(tǒng)進行性能測試的完整方案。從性能測試的工具選擇,測試工具配置,腳本編寫,測試數(shù)據(jù)準備,測試結果驗證及性能場景選取幾個方面,抽取各部分的重點與難點,提出有效的解決方案,為進行此類系統(tǒng)性能測試的人員提供必要的參考。