JMeter能夠作接口測試和壓力測試。其中接口測試的簡單操做包括作http腳本(發get/post請求、加cookie、加header、加權限認證、上傳文件)、作webservice腳本、參數化、斷言、關聯(正則表達式提取器和處理json-json path extractor)和jmeter操做數據庫等等。java
通常分五個步驟:(1)添加線程組 (2)添加http請求 (3)在http請求中寫入接入url、路徑、請求方式和參數 (4)添加查看結果樹 (5)調用接口、查看返回值;mysql
(1)JMeter 發get請求linux
(2)JMeter 發post請求web
(3)JMeter 添加cookie:須要在線程組裏添加配置元件—HTTP Cookie 管理器正則表達式
(4)JMeter 添加header:須要在線程組裏面添加配置元件—HTTP信息頭管理器 sql
(5)JMeter 上傳文件mongodb
(6)JMeter 參數化:入參常常變化的話,則能夠設置成一個變量,方便統一修改管理;若是入參要求隨機或可多種選擇,則經過函數生成器或者讀取文件造成一個變量。數據庫
因此參數化有三種方式:用戶定義的變量、函數生成器、讀取文件。json
1> 用戶定義的變量:須要添加配置元件-用戶定義的變量。服務器
2> 函數生成器:須要用到函數助手功能,能夠調用函數生成一些有規則的數據。經常使用的幾個函數有_uuid、_random、_time。
_uuid會生成一個隨機惟一的id,好比在避免java請求重發形成未處理數據太多的狀況,接口請求可加一個惟一的請求id惟一的響應id進行一一對應;隨機數_random,能夠在你指定的一個範圍裏取隨機值;
取當前時間_time,一些時間類的入參可使用,如{__time(,)} 是生成精確到毫秒的時間戳、{__time(/1000,)}是生成精確到秒的時間戳、${__time(yyyy-MM-dd HH:mm:ss,)} 是生成精確到秒的間。
3> 從文件讀取:須要在線程組裏面添加配置元件-CSV Data Set Config,其中Recycle on EOF:設置True後,容許循環取值;
具體的例子以下所示:
(7)JMeter 斷言:JMeter斷言用來檢測響應返回的結果和咱們預期的是否一致。若針對整個線程組的話,則在線程組下添加斷言-響應斷言;若只是針對某個請求的話,則在請求下添加斷言-響應斷言。
(8)JMeter關聯:接口請求之間存在參數調用,爲了保存這個參數,創建jmeter關聯。好比登錄接口和購買商品接口,購買商品接口就須要登錄接口返回的token等登錄信息,
JMeter關聯就能夠保存這個token信息,方便購買商品接口使用。 JMeter關聯能夠經過二種方式來完成,獲取到返回結果中指定的值。它們分別是正則表達式提取器、 json path extractor。
1>正則表達式提取器:若想獲取的返回值未匹配到,能夠把正則表達式兩邊匹配的數據擴大點。
a. 關於正則表達式
():括起來的部分就是要提取的。
.:匹配除換行外的任何字符串。
+:表明+號前面的字符必須至少出現一次(一次或屢次)。
?:表明?前面的字符最多能夠出現一次,在找到第一個匹配項後中止(0次或1次)。
:表明號前面的字符能夠不出現,也能夠出現一次或者屢次(0次、1次或者屢次)
(.*):貪婪模式,匹配儘量多的字符
(.*?)或(.+?):匹配儘量少的字符,一旦匹配到第一個就不往下走了。
b. 關於模板
若想提取多個值的話,好比是a和b這兩個值,則能夠寫成:$1$$2$。不管要提取多少個值,引用名稱就是一個的,好比名稱爲id,${id_go}:獲取整個字符串ab,${id_g1}:獲取的是a,${id_g2}:獲取的是b。
下面有一個具體的實例,以下圖所示:
2> json path extractor:JMeter經過安裝json path extractor插件來處理json串,提取json串中的字段值。
插件的下載地址:https://jmeter-plugins.org/?search=jpgc-json,下載完成,解壓後,直接把lib文件夾放到jmeter相應目錄下面。
特別說明:jmeter 2.xx左右的版本嘗試過沒法使用該插件,在jmeter 3.xx左右的版本裝完插件後能正常使用。
須要在請求下建立後置處理器-jp@gc-JSON Path Extractor,具體的實例以下所示:
(9)JMeter 操做數據庫
操做數據庫基本有四個步驟:(1)導入mysql的jdbc的jar包 (2)建立數據庫的鏈接配置,線程組裏添加配置元件-JDBC Connection Configuration
(3)線程組裏添加jdbc request,寫sql語句 (4)添加察看結果樹,點擊啓動按鈕,就能看到執行的SQL。具體的實例以下截圖所示:
特別說明:JMeter還能夠操做oracle、postgreSQL、msSQL、mongodb等等數據庫,同時不一樣的數據庫,JDBC Connection Configuration填寫的Database url格式和JDBC Driver驅動名稱也不相同。
JMeter數據庫驅動列表以下表所示:
基本分爲五個步驟:(1)先須要經過soapui工具獲取到webservice接口的請求地址、請求報文和請求soapaction。(2)jmeter新建一個線程組
(3)線程組下創建SOAP/XML-RPC Request,寫入請求url、請求報文、請求soapaction。(4)啓動jmeter,調用接口,經過察看結果樹查看返回值。
soapui獲取信息的實例以下圖所示:
soapui提交完後,點擊raw,可看到soapation,有些接口若沒返回soapation,則jmeter裏也就不用填。
JMeter-webservice腳本實例以下圖所示:
壓力測試分兩種場景:一種是單場景,壓一個接口的;第二種是混合場景,多個有關聯的接口。壓測時間,通常場景都運行10-15分鐘。若是是疲勞測試,能夠壓一天或一週,根據實際狀況來定。
壓測前要明確壓測功能和壓測指標,通常須要肯定的幾個問題:
(1)固定接口參數進行壓測仍是進行接口參數隨機化壓測?
(2)要求支持多少併發數?
(3)TPS(每秒鐘處理事務數)目標多少?響應時間要達到多少?
(4)壓服務器名稱仍是壓服務器IP,通常都是壓測指定的服務器;
(1)線程數:併發數量,能跑多少許。具體說是一次存在多少用戶同時訪問
(2)Rame-Up Period(in seconds):表示JMeter每隔多少秒發動併發。理解成準備時長:設置虛擬用戶數須要多長時間所有啓動。若是線程數是20,準備時長爲10,
那麼須要10秒鐘啓動20個數量,也就是每秒鐘啓動2個線程。
(3)循環次數:這個設置不會改變併發數,能夠延長併發時間。總請求數=線程數*循環次數
(4)調度器:設置壓測的啓動時間、結束時間、持續時間和啓動延遲時間。
運行完後,聚合報告會顯示壓測的結果。主要觀察Samples、Average、error、Throughput。
(1)Samples:表示一共發出的請求數
(2)Average:平均響應時間,默認狀況下是單個Request的平均響應時間(ms)
(3)Error%:測試出現的錯誤請求數量百分比。若出現錯誤就要看服務端的日誌,配合開發查找定位緣由
(4)Throughput:簡稱tps,吞吐量,默認狀況下表示每秒處理的請求數,也就是指服務器處理能力,tps越高說明服務器處理能力越好。
(1)有錯誤率同開發確認,肯定是否容許錯誤的發生或者錯誤率容許在多大的範圍內;
(2)Throughput吞吐量每秒請求的數大於併發數,則能夠慢慢的往上面增長;若在壓測的機器性能很好的狀況下,出現吞吐量小於併發數,說明併發數不能再增長了,能夠慢慢的往下減,找到最佳的併發數
(3)壓測結束,·登錄相應的web服務器查看CPU等性能指標,進行數據的分析;
(4)最大的tps:不斷的增長併發數,加到tps達到必定值開始出現降低,那麼那個值就是最大的tps。
(5)最大的併發數:最大的併發數和最大的tps是不一樣的機率,通常不斷增長併發數,達到一個值後,服務器出現請求超時,則可認爲該值爲最大的併發數。
(6)壓測過程出現性能瓶頸,若壓力機任務管理器查看到的cpu、網絡和cpu都正常,未達到90%以上,則能夠說明服務器有問題,壓力機沒有問題。
(7)影響性能考慮點包括:數據庫、應用程序、中間件(tomact、Nginx)、網絡和操做系統等方面。
(1)JMeter 在linux安裝
簡單說下,就是要先安裝jdk,同時再配置環境變量,最後再上傳jmeter壓縮的安裝包,在linux下解壓完安裝包就可使用了;
(2)JMeter在linux運行
進入jmeter下的bin目錄下運行腳本,未配置jmeter環境變量的條件下,運行的命令:
./jmeter -n -t a.jmx -l res.jtl
其中a.jmx是準備好的jmeter腳本,res.jtl是測試結果文件,測試結果文件能夠導入到jmeter察看結果樹下查看。