apatch jmeter是apatch組織開發的基於Java的壓力測試工具。html
JMeter能夠用於對服務器、網絡或對象模擬巨大的負載,來自不一樣壓力類別下測試他們的強度和分析總體性能。另外,JMeter可以對應用程序作功能/迴歸測試,經過建立帶有斷言的腳原本驗證你的程序返回了你指望的結果(爲了最大限度的靈活性,JMeter容許使用正則表達式建立斷言)。前端
特色:java
使用場景:mysql
共同點:均支持如下功能。web
區別:正則表達式
前置條件:安裝JDK。算法
JMeter下載地址:https://jmeter.apache.org/download_jmeter.cgi。sql
通常啓動:解壓,bin目錄下的jmeter.bat便可啓動(避免在有空格的路徑中安裝Jmeter,可能致使遠程測試出現問題)。shell
服務器模式啓動:jmeter-server.bat。容許在遠程節點上以服務器模式運行JMeter,並經過JMeter GUI來控制(分佈式壓力測試)。數據庫
jmeter做爲web服務器和瀏覽器之間的代理,以便捕獲瀏覽器請求和web服務器的響應,容易的生成性能測試腳本,並利用性能測試腳本模擬真實用戶對web服務器的訪問壓力。
腳本生成方式:
jmeter經過JMETER_HOME/lib(公用包)和JMETER_HOME/lib/ext(jmeter元件和補丁,只供jmeter元件使用)目錄中的jar文件加載類。
若是開發了新的jmeter元件,須要將對應jar包放到lib/ext目錄下,jmeter會自動加載這些jar包中的jmeter元件。不放在lib/ext目錄下的元件須要在JMeter.properties文件中定義屬性search_paths。
公用支持jar包(JDBC、JMS實現包、其餘任何支持包),都應被放在lib目錄下。能夠在Meter.properties文件中定義屬性user.classpath屬性定義公用包。
下載安裝好Jmeter後默認的是英文,因此,如何把英文界面換成中文呢?
方法一(一次性設置) :
啓動Jmeter找到 options 》choose language 》chinese(簡體繁體本身選)。這樣設置後界面就變成了中文,可是當咱們下次打開時又恢復了英文,要再次設置,這樣一來就很麻煩。那咱們怎麼設置默認爲中文呢?請看方法二。
方法二 (永久設置):
一、在Jmeter的安裝目錄下的bin目錄中找到 jmeter.properties這個文件,用文本編輯器打開。
二、大概在37行,找到:#language=en將其修改成:language=zh_CN,這樣,再次打開Jmeter就是默認中文了。注意把最前面的註釋#號去掉。
一、在Jmeter的安裝目錄下的bin目錄中找到 jmeter.properties這個文件,用文本編輯器打開。
二、查找並修改屬性爲:jsyntaxtextarea.font.size=30。
二、若是想要設置界面顯示字體,能夠按住Ctrl鍵+鼠標滾動進行字體設置。
Jmeter中有兩種控制器:取樣器(sampler)和邏輯控制器,用這些元件來驅動處理一個測試。
注意:
自動化測試腳本:
必須控件包括:用戶定義的變量、HTTP cookie管理器、用戶參數、線程組、簡單控制器、斷言、debug sampler、查看結果樹。
性能測試腳本:
特有控件:jp@gc - Stepping Thread Group、CSV Data Set Config、jp@gc - Transactions per Second、jp@gc - Response Times vs
Threads、jp@gc - PerfMon Metrics Collector。
若是訪問者使用的瀏覽器不能徹底支持頁面腳本,出現腳本錯誤,並彈框,事實上,腳本錯誤並不會影響網頁瀏覽,所以,該警告無任何做用,能夠在瀏覽器的intenet選項,高級屬性頁,進入到瀏覽標籤,並選中「禁止腳本調試」,之後就不會在收到這種警告了。
經過tools下的add Assertion for selection,對選擇的部分添加檢查點。
創建參數化列表:在 variables中選擇New Variable,添加參數列表。在請求中將請求數據使用${參數名稱}進行替換(在step中右鍵,properties,設置repeat爲按照關鍵字進行循環便可。)
問題:
1,中文可能有亂碼,改下請求中的編碼屬性便可,utf-8或gbk。
2,檢查點中也能夠修改成參數化中的變量。
ODBC;tools-datasource,前提,安裝ODBC的包,並配置數據源。
data source放到腳本最前端。在tools下設置的Data Source拖到腳本最前端,由於是按順序執行的。
tools---run background thread,設置併發數,每一個併發之間的間隔時間等。
view---report。
和LR同樣,對請求使用toggle break point,進行添加/取消斷點,進行調試。
分組:
不對樣本分組:全部請求所有羅列。
在組間添加分隔:加入一個虛擬的一分割線命名的動做。
每組放入一個新的控制器:執行時按控制器給輸出結果。(自動化經常使用)
只存儲每一個組的第一個樣本:保存第一次url請求。
put each group in a new transaction controller:(性能經常使用)。
步驟:
每一個元件的層次結構,判斷每一個元件的做用域。若是在同一做用域範圍內有多個同一類型的元件,則這些元件按照他們在測試計劃中的上下順序依次執行。
前置處理器、後置處理器和斷言等原件功能對取樣器做用,所以,若是他們的做用域內沒有任何取樣器,則不會被執行。
1.badboy中參數化。
2.JMeter裏參數化。
前置處理器-用戶參數。
利用配置元件-cvs data set config(利用文件進行參數化)。
隨機參數:選項-函數助手,random。
概念和LR中的同樣,注意集合點位置,和LR同樣,要放到集合的操做以前。
只對最靠近的下一個請求起做用。
和LR中的檢查點同樣,就是斷言中的響應斷言。
和LR中的一致。關聯方式:正則表達式,Xpath(通常XML的時候用的多)
什麼地方須要關聯?
回放腳本,看是否正確,數字+字母混合組合(如session,cookie等),找開發確認。
關聯步驟:
須要關聯哪一個參數?
參數在哪一個請求後產生的?
在參數請求後使用正則提取。
添加-後置處理器-正則表達式提取器:
正則表達式:正則須要在小括號裏面寫。
模板:若是正則表達式去了不止一個參數,則須要指定參數組別,$1$表示取第一個值,$2$表示取第二個值。
匹配數字:0隨機,-1取全部值,1,2,。。。以數組形式存儲。
jmeter圖形監控,相比LR相對較弱。能監控Windows或Linux嗎?能夠。
下載地址:https://jmeter-plugins.org/downloads/all/
步驟:
1.JMeterPlugins.jar:將該包複製到JMeter的lib目錄下的ext目錄下,從新啓動JMeter。(查看添加-監聽器中出現JP開頭的則加載成功)
2.將serverAgent目錄及下面的文件拷貝到咱們測試的服務器上,而後點擊打開(Linux打開的是.sh,Windows點擊的是.bat),默認端口4444。
3.添加-監聽器-jp@gc-PerfMon Metrics Collector。添加監聽信息便可。
背景:XX網站,環境:Windows,
需求:併發登陸性能測試。
場景:1S增長2個線程,分別看20,40,60併發下的表現;
監控:成功率、響應時間、標準差、CPU、MEM、IO等;資源監控須要在Windows下部署agent(server agent)。
步驟:
1,badboy錄製,導入jmeter;
2,參數化,檢查點,集合點;
3,指標監控,資源控制;
4,報告(可導出到xls,自行生成報表)。
FTP使用用戶分類:real用戶、guest用戶、anonymous(匿名)用戶
FTP傳輸方式:ASCII,二進制。
傳輸細節:TCP/IP協議中,FTP標準TCP端口號爲21,Port方式數據端口爲20。FTP的任務是從一臺計算機將文件傳送給另一臺計算機,不受操做系統的限制。
工做方式:Standard(PORT,主動方式),Passive(PASV,被動模式)。
服務方式:
一、上傳一個文件到服務器(PUT)
二、下載一個文件本地(GET)
配置(FTP request):
服務器名稱或IP:填寫FTP的IP
remote file:遠程路徑
local file:本地文件
需求:測試用戶表(select)
環境準備:MySQL驅動(mysql connect-java.jar),jmeter-JDBC配置,jmeter-JDBC請求。
步驟:
1,測試計劃中加入jar包。(添加目錄或jar包到classPath)。
2,JDBC配置:添加JDBC connection Configturation。
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc?userUnicode=true&characterEncoding=utf-8&autoReconnect=true&allowMultiQueries=true(allowMultiQueries=true:表示支持一次運行多條sql語句)
username=root
password=root
3,添加JDBC request:選擇query type,輸入SQL語句。
4,添加斷言結果,監聽器(summary report)。
若是須要實現多個不一樣的用戶使用不一樣的SQL,能夠經過把整條SQL語句參數化來實現。例如,把SQL語句放在CSV文件中,而後在JDBC request的query中使用參數代替${SQL_Statement}。
原理:和LR的agent差很少。jmeter由Java開發,耗內存,CPU,因此大併發下還須要分佈式。
步驟:
1,關閉防火牆。
2,在所要運行jmeter並做爲負載生成器的機器上安裝jmeter,並肯定其中一臺機器做爲主的controller,其餘機器做爲agent,而後運行全部agent機器上的jmeter-server文件。
3,在controller機器的jmeter的bin目錄下,找到jmeter.properties的remote_hosts中,修改對應的IP和端口。
4,啓動controller機器上的jmeter應用,選擇菜單「運行」--->「遠程啓動」來分別啓動agent,也能夠直接選擇「遠程所有啓動」來將全部的agent啓動。
經常使用監聽器:
斷言結果:
查看結果樹:
聚合報告:
用表格查看結果:
圖形結果:
aggregate graph:
指標(時間單位都是毫秒):
label:定義HTTP請求名稱;
samples:本次場景中一共完成了多少個請求;
average:平均響應時長;
median:響應時間中值50%用戶的響應時長;
90%Line:90%用戶響應時間;
Min:訪問頁面最小響應時長;
Max:訪問頁面最大響應時長;
error:出錯率(錯誤請求數量/請求總數量);
throughput:吞吐量(默認表示每秒完成的請求數);
KB/sec:流量(每秒從服務器端接收到的數據量)。
jtl文件分析
在性能測試過程當中,每每將結果保存在一個文件中,既能夠保存測試結果,也能夠爲往後性能測試報告提供更多的素材。jtl文件能夠提供多種格式的編寫,而通常咱們都是將其以csv的格式記錄。
在監聽器中的configure能夠配置對應的保存字段信息(建議勾選:save field name,save assertion failure message),指定對應保存位置便可。
此時文件會有以下項:timeStamp,elapsed,responseCode,responseMessage,ThreadName,dataType,success,failureMessage,bytes,Latency
請求發出的絕對時間,響應時間,請求的標籤,返回碼,返回消息,請求所屬的線程,數據類型,是否成功,失敗信息,字節,延遲。
windows環境下的可使用performer(性能監視器)工具。
持續集成:團隊成員常常集成他們的工做,每次集成都經過自動化構建(包括編譯、發佈、自動化測試)來驗證,從而儘快的發現集成錯誤。大大減小集成的問題,讓團隊儘快的開發內聚的軟件。
Jenkins,基於Java的持續集成工具,用於監控持續重複的工做,包括持續的版本發佈/測試項目,監控外部調用執行的工做。
項目構建:經過構建工具對多個項目文件進行統一的編譯和運行,好比對Jmeter腳本的批量運行。
ant:是一個將軟件編譯、測試、不熟等步驟聯繫在一塊兒加以自動化的工具,大多用於Java環境中的軟件開發。
ant下載安裝:
下載後解壓到任意文件,配置Windows環境變量。
ANT_HOME:
path:;ANT_HOME/bin
classpath:ANT_HOME/lib
dos命令下:ANT_HOME/bin/ant - version
jenkines下載:
解壓後放在一個磁盤空間大的地方,而後點擊setup.exe安裝完成後,在瀏覽器中輸入localhost:8080(默認爲8080端口,若是被佔用,修改Jenkins安裝目錄下的配置文件jenkines.xml中的httpPort=8080)。
Jenkins+ant+Jmeter自動化測試平臺搭建:
步驟:
1,錄製Jmeter腳本;
2,將Jmeter安裝目錄下的extras目錄下的「ant-jmeter-1.1.1.jar"這個jar包放在ant的安裝目錄的lib目錄下;
3,配置Jmeter的extras目錄下build.xml文件。(該配置文件做用爲使用ant來批量構建Jmeter下XX文件夾裏面的全部腳本,並按照指定格式來生成報告);
4,使用ant編譯驗證Jmeter的build文件(將配置好的build文件放在ant目錄的bin目錄下)。進入ant目錄的bin目錄下,使用命令ant -filename build文件名.xml;
5,部署到持續集成平臺Jenkins。(選擇ant的build文件進行集成)。
一、在excel中維護用例,包含域名、url、方法(get仍是post)、 參數 、預期結果(能夠是多個),而後轉化程csv格式,這樣一來咱們只須要在excel中維護咱們的用例就行了(固然若是須要,能夠添加其餘字段,好比標識字段,其值爲true,標識執行該用例,不然不執行)
二、添加一個CSV Data Set Config,把文本路徑填進去;
三、添加BeanShell PreProcessor和BeanShell PostProcessor,主要 目的是爲了處理中文亂碼,在script中輸入:prev.setDataEncoding("utf-8")。
jmetetr自帶有兩個函數
${__javaScript(encodeURIComponent('${token}'))}
${__urlencode('${token}'))}
咱們藉助這兩個函數來實現,這樣在變量或者csv中填寫中文,在請求中調用這兩個函數來編碼;
四、添加if控制器,根據方法值,來判斷執行get仍是post的請求條件設置爲:"${mymeth}"=="post"
五、設置斷言,判斷咱們的結果是否正確,
六、根據用例數,設置循環次數
七、運行,查看結果
一、問題:在csv中數據爲json格式的數據,在jmeter中沒法完整的取值
分析:json格式數據,中間有逗號,咱們都知道csv是根據逗號來分割的,這會致使咱們取值錯位。
解決方法:在CSV Data Set Config下將【Allow quoted data?】設置程true便可。
二、URL回寫處理用戶對話:使用HTTP URL Re_writing modifier,進行URL參數回寫。
三、MD5數據加密:有時候咱們請求的參數可能須要加密,好比登陸接口中的密碼可能須要通過md5加密,
第一種方法:這種方法比較簡單,jmeter內置了一個md5的函數,能夠直接使用。其中參數username是用戶名,正常填寫,password是密碼通過md5加密若是沒有此函數,就安裝下。
而後使用${_MD5(密碼)}
第二種方法:須要有必定的編程技術,利用beanshell完成,大體步驟以下:
一、導出md5的算法爲jar包,能夠找開發幫忙完成
二、把該jar包copy到jmeter的lib/ext文件目錄下
三、jmeter裏新建beanshell sampler,並編寫代碼
import hehe.md5.Str2MD5;//包名,不知道爲開發
String res = newStr2MD5().MD5("xiaoqiang");//new一個對象出來並調用方法獲取加密後的返回
System.out.println(res);//打印結果
vars.put("md5",res.toString());//把加密後的數據保存到md5這個變量裏,供在jmeter裏使用
引用來源:http://blog.51cto.com/xqtesting/1604820
步驟:
一、打開jmeter,建立一個線程組;
2 、鼠標右鍵單機線程組,建立一個jdbc connection configuration: 對數據庫的地址、用戶名和密碼進行填寫;
3 、建立用戶參數:可根據要插入數據中,不一樣字段;建立參數函數: 函數的產生,由函數生成器產生, 不一樣函數的產生: 也能夠用計數器當作函數使用;
4 、線程組裏面添加一個jdbc request: 在jdbc request裏面添加sql語句: 其中,對字段有特殊要求的(即:字段被作參數化,使用函數的字段),用特定"${你的參數}"格式,在SQL中進行體現;
5 、添加聚合報告和查看結果樹,根據本身須要的數量級,進行查數據操做:這樣就能夠進行數據的插入了。
心得:
一、小數據量的狀況下,使用java經過接口或者直接插數據,跟使用jmeter應該時間上差很少,可是到達百萬級以上的數據量,使用jmeter多線程,速度會明顯快不少。
二、jmeter的操做比較簡單,若是沒有現成的工程,搭建環境比較麻煩,調試代碼有點煩。可是用jmeter的話,只須要一個簡單的sql,幾步操做步驟,就能夠完成任務,優點比較明顯。
引用來源:https://www.cnblogs.com/wuyonghuan/p/7479582.html
引用來源:http://blog.51cto.com/xqtesting/1947396
引用來源:https://www.cnblogs.com/heiyexiaoguai/p/5859200.html