• 軟件測試技術
  • 軟件測試博客
  • 軟件測試視頻
  • 開源軟件測試技術
  • 軟件測試論壇
  • 軟件測試沙龍
  • 軟件測試資料下載
  • 軟件測試雜志
  • 軟件測試人才招聘
    暫時沒有公告

字號: | 推薦給好友 上一篇 | 下一篇

在 JMeter 壓力測試工具中使用變量

發布: 2007-6-01 10:07 | 作者: 網絡轉載 | 來源: 網絡 | 查看: 365次 | 進入軟件測試論壇討論

領測軟件測試網

  Apache JMeter( http://jakarta.apache.org/jmeter/ )是來自 Apache Jakarta 項目的一個壓力測試工具, 目前版本2.0.3, JMeter 支持 HTTP, FTP, SOAP/XML-RPC, JDBC 等多種目標的壓力測試(參見下圖).



  關于 JMeter 的一般使用在它的官方主頁和其它網站可以搜索到不少文章, 但是很少看到如何使用一些動態內容(比如在 HTTP 請求中使用變量作為參數)的文章, 最近因為工作需要, 在這方面做了一些摸索, 總結如下.

0.測試項目概述

 為了嘗試如何使用變量, 我們首先需要建立一個測試項目, 在這里使用了 Buffalo (一種 AJAX 技術, 詳細資料參見 http://www.amowa.net/buffalo/index.html ), 或者可以看一下我下載的這個文件(att:在 JMeter 壓力測試工具中使用變量.Buffalo-info.zip)中的說明和例子. 目前 Buffalo 還不是很穩定, 但是建立一個測試環境已經足夠了, 而且很方便.

我們建立的這個例子叫做 "buffalo-jmeter", 將這個壓縮文件(att:在 JMeter 壓力測試工具中使用變量.buffalo-jmeter.zip)中的 buffalo-jmeter.war 文件復制到 Tomcat(我用的是 Tomcat 5.0.30) 的 webapps 目錄下, 待 Tomcat 自動發布完成之后就可以通過 http://localhost:8080/buffalo-jmeter/ (假設是發布在本地的Tomcat上) 訪問測試頁面(如下圖).

在這個例子中我們假設一個業務: 首先通過 getToken() 獲得一個憑證, 然后通過這個憑證使用 getOrder() 去申請一個訂單, 憑證上存在時間記錄, 如果超過設定的時間(例子中是10秒)后這個憑證就失效而無法用于申請訂單了(在上圖中的對話框正說明了這種情形).


 1.測試中遇到的問題

 首先我們需要知道 Buffalo 其實是一種 XML-RPC 技術, 所以我們可以使用 JMeter 的 SOAP/XML-RPC Request 這個 Sampler 進行測試, 但是為了方便快捷進行測試, 以下兩個問題需要解決:

 如果測試服務器發生變化, 如何方便的一次性改變所有請求的 URL 地址;

 如上一節所述, 10秒鐘后憑證會失效, 因此我們在測試 getOrder() 的時候不能輸入固定的憑證號, 應該每10秒左右獲取一個新的憑證, 這樣操作的難點在于如何自動讓 JMeter 得到新獲得的憑證號并應用到 getOrder() 請求中.

 2.靜態變量(用戶定義的變量)

 JMeter 允許對一個測試計劃(*.jmx)設置用戶定義的變量, 因此我們可以把象 URL 等需要統一修改的值作為變量定義起來(如下圖);
 

變量在使用時可以使用 ${變量名} 的方式引用, 如下圖:
 

3.從 Response 中獲得數據
 可以使用 JMeter 提供的 后置處理器(Post Processers) --> 正則表達式提取器 (Regular Expression Extractor) 從返回的結果中取得數據, 在確定 getToken() 請求的返回值是類似下列的 XML 之后,
<?xml version="1.0" encoding="utf-8"?><burlap:reply xmlns:burlap="http://www.amowa.net/burlap/"> <string>TK1119466440468</string></burlap:reply>

 我們可以使用正則表達式 "<string>(.*)<\/string>" 來提取我們需要的憑證號.
 首先我們可以使用Javascript 正則表達式測試頁面來測試一下這個正則表達式是如何被執行的(如下圖):
 可以看到執行結果中, 我們需要的憑證號處于"array[1]"的位置.
 

這樣使用"正則表達式提取器"(如下圖), 注意圖中的"引用名稱"就可以認為是存放提取出來的數據的變量名:
 

提取出來的變量可以這樣被引用(如下圖), 其中"_g1"代表"group number"(參見 JMeter 的聯機幫助: ... [refname]_g# ... ... and # is the group number, where group 0 is the entire match, group 1 is the match from the first set of parentheses, etc.)
 

4.測試結果分析
 我們使用3個線程同時對測試項目進行壓力測試(如下圖)
 

通過對結果的分析我們看到了提取出來的變量確實在起作用, 而且, 這個變量是每個線程各自獨立的(如下圖)
 

后記

 對原 Buffalo 代碼的修改:
 原來 net.buffalo.server.BuffaloServiceServlet 中在輸出結果 xml 中沒有使用 response.setContentType("text/xml"), 這導致返回的 xml 沒有正確的 ContentType, 進而使 JMeter 無法獲得 Response, 在代碼中加上這句語句才能正確使用 JMeter 進行測試;

 下載的文件 att:在 JMeter 壓力測試工具中使用變量.buffalo-jmeter.zip 中的 net.buffalo.server.BuffaloServiceServlet 是已經修改過這個問題的, 因此可以直接用于測試;

 文件 att:在 JMeter 壓力測試工具中使用變量.buffalo-jmeter.zip 中還包括了上述的 JMeter 測試計劃(Buffalo-test.jmx).

延伸閱讀

文章來源于領測軟件測試網 http://www.anti-gravitydesign.com/

TAG: jmeter 變量 測試 工具 壓力 中使用


關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97