自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JMeter進(jìn)階—詳解Java請(qǐng)求關(guān)于事務(wù)的操作

開發(fā) 前端
Jmeter通過(guò)Java請(qǐng)求可以實(shí)現(xiàn)該需求(這樣就可以處理一些公司自定義的協(xié)議了,開發(fā)提供協(xié)議接口,然后我們通過(guò)java sampler進(jìn)行調(diào)用)。

這篇文章中有一個(gè)問(wèn)題,在方法public SampleResult runTest(JavaSamplerContext arg0) 中只對(duì)一個(gè)類的一個(gè)api 進(jìn)行調(diào)用,如果需求是在jmeter中對(duì)多個(gè)類的多個(gè)api進(jìn)行調(diào)用該如何實(shí)現(xiàn)呢?同學(xué)們會(huì)說(shuō),簡(jiǎn)單呀,我們創(chuàng)建多個(gè)類然后分別繼承AbstractJavaSamplerClient就可以了呀!這樣做當(dāng)然可以,但是這要?jiǎng)?chuàng)建太多的類啦,Jmeter提供了方法可以實(shí)現(xiàn)事務(wù)操作,即 在一個(gè)runTest 方法中創(chuàng)建一個(gè)事務(wù),然后一個(gè)事務(wù)中包括多個(gè)請(qǐng)求,話不多說(shuō)直接上代碼

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;
public class DemoTransaction extends AbstractJavaSamplerClient {
private SampleResult sr;

public static final String PARAM_PARA1 = "para1";
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("para1", "");
return params;
}
public SampleResult runTest(JavaSamplerContext arg0) {
/**創(chuàng)建事務(wù)demo**/
this.sr = new SampleResult();
this.sr.setSampleLabel("demo ");
this.sr.sampleStart();

/**創(chuàng)建事務(wù)demo中的第一個(gè)子請(qǐng)求**/
SampleResult result1= new SampleResult();
result1.setSampleLabel("demo1");
result1.sampleStart();

/**寫子請(qǐng)求的具體邏輯,這里用等待時(shí)間代替**/
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**寫子請(qǐng)求的具體邏輯,這里用等待時(shí)間代替**/

this.sr.addSubResult(result1,false); //重點(diǎn)把子請(qǐng)求的測(cè)試結(jié)果放到事務(wù)中
result1.sampleEnd(); //子請(qǐng)求1結(jié)束
/**創(chuàng)建事務(wù)demo中的第二個(gè)子請(qǐng)求**/
SampleResult result2= new SampleResult();
result2.setSampleLabel("demo2");
result2.sampleStart();
/**寫子請(qǐng)求的具體邏輯,這里用等待時(shí)間代替**/
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**寫子請(qǐng)求的具體邏輯,這里用等待時(shí)間代替**/

result2.setSuccessful(true);
this.sr.addSubResult(result2,false); //重點(diǎn)把子請(qǐng)求的測(cè)試結(jié)果放到事務(wù)中
result2.sampleEnd(); //子請(qǐng)求2結(jié)束

/**判斷子請(qǐng)求是否都成功執(zhí)行,如果其中一個(gè)失敗,則認(rèn)定事務(wù)執(zhí)行失敗**/

if( result1.isSuccessful() & result2.isSuccessful())
{
this.sr.setSuccessful(true);

}else {
this.sr.setSuccessful(false);

}
/**判斷子請(qǐng)求是否都成功執(zhí)行,如果其中一個(gè)失敗,則認(rèn)定事務(wù)執(zhí)行失敗**/

this.sr.sampleEnd(); //事務(wù)結(jié)束

return this.sr;
}

public void setupTest(JavaSamplerContext context) {
super.setupTest(context);

}

public void teardownTest(JavaSamplerContext context) {
super.teardownTest(context);
}
}

使用JMeter 5.x API

這里需要強(qiáng)調(diào)的是方法 addSubResult(result2,false) 這個(gè)方法是在jmeter 5.x 才提供的(4.x中是addSubResult(result2)), 第一個(gè)參數(shù)是傳入的result值,第二個(gè)參數(shù)是是否把子線程改名字,jmeter 5.x的maven配置如下,

<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>5.5</version>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>5.5</version>
</dependency>

使用這個(gè)方法才能實(shí)現(xiàn)——在聚合報(bào)告中顯示事務(wù)中子請(qǐng)求的響應(yīng)時(shí)間和處理能力

把java文件打包放到\lib\ext 目錄下,然后添加java sampler ,選擇類DemoTransaction,運(yùn)行測(cè)試,結(jié)果如下:

在查看結(jié)果樹中可以看到事務(wù)demo包括了兩個(gè)子請(qǐng)求demo1和demo2

在聚合報(bào)告中只有demo的整體信息,我們看到實(shí)例中demo1 和demo2 分別等待1s和0.5s,而下圖中Average是1500毫秒,這點(diǎn)證明事務(wù)的響應(yīng)時(shí)間等于兩個(gè)請(qǐng)求之和

測(cè)試報(bào)告優(yōu)化方案

上面的聚合報(bào)告是有缺陷的,沒(méi)有列出每一個(gè)子請(qǐng)求的響應(yīng)時(shí)間和處理能力!目前我還沒(méi)有通過(guò)編碼來(lái)搞定這個(gè)問(wèn)題,但是我們可以通過(guò)其他方式實(shí)現(xiàn),即在測(cè)試過(guò)程中,把測(cè)試結(jié)果寫到一個(gè)文件中,然后測(cè)試結(jié)束后打開這個(gè)文件就可以了!

再次強(qiáng)調(diào)!想要實(shí)現(xiàn)該功能一定要使用jmeter 5.x的ApacheJMeter_java和ApacheJMeter_core,本人親測(cè)在jmeter 4.x中無(wú)法實(shí)現(xiàn)該功能!

責(zé)任編輯:姜華 來(lái)源: 今日頭條
相關(guān)推薦

2021-10-29 08:19:54

JMeterJava java sample

2011-07-21 14:28:17

MySQL事務(wù)事務(wù)保存點(diǎn)

2023-02-10 07:00:22

2020-04-02 20:26:22

線程組插件開發(fā)

2010-09-24 19:08:08

SQL事務(wù)

2011-08-23 17:06:03

2011-01-27 10:11:46

J2EEjavaspring

2009-06-15 15:54:53

Java中Cookie

2012-05-23 12:49:58

Java自增操作原子性

2024-10-22 16:54:14

2021-09-12 07:30:10

配置

2009-11-06 11:07:52

WCF事務(wù)屬性

2022-06-01 14:35:39

gitjmeter腳本

2023-06-28 11:36:41

2024-08-13 15:46:57

2024-08-26 15:13:36

2010-11-19 16:13:06

oracle事務(wù)隔離級(jí)

2017-01-19 15:32:36

Java全局事務(wù)本地事務(wù)

2024-10-11 17:13:14

SQL數(shù)據(jù)庫(kù)查詢數(shù)據(jù)庫(kù)

2012-05-14 10:18:54

jQuery
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)