基於jmeter的java請求的二次開發
常用的方法:
①、addArgument("name", "value") 定義參數
②、sampleStart() 定義事務的開始,類似於LR的lr_start_transaction,和LR一樣事務間不要放無關代碼
③、sampleEnd() 定義事務的結束,類似於LR的lr_end_transaction
④、setSuccessful(true、false) 設置運行結果的成功或失敗,Jmeter統計成功失敗的次數,在聚合報告中能夠體現。
二、實例介紹:
1、操作步驟:
◆ 用idea新建一個普通的java項目
◆ 引入jmeter的lib目錄下的所有的jar包
◆ 編寫測試類
◆ 測試類測試通過后,把項目導出為jar包放到 jmeter lib/ext目錄下
◆ 啟動jmeter,新建java請求,選擇你編寫的測試類,編寫jmeter的測試用例
2、idea新建項目: file->new project->選擇sdk->java ee
3、引入jmeterlib下的jar包:File –> Project Structure–> Modules->Dependencies -> + 選擇Library 選擇對應的jmeter目錄下的lib
4、編寫測試類
待測試的類
public class SercertGenerate { public String generate(String[] args) { String key = args[0]; String secret = args[1]; String method = args[2]; String path = args[3]; String gmtDate = getGMTDate(); System.out.println(gmtDate); String signStr = "date: " + gmtDate + "\n" + method + " " + path + " HTTP/1.1"; return signStr; } public String getGMTDate() { DateFormat dateFormat = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss 'GMT'", Locale.US); dateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); return dateFormat.format(Calendar.getInstance().getTime()); } // public static void main(String[] args) { // // String[] strarray = {"7930665351","31d5b2fa00c64b25b6db60434e51ecd3","GET","/test?test=1"}; // System.out.println(generate(strarray)); // // // // } }
測試類
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient; import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext; import org.apache.jmeter.samplers.SampleResult; import org.apache.jmeter.config.Arguments; public class SercertGenerateTest extends AbstractJavaSamplerClient { private String key; private String secret; private String method; private String path; private String gmtDate; private String resultData; /* * 通過getDefaultParameters()可以來定義入參 * * */ public Arguments getDefaultParameters() { //定義屬性對象,用來添加GUI參數 Arguments params = new Arguments(); params.addArgument("key", ""); params.addArgument("secret", ""); params.addArgument("method", ""); params.addArgument("path", ""); return params; } //每個線程測試前執行一次,做一些初始化工作; public void setupTest(JavaSamplerContext arg0) { } //開始測試,從arg0參數可以獲得參數值; public SampleResult runTest(JavaSamplerContext arg0) { key = arg0.getParameter("key"); secret = arg0.getParameter("secret"); method = arg0.getParameter("method"); path = arg0.getParameter("path"); SampleResult sr = new SampleResult(); sr.setSampleLabel("Java request"); try { sr.sampleStart();// jmeter 開始統計響應時間標記 SercertGenerate sercertGenerate = new SercertGenerate(); // 通過下面的操作就可以將被測方法的響應輸出到Jmeter的察看結果樹中的響應數據里面了。 gmtDate = sercertGenerate.getGMTDate(); String[] strarray = {key,secret,method,path}; resultData = sercertGenerate.generate(strarray); if (resultData != null && gmtDate != null) { sr.setResponseData("日期結果是:" + gmtDate + "加密結果是:" + resultData, null); sr.setDataType(SampleResult.TEXT); } System.out.println(resultData); sr.setSuccessful(true); } catch (Throwable e) { sr.setSuccessful(false); e.printStackTrace(); } finally { sr.sampleEnd();// jmeter 結束統計響應時間標記 } return sr; } //測試結束時調用; public void teardownTest(JavaSamplerContext arg0) { // System.out.println(end); // System.out.println("The cost is"+(end-start)/1000); } public static void main(String[] args) { // 測試測試類是否有問題,打包的時候需要注釋掉 Arguments params = new Arguments(); params.addArgument("key", "7930665351"); params.addArgument("secret", "31d5b2fa00c64b25b6db60434e51ecd3"); params.addArgument("method", "GET"); params.addArgument("path", "/test?test=1"); JavaSamplerContext arg0 = new JavaSamplerContext(params); SercertGenerateTest test = new SercertGenerateTest(); test.setupTest(arg0); test.runTest(arg0); test.teardownTest(arg0); } }
5、idea導出jar包:File > Project Structure > Artifacts + > JAR > Empty 選擇你的項目源文件的模塊(注意:這里不是選擇的web這個模塊) Build > Build Artifacts... > sampleName > Build/Rebuild
6、jar包放到jmeter的lib/ext目錄后,啟動jmeter,新建java請求
原文:https://blog.csdn.net/haiweizhourong/article/details/82153991