jmeter腳本寫
我們在做性能測試時,有時需要自己編寫測試腳本,很多測試工具都支持自定義編寫測試腳本,比如LoadRunner就有很多自定義腳本的協議,比如"C Vuser","Java Vuser"等協議.同樣,Jmeter也支持自定義編寫的測試代碼,不過與LoadRunner不同的是,Jmeter沒有自帶編譯器,需要藉助第三方編譯器才能實現.下面舉一個簡單的Java自定義測試代碼例子,使用Java編譯器編寫測試代碼(Java編譯器可以用Eclipse,JBulider等),實現功能為:在測試前輸入任意一個字元串,然後判斷該字元串的長度是否大於5,如果大於則測試結果成功,否則測試結果位失敗,然後在放到Jmeter中模擬10個用戶測試,同時運行這段代碼,具體實現如下:
1.打開Java編譯器,新建一個項目"TestLength",然後新建一個包"app".
2.從Jmeter的安裝目錄lib/ext中拷貝兩個文件"ApacheJMeter_core.jar"和"ApacheJMeter_java.jar"到"Tester"的項目中,然後引入這兩個JAR文件.(具體的引入方法參考各個Java編譯器的使用方法)
3.在"app"包中新建一個類,名字叫"TestLength",不過這個類要繼承"AbstractJavaSamplerClient"類,如果項目引入步驟二中的兩個文件,就可以找到"AbstractJavaSamplerClient"類了.
4."TestLength"類在繼承"AbstractJavaSamplerClient"類的同時也會繼承四個方法,分別是"getDefaultParameters","setupTest","runTest"和"teardownTest"方法."getDefaultParameters"方法主要用於設置傳入的參數;"setupTest"方法為初始化方法,用於初始化性能測試時的每個線程."runTest"方法為性能測試時的線程運行體;"teardownTest"方法為測試結束方法,用於結束性能測試中的每個線程.
5.具體實現代碼如下:
package app;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import com.passpod.core.t8.*;
/**
* @author樂以忘憂
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class TestLength extends AbstractJavaSamplerClient{
private SampleResult results;
private String testStr;
//初始化方法,實際運行時每個線程僅執行一次,在測試方法運行前執行,類似於LoadRunner中的init方法
public void setupTest(JavaSamplerContext arg0) {
results = new SampleResult();
testStr = arg0.getParameter("testString", "");
if (testStr != null && testStr.length() > 0) {
results.setSamplerData(testStr);
}
}
//設置傳入的參數,可以設置多個,已設置的參數會顯示到Jmeter的參數列表中
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("testStr", ""); //定義一個參數,顯示到Jmeter的參數列表中,第一個參數為參數默認的顯示名稱,第二個參數為默認值
return params;
}
//測試執行的循環體,根據線程數和循環次數的不同可執行多次,類似於LoadRunner中的Action方法
public SampleResult runTest(JavaSamplerContext arg0) {
int len = 0;
results.sampleStart(); //定義一個事務,表示這是事務的起始點,類似於LoadRunner的lr.start_transaction
len = testStr.length();
results.sampleEnd(); //定義一個事務,表示這是事務的結束點,類似於LoadRunner的lr.end_transaction
if(len < 5){
System.out.println(testStr);
results.setSuccessful(false); //用於設置運行結果的成功或失敗,如果是"false"則表示結果失敗,否則則表示成功
}else
results.setSuccessful(true);
return results;
}
//結束方法,實際運行時每個線程僅執行一次,在測試方法運行結束後執行,類似於LoadRunner中的end方法
public void teardownTest(JavaSamplerContext arg0) {
}
}
6.把上面的例子打包,然後把生成的"TestLength.jar"文件拷貝到Jmeter的安裝目錄lib/ext下.
7.運行Jmeter,添加一個線程組,然後在該線程組下面添加一個Java請求(在Sampler中),在Java請求的類名稱中選擇咱們剛創建的類"app.TestLength",在下面參數列表的"testStr"後面輸入要測試的字元串,然後添加一個監聽器(聚合報告),設置一下模擬的用戶數就可以測試了.如果測試不成功,Jmeter會在它自己個輸出框中拋出這個字元串.
通過上面的例子我們可以發現,使用Jmeter自定義Java測試代碼,配合Jmeter自帶的函數,就可以實現出LoadRunner中"Java Vuser"協議的絕大多數功能,而且是沒有用戶數限制和完全免費的(嘿嘿).上面的例子非常簡單,而且沒有任何實際意義,只是一個簡單的Jmeter測試代碼示例,用於拋磚引玉,希望大家一起交流,共同 進步.
2. 使用jmeter錄制腳本及錄制腳本的優化
1.右鍵測試計劃---添加--線程(用戶)--線程組
2.添加HTTP代理伺服器(即把jmeter當做代理伺服器)
3.設置代理伺服器
①設置埠;
②設置Test Plan Creation 中的目標控制器(改為測試計劃>線程組)注意不修改代理伺服器啟動時可能會報錯;
③設置Requests Filtering (請求過濾器),添加建議排除,會根據設置排除模式,排除錄制過程中的某些內容。
④點擊「啟動」按鈕,後會彈出一個證書提示(注意:如果不是管理員使用,會報錯,因為沒有許可權將證書寫入到apache-jmeter-5.1.1\bin下)。
4.打開瀏覽器,設置計算機的代理設置(如圖所示)
5.成功設置代理伺服器後,在瀏覽器中輸入網址訪問,點擊線程組中會有錄制的腳本,因為再Requests Filtering (請求過濾器)設置了,添加了排除模式,所以錄制時有些內容會被過濾。
6.錄製成功後可以,添加察看結果樹,保存腳本後,運行腳本。
7.錄制完腳本後,接下來就是對錄制腳本的優化,可以看出添加的排除模式並沒有完全過濾CSS,可以禁用或刪除無用的css和js(如何判斷有這些內容有沒有用,可以嘗試先禁用掉,然後回放看對腳本有沒有影響,如果禁用或者刪除了,腳本還能運行成功,說明是無用的,否則反之)。
8.添加HTTP信息頭管理器,作用於整個線程組,如果有自己單獨的HTTP信息頭管理器,則優先使用自己的。
9.如果有登錄的腳本時,需要添加cookie管理器(不需要配置,直接添加使用)
3. 淺學Jmeter性能測試:使用代理伺服器錄制腳本
右上角設置->高級->系統->打開您計算機的代理設置->連接->區域網設置->勾選「為LAN使用代理伺服器」->地址輸入:127.0.0.1->端友知口輸入:8888->勾選『』對於本地地址不使用代理伺服器->確定。好敏消
PS:設置代理時要關掉抓包工具,因為它也是一個代理伺服器。
註:jmeter自帶代理伺服器
1、設置代理
啟動Jmeter->測試計劃->右鍵添加「非測試元件」->選擇HTTP代理伺服器->設置埠:8888->Test Plan Creation-> 目標控制器選擇「後面創建的自定義線程組」。
2、創建線程組存放腳本
測試計劃->右鍵添加「Threads」->選擇「線程組」-> 自定義線程組名稱 ->保存。
3、提前設置過濾
通常會碰到錄制完腳本後查看Jmeter有多餘的請求,我們可提前設置過濾去掉不需要的請求。
在HTTP代理伺服器頁面,點擊"Requests Filtering",找到「排除模式」後添加並輸入多個正則表達式 ,每行一個(.*\.php.* 或 .*\.js.* 或 .*\.png.* 或 .*\.gif.* 或 .*\.txt.* )。設置完成後,再重新啟動代理錄制腳本即可。
PS:話說之前學到的正則表達式終於用上了~
4、錄制腳本
在jmeter代理伺服器里「啟動」伺服器->彈出窗口點擊ok->操作瀏覽器里目標網頁->結束錄制需要的模塊後,點擊jmeter「停止」,在Jmeter里查看腳本。
5、優化腳本
錄制完成後,可能還存在一些漏網之魚,可根據實際需要增刪請求或配置。
PS:刪除了多餘的請求;配置了監聽器-查看結果樹後,有些請求失敗了,添加了cookie管理器後全都請求成功。
註:B/S錄制完腳本一定要添加cookie管理器
6、瀏覽器增加證書(如果有需求訪問Https,無可省略)
右上角設置->高級->隱私設置與安全性->證書->受信任的證書頒發機構->導入->在jmeter文件夾 bin 目錄下 選擇證拿亮書(只要開啟過代理伺服器,都會生成證書)。
錄制完成後,一定要記得關閉代理伺服器,否則上不了網。問題來了,如何取消代理伺服器的設置呢?
右上角設置->高級->系統->打開您計算機的代理設置->連接->區域網設置->取消勾選「為LAN使用代理伺服器」->確定。
4. 如何使用Jmeter錄制腳本
1、錄制腳本:(1)選中Test Plan單擊滑鼠右鍵,在彈出菜單中選擇Add->Thread Group;
(2)接下來選中WorkBench單擊滑鼠右鍵,在彈出菜單中選擇Add->Non-Test Elements->HTTP Proxy Server;
(3)在「HTTP Proxy Server」窗口中Target Controller下拉框選擇Test Plan > Thread Group(表示腳本生成在這個線程組下),Grouping下拉框選擇Put each group in a new controller(表示把每組腳本放到一個新的組中,避免生成的腳本雜亂且無法組織);(4)單擊窗口最下方的Start;
(5)打開瀏覽器,設置代理伺服器的設置為localhot,埠號為8080(在「HTTP Proxy Server」窗口中設置了使用8080埠進行偵聽);
(6)在地址中鍵入要錄制頁面的URL對頁面進行操作,Jmeter就會自動把所進行的操作錄製成為腳本了,可以看到Thread Group節點下面多了許多的子節點就是錄制生成的腳本;
(7)操作完畢後在Jmeter中單擊Stop先停止錄制,然後把瀏覽器的代理設置改為原來的設置即可。2、運行及記錄結果設置:
(1)完成腳本的錄制後還需要定義你所需的結果設置才算完成了Test Plan的設置,首先要設置Thread Group(相當於虛擬用戶組)的屬性,單擊Thread Group,在右邊的窗口中設置Number of Thread(相當於虛擬用戶數)為5,Ramp-Up Period(in seconds)為1,Loop Cout選項取消選中Forever,在右邊的框中輸入2。以上設置表示共有5個虛擬用戶,每隔1秒運行一個,迭代2次。
(2)要查看運行的結果還需要加入Listener,選中Thread Group單擊滑鼠右鍵選擇Listener->View Results in Table,通過這個視圖可以查看到每個鏈接的執行情況,包括執行時間和成功與否,再加入Aggregate Report,通過這個視圖可以查看每個Thread Group組的最大、最小和平均響應時間。加入View Results Tree,通過這個視圖可以查看每個鏈接的執行情況,包括發出的請求和伺服器返回的詳細內容。
以上就是錄制和運行的全部內容,如果有更復雜的操作需求,Jmeter也可以修改腳本和參數化變數,因為關於Jmeter的腳本錄制方法是從網上轉載的,不能在下面添加,所以我會另寫一遍關於Jmeter的腳本的修改和參數化變數的文章。
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/li_ok/archive/2006/12/07/1433159.aspx
5. 使用jmeter做性能測試腳本怎麼寫
如果只是簡單的介面類的腳本,完全可以網路一下,然後照著別人的流程走,主要是注意各種配置和參數的意義就行了,這個其實沒多大難度,比loadrunner還簡單。
然後是如果你是需要測試端到端的性能測試,就需要藉助badboy這個工具來錄制腳本,然後導入到jmeter中,後面同樣需要做關聯或者參數化的工作,這個網路一下同樣有。
然後就是自定義的腳本,這個就需要自己有java代碼的編寫功底了、
6. jmeter入門 設置代理伺服器和錄制腳本
第一步:
可以設置瀏覽器代理,本文章推薦使用火狐瀏覽器
在瀏覽器—首選項--網路設置裡面設置代理伺服器
注意:埠號可以自行設置,但是不可以與本機其他代理產生沖突
第二步:
打開jmeter工具,添加非測試原件—HTTP代理伺服器,
第三步:
設置埠號與瀏覽器設置的代理埠保持一致,注意線程組下面記得添加:HTTP Cookie 管理器
第四步:
填寫錄制的過濾條件,可以過濾掉一些不必要的介面
過濾條件可以使用:
*\.(js|css|PNG|jpg|ico|png|gif|woff|ttf|txt).*
這樣基本設置就完成了,可以點擊jmeter的代理伺服器,錄制腳本了;
點擊啟動,復制要測試的網址在火狐瀏覽器上,點擊項目進行正常操作,介面就會自動錄制,錄制的介面可以手動篩除重復的;
注意: (這個已經改過了,不需要改,可以按照步驟去看一下文件哪個位置改了)
常見問題:
錄制的Jmeter腳本回放時,發現輸入的中文解析成亂碼了
解決步驟:
1、打開Jmeter的安裝目錄,進入bin文件夾,編輯文件:jmeter.properties
2、將文件內容#sampleresult.default.encoding=ISO-8859-1
更改為:sampleresult.default.encoding=utf-8
(注意去掉前面的#號注釋,否則不生效)。
7. jmeter 壓力測試腳本怎麼寫
1. 運行jmeter
2. 左邊樹將出現測試計劃、工作台兩根節點。
3. 選擇測試計劃,按右鍵-》添加-》threads(users)線程組
線程組能設置以多少個線程並發做壓力測試。
在」循環次數」設置不選擇永遠,循環次數設置1。
4. 現在先介紹如何設置登錄http請求,選擇線程組,右鍵――添加――》sampler-―》http 請求。
8. JMeter之代理伺服器錄制腳本
在JMeter中可以使用自身就帶的HTTP代理伺服器組件錄制腳本,可以錄制在WEB上的操作,也可以錄制在手機App上的操作。
1、測試計劃內包含的元件
添加元件操作步驟:
創建測試計劃
創建線程組:選中「測試計劃」右鍵 —> 添加 —> 線程(用戶) —> 線程組。
在線程組中,添加配置原件「HTTP Cookie管理器」組件:選中「線程組」右鍵 —> 添加 —> 配置元件 —> HTTP Cookie管理器。
說明:如果錄制的操作包括 用戶登錄操作 ,則需要添加「HTTP Cookie管理器」,添加之後不需要任何配置,錄制後,腳本中便保存用戶登錄的相關信息。
在測試計劃下,添加非測試元件「HTTP代理伺服器」組件:選中「測試計劃」右鍵 —> 添加 —> 非測試元件 —> HTTP代理伺服器。
在HTTP代理伺服器組件下,添加監聽器「察看結果樹」組件:選中「HTTP代理伺服器」右鍵 —> 添加 —> 監聽器 —> 察看結果樹。
最終測試計劃中的元件如下:
點擊運行按鈕,會提示你先保存該腳本,腳本保存完成後會直接自動運行該腳本。
2、HTTP代理伺服器的設置內容
在HTTP代理伺服器組件中,我們需要編輯:
埠: 默認8888,一般使用默認即可。主要不能與本地其他服務的埠號沖突,否則啟動不了。
HTTPS Domains: 我的理解就是,設置代理伺服器的主機IP地址或者域名。因為在我們本地使用,一般就是 localhost 或者127.0.0.1即可,當然不填寫也是可以的。(此填寫的地址一定要能夠連接外網)
設置目標控制器: 也就是錄制的組件存儲到什麼位置。這個一定要選,下圖中選擇了存儲到目標線程組中。
配置完的界面內容,如上圖所示。
3、設置瀏覽器的代理伺服器
每個瀏覽器都可以設置伺服器的代理,以Chrome瀏覽器為例。【設置需要區分是否為區域網】
點擊右上角的設置 —> 高級 —> 系統 —> 最下面的『』打開您計算機的代理設置『』,點擊右側圖標,就可以進入到代理伺服器的設置頁面了。
選要選中手動配置代理伺服器,然後輸入代理伺服器的地址或者域名,還有埠號。
這里的配置,要和上面JMeter的HTTP代理伺服器中的埠和HTTPS Domains的配置要對應上。
這樣的話,瀏覽器中的操作,會先發送到JMeter中的HTTP代理伺服器,在通過網路進行傳輸。這樣JMeter中就可以錄制下我們的操作,生成腳本了。
如下圖所示:
4、錄制腳本
以上內容設置完畢後,在瀏覽器地址欄中輸入要錄制腳本的地址。
然後在JMeter中的HTTP代理伺服器界面,點擊啟動按鈕。
提示:在HTTP代理伺服器界面點擊「啟動」時,Meter將生成自己的證書。證書生成可能需要一些時間,在此期間,GUI將無響應。證書生成完成後,GUI將顯示一個彈出對話框,其中包含根CA證書的詳細信息,證書有效期為7天。該證書需要由瀏覽器安裝,以便接受JMeter生成的主機證書。
如下圖所示:
瀏覽器配置證書: 瀏覽器中導入證書 ,jmeter安裝目錄下的ApacheJMeterTemporaryRootCA.crt
之後開始在網站上進行操作,所有操作發出的請求,都會錄制到JMeter腳本中。
操作完成之後,到JMeter的HTTP代理伺服器中點擊「停止」,然後將瀏覽器的代理設置恢復原樣即可。
不恢復的話,會導致你無法使用瀏覽器訪問外網。
如下圖所示:【錄制時彈出的控制器,不用進行設置,關閉時 點擊 停止 即可】
5、查看錄制的腳本
在JMeter中我們可以看到已經 記錄 了許多請求對應的信息,包括PHP、js、.jpg、.png、.txt等請求。
如下圖所示:
我們可以看到,我們只進行了簡單的幾步操作,卻錄制這么的請求。是因為JMeter錄制很多非關鍵性的請求,這就需要我們進行一些優化。
錄制腳本的優化有兩個步驟:
在錄制的時候,做一些過濾和排除操作。
在錄制後的腳本中手動優化,刪除不需要的組件,增加自己需要的組件。
1)伺服器名稱或IP與目標網站不同的、無關的,可以刪除。
2)js/css/png/jpeg等這類請求刪掉。
3)沒有傳遞任何數據的請求可以屏蔽掉,等流程能回放成功了,這些再刪除。如果回放不成功,再一個一個打開,進行檢查。
6、HTTP代理伺服器的排除模式
在測試腳本中有一些錄制的信息是沒有任何作用的,所以我們在錄制腳本的時候,就可以通過HTTP代理伺服器的排除模式,排除一些不需要的請求信息,如css、gif、png等請求。
例如:
在包含模式添加填上 .*\.jsp,只在請求JSP文件時錄制腳本。
這里通常都是設置JSP或者HTML,可以根據具體情況進行填寫。
在排除模式處填上.*\.js ,在請求js文件時不錄制腳本。
這里通常都是設置js、jpg、png、gif、css等,這些類型文件請求都是不需要錄制的。
當然我們也可以點擊添加建議排除按鈕,會自動生成一個過濾的正則表達式。
如下圖所示:
添加上這些時候,錄制出來的腳本,多餘的累贅會減少很多。
7、保存腳本
腳本錄制完成後,需要進行腳本的保存。
把腳本保存到本地,可以分享給其他成員,進行查看、編輯、回放等操作。
9. JMeter 腳本技術(參數化)
前面我們已經學習過用 Badboy 錄制 webtours 網站 的注冊腳本,錄制下來的腳本可以直接回放並注冊成功一個新用戶(前提是錄制腳本時創建的用戶要先清除,系統用戶名有唯一性)。
如果我們想保留之前注冊成功的用戶,然後繼續創建新的用戶,這種情況應該如何操作呢?大家可能想到去改腳本,把之前注冊用戶時填寫的用戶信息改成新用戶的信息。一個用戶可以這樣操作,但要注冊10個,100個,1000個新用戶呢?
大家想想都應該知道不可能每注冊一個用戶時都去修改一次腳本,這樣牛都會累死的。
我們平時錄制的腳本內容都是固定死在腳本里的,每次運行腳本時使用的是同樣的數據。那我們有沒有辦法把這些「死」的腳本救「活」呢?這個就是我們接下來要學習的腳本參數化。
在操作之前我們先來看看提交用戶注冊信息的請求。
上圖圈出來的內容就是用戶注冊時填寫的信息,我們需要對這部分的內容進行參數化。參數化其實就是把腳本里具體的內容改成調用變數的方式。
既然我們知道了操作的方向,那如何調用變數呢?變數我們現在還沒創建,創建變數有多種方式,可以在測試計劃下創建全局變數,也可以在用戶參數下創建用戶變數,還可以在配置元件下創建數據 CSV 數據文件導入變數。
在這里,我們只學習平時用得比較多的一種方式,在配置元件下添加 CSV 數據文件導入變數。下面我們來看一下配置選項:
名稱: 自定義,給該元件起個名字。
注釋: 自定義,一般寫改元件的作用。
文件名: 表示參數文件存放的路徑,文件不一定是 CSV 格式文件,可以是 CSV 文件 ,也可以是 txt 文件,如 d: est.txt 。這個配置項在 JMeter 一些低的版本裡面是沒有右邊的 瀏覽 按鈕選擇文件的,只能手寫文件路徑。
文件編碼: 讀取文件時的編碼格式,如果為空的話則為本地系統默認的編碼方式,Windows 默認是 GBK,Linux 默認是 UTF-8。
變數名稱: 參數名字,如果有多個就用英文狀態下的逗號分隔,如 name,password 。如果參數名稱為空, JMeter 會默認將參數文件的第一行值作為參數名字,從第二行開始調用參數值 。
忽略首行: 忽略 CSV 文件的第一行,只在上一項變數名稱不為空時使用,如果變數名為空,則第一行必須包含頭信息。
分隔符: 一般標準的 CSV 文件都是採用的逗號作為列分隔符,這里只需要和參數文件的分割方式匹配即可。
是否允許帶引號?: 是否允許參數中包含被引用的值。這個是什麼意思呢?其實 JMeter 允許引用欄位中包含 分隔符 ,如逗號,但引用的欄位要用雙引號括起來。舉個栗子: 1,"2,3",4 ,這樣表示1是一個整體,2,3是一個整體,4是一個整體。另外, JMeter 還允許引用欄位中包含雙引號,如果要包含雙引號請使用 兩個 雙引號 。再舉栗子: "5""6",7 ,這樣表示5"6是一個整體,7是一個整體。
遇到文件結束符再次循環?: 當讀取到參數文件的最後一個值時,是否允許循環取值?
遇到文件結束符停止線程?: 當讀取到參數文件的最後一個值時,是否停止線程?這個配置項和上一個配置項只能有一個是 true。
線程共享模式: 共享模式,設置線程或者線程組對於參數文件的共享方式。有四種共享方式,默認是所有線程共享一個參數文件。
學習了上面的配置操作後,我們來創建一個 CSV 文件並且把腳本中要使用的數據都准備好。
接著,把 CSV 數據文件設置選項設置好。
設置完成後,接下來要做的是導入 CSV 文件並且調用數據到腳本中使用,在 JMeter 裡面調用變數格式是 ${變數名稱} 。
設置腳本循環運行4次,看看能否調用到 CSV 文件數據。
從上圖可以看出,腳本居然能調用到 CSV 文件的數據,說明腳本已經實現了參數化。