Jmeter介面測試+壓力測試
jmeter是apache公司基於java開發的一款開源壓力測試工具,體積小,功能全,使用方便,是一個比較輕量級的測試工具,使用起來非常簡單。因為jmeter是java開發的,所以執行的時候必須先要安裝jdk才可以。jmeter是免安裝的,拿到安裝包之後直接解壓就可以使用,同時它在linux/windows/macos上都可以使用。 jmeter可以做介面測試和壓力測試。其中介面測試的簡單操作包括做http指令碼(發get/post請求、加cookie、加header、加許可權認證、上傳檔案)、做webservice指令碼、引數化、斷言、關聯(正則表示式提取器和處理json-json path extractor)和jmeter操作資料庫等等。
介面測試 Jmeter-http介面指令碼 一般分五個步驟:(1)新增執行緒組 (2)新增http請求 (3)在http請求中寫入接入url、路徑、請求方式和引數 (4)新增檢視結果樹 (5)呼叫介面、檢視返回值
jmeter 發get請求
jmeter 發post請求
jmeter 新增cookie
需要線上程組裡新增配置元件—HTTP Cookie 管理器
jmeter 新增header 需要線上程組裡面新增配置元件—HTTP資訊頭管理器
jmeter 上傳檔案
jmeter 引數化 入參經常變化的話,則可以設定成一個變數,方便統一修改管理;如果入參要求隨機或可多種選擇,則通過函式生成器或者讀取檔案形成一個變數。所以引數化有三種方式:使用者定義的變數、函式生成器、讀取檔案。
(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後,允許迴圈取值
具體的例子如下所示:
jmeter 斷言 jmeter斷言用來檢測響應返回的結果和我們預期的是否一致。若針對整個執行緒組的話,則線上程組下新增斷言-響應斷言;若只是針對某個請求的話,則在請求下新增斷言-響應斷言。
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左右的版本裝完外掛後能正常使用。 需要在請求下建立後置處理器[email protected] Path Extractor,具體的例項如下所示:
關於json path相關外掛的方法和使用,推薦可以看這篇部落格: http://www.jianshu.com/p/56a607fc0d8f
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資料庫驅動列表如下表所示:
資料庫 | 驅動 | 資料庫url |
mysql | com.mysql.jdbc.Driver | jdbc:mysql://host:port/{dbname}?allowMultiQueries=true |
oracle | org.postgresql.Driver | jdbc:postgresql:{dbname} |
Jmeter-webservice介面指令碼 基本分為五個步驟:(1)先需要通過soapui工具獲取到webservice介面的請求地址、請求報文和請求soapaction。(2)jmeter新建一個執行緒組 (3)執行緒組下建立SOAP/XML-RPC Request,寫入請求url、請求報文、請求soapaction。(3)啟動jmeter,呼叫介面,通過察看結果樹檢視返回值。 soapui獲取資訊的例項如下圖所示:
soapui提交完後,點選raw,可看到soapation,有些介面若沒返回soapation,則jmeter裡也就不用填。
jmeter-webservice指令碼例項如下圖所示:
壓力測試 壓力測試分兩種場景:一種是單場景,壓一個介面的;第二種是混合場景,多個有關聯的介面。壓測時間,一般場景都執行10-15分鐘。如果是疲勞測試,可以壓一天或一週,根據實際情況來定。
壓測任務需求的確認 壓測前要明確壓測功能和壓測指標,一般需要確定的幾個問題:
固定介面引數進行壓測還是進行介面引數隨機化壓測? 要求支援多少併發數? TPS(每秒鐘處理事務數)目標多少?響應時間要達到多少? 壓伺服器名稱還是壓伺服器IP,一般都是壓測指定的伺服器壓測設定 執行緒數:併發數量,能跑多少量。具體說是一次存在多少使用者同時訪問 Rame-Up Period(in seconds):表示JMeter每隔多少秒發動併發。理解成準備時長:設定虛擬使用者數需要多長時間全部啟動。如果執行緒數是20,準備時長為10,那麼需要10秒鐘啟動20個數量,也就是每秒鐘啟動2個執行緒。 迴圈次數:這個設定不會改變併發數,可以延長併發時間。總請求數=執行緒數*迴圈次數 排程器:設定壓測的啟動時間、結束時間、持續時間和啟動延遲時間。壓測結果檢視 執行完後,聚合報告會顯示壓測的結果。主要觀察Samples、Average、error、Throughput。
Samples:表示一共發出的請求數 Average:平均響應時間,預設情況下是單個Request的平均響應時間(ms) Error%:測試出現的錯誤請求數量百分比。若出現錯誤就要看服務端的日誌,配合開發查詢定位原因 Throughput:簡稱tps,吞吐量,預設情況下表示每秒處理的請求數,也就是指伺服器處理能力,tps越高說明伺服器處理能力越好。 壓測結果的分析 有錯誤率同開發確認,確定是否允許錯誤的發生或者錯誤率允許在多大的範圍內;
Throughput吞吐量每秒請求的數大於併發數,則可以慢慢的往上面增加;若在壓測的機器效能很好的情況下,出現吞吐量小於併發數,說明併發數不能再增加了,可以慢慢的往下減,找到最佳的併發數;
壓測結束,·登陸相應的web伺服器檢視CPU等效能指標,進行資料的分析;
最大的tps:不斷的增加併發數,加到tps達到一定值開始出現下降,那麼那個值就是最大的tps。
最大的併發數:最大的併發數和最大的tps是不同的概率,一般不斷增加併發數,達到一個值後,伺服器出現請求超時,則可認為該值為最大的併發數。 壓測過程出現效能瓶頸,若壓力機工作管理員檢視到的cpu、網路和cpu都正常,未達到90%以上,則可以說明伺服器有問題,壓力機沒有問題。 影響效能考慮點包括:資料庫、應用程式、中介軟體(tomact、Nginx)、網路和作業系統等方面。jmeter在linux下進行壓力測試 jmeter 在linux安裝 簡單說下,就是要先安裝jdk,同時再配置環境變數,最後再上傳jmeter壓縮的安裝包,在linux下解壓完安裝包就可以使用了。推薦部落格:http://blog.csdn.net/zhemeteor/article/details/51315874
jmeter在linux執行 進入jmeter下的bin目錄下執行指令碼,未配置jmeter環境變數的條件下,執行的命令:
./jmeter -n -t a.jmx -l res.jtl
其中a.jmx是準備好的jmeter指令碼,res.jtl是測試結果檔案,測試結果檔案可以匯入到jmeter察看結果樹下檢視。
jmeter新增負載機 --------------------- 作者:Test-huhy 來源:CSDN 原文:https://blog.csdn.net/github_27109687/article/details/71968662 版權宣告:本文為博主原創文章,轉載請附上博文連結!