国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - springboot項目組引入JMeter的實現(xiàn)步驟

springboot項目組引入JMeter的實現(xiàn)步驟

2021-12-21 13:10HenryXiao8080 Java教程

本文主要介紹了springboot項目組引入JMeter的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

一、前言

看到標(biāo)題的小伙伴肯定很好奇,springboot項目中用JMeter能干什么,那么我先反問你JMeter能用來作什么?壓測;接口自動化?,如果你能猜到這兩點那你對JMeter肯定是有了一定的認(rèn)知,同樣你也猜對了,用它來做接口自動化
但是可能會有小伙伴會有疑問為什么不拿他來做壓測,當(dāng)然可能拿來做壓測但是不建議在springboot項目中整合壓測功能,畢竟壓測本來就是一種多線程的形式而且極其消耗內(nèi)存,spring項目本來就很重,所以得不償失。當(dāng)然對于壓測我又另一種方案,就是容器化的分布式壓測,這一塊方案我會再后續(xù)的文章分享出,接下來我們先來談?wù)勅绾卧趕pringboot項目中做接口自動化吧

在這篇文章中我詳細(xì)介紹過JMeter engine啟動原理,知道JMeter engine原理之后,是否我們可以這樣做,在springboot項目引入JMeter開源組件包然后使用其開啟engine的方法,自己開啟engine,當(dāng)然此時你的線程肯定是單線程,所以基本內(nèi)存消耗很低,那么如何做?我們接著往下說

二、springboot項目引入JMeter完成接口自動化操作

首先導(dǎo)入JMeter對應(yīng)的maven坐標(biāo)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<properties>
    <jmeter.version>5.3</jmeter.version>
</properties>
 
<dependencies>
<dependency>
    <groupId>org.apache.jmeter</groupId>
    <artifactId>ApacheJMeter_http</artifactId>
    <version>${jmeter.version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.jmeter</groupId>
    <artifactId>ApacheJMeter_functions</artifactId>
    <version>${jmeter.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.jmeter</groupId>
    <artifactId>ApacheJMeter_jdbc</artifactId>
    <version>${jmeter.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.jmeter</groupId>
    <artifactId>ApacheJMeter_tcp</artifactId>
    <version>${jmeter.version}</version>
</dependency>
</dependencies>

JMeter engine啟動原理介紹了StandardJMeterEngine標(biāo)準(zhǔn)的引擎類,通過創(chuàng)建這個對象就可以開啟engine,當(dāng)然事實并非如此簡單

?
1
2
3
4
5
6
7
8
9
10
11
//創(chuàng)建engine
StandardJMeterEngine engine = new StandardJMeterEngine();
//將hashTree配置注入engine中
engine.configure(hashTree);
try {
 //執(zhí)行engine開始運(yùn)行
    engine.runTest();
} catch (JMeterEngineException e) {
    engine.stopTest();
    e.printStackTrace();
}

所以開啟engine就這么短短的幾步操作就行,但是上面需要HashTree對象傳入,就是你的配置,關(guān)于HashTree的用法及使用,可以參考我寫的這篇博文

一文搞懂JMeter engine中的HashTree配置

springboot項目組引入JMeter的實現(xiàn)步驟

HashTree有了之后,理論上是可以運(yùn)行了,但是實際卻會報錯,因為JMeter engine開啟會初始化配置文件,也就是我們熟知的jmeter.properties配置的內(nèi)容,所以你可以在springboot項目的resource下創(chuàng)建jmeter目錄存放jmeter.properties等配置

配置文件可以去github上去獲取JMeter 配置

springboot項目組引入JMeter的實現(xiàn)步驟

好了配置有了,接下來我們需要先初始化jmeter.properties配置屬性然后在開啟jmeter engine就行

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//初始化jmeter屬性配置
private void initJMeterProperties() {
    if (!StringUtils.isEmpty(JMeterUtils.getJMeterProperties())){
        return;
    }
    try {
        InputStream inputStream = JMeterUtil.class.getResource("/jmeter/jmeter.properties").openStream();
        File tempFile = FileUtil.createTempFile(null);
        FileUtil.writeFromStream(inputStream,tempFile);
        //這里面loadJMeterProperties方法必須寫成臨時文件這樣的形式,否則會獲取不到j(luò)meter.properties
        JMeterUtils.loadJMeterProperties(tempFile.getAbsolutePath());
        JMeterUtils.setJMeterHome(JMeterUtil.PATH);
        JMeterUtils.setLocale(LocaleContextHolder.getLocale());
    } catch (IOException e) {
        e.printStackTrace();
    }
}

在上面代碼中必須通過創(chuàng)建臨時文件的形式傳入臨時文件的路徑,否則springboot打成jar無法找到路徑從而報錯

springboot項目組引入JMeter的實現(xiàn)步驟

在執(zhí)行步驟2即可,但是會有一個問題engine.runTest()是一個空方法,那你如何接收運(yùn)行的結(jié)果集數(shù)據(jù)呢?這里就要牽扯到jmeter后端監(jiān)聽器的作用了,JMeter后端監(jiān)聽器作用及原理可以參考這篇文章

后端監(jiān)聽器可以異步的接收jmeter engine運(yùn)行的結(jié)果集,所以我們可以通過這個方式實現(xiàn)一個完整的接口自動化流程

這是關(guān)于我的springboot項目采用后端監(jiān)聽器的實現(xiàn)方式

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
public class CustomBackendListenerClient extends AbstractBackendListenerClient {
 
    private final List<SampleResult> queue = new ArrayList<>();
 
    //獲得控制臺內(nèi)容。
    private PrintStream oldPrintStream = System.out;
    private ByteArrayOutputStream bos = new ByteArrayOutputStream();
 
    private void setConsole() {
        System.setOut(new PrintStream(bos));
    }
 
    private String getConsole() {
        System.setOut(oldPrintStream);
        return bos.toString();
    }
 // engine執(zhí)行之前會進(jìn)行前置處理器
    @Override
    public void setupTest(BackendListenerContext context) throws Exception {
        setConsole();
        super.setupTest(context);
    }
 //engine執(zhí)行中的處理
    @Override
    public void handleSampleResults(List<SampleResult> sampleResults, BackendListenerContext context) {
     //結(jié)果集添加至集合中
        queue.addAll(sampleResults);
    }
 //engine結(jié)束后的后置處理器
    @Override
    public void teardownTest(BackendListenerContext context) throws Exception {
     //處理結(jié)果集中的數(shù)據(jù)并封裝至JMeterRequestResult對象中
        RunJMeterRequestService runJMeterRequestService = CommonBeanFactory.getBean(RunJMeterRequestService.class);
        List<JMeterRequestResult> jMeterRequestResults = Lists.newArrayList();
        String testId = context.getParameter("testId");
        queue.stream().forEach(result -> {
            setRequestResult(result, jMeterRequestResults);
        });
        queue.clear();
        runJMeterRequestService.addDebugResult(testId, jMeterRequestResults);
        super.teardownTest(context);
    }
 
    private void setRequestResult(SampleResult result, List<JMeterRequestResult> jMeterRequestResults) {
        JMeterRequestResult metricResult = new JMeterRequestResult();
        Long responseTime = result.getEndTime() - result.getStartTime();
        metricResult.setUrl(result.getUrlAsString());
        metricResult.setResponseSize(((Integer) result.getBodySize()).toString());
        metricResult.setResponseTime(responseTime.toString());
        metricResult.setResponseResult(result.getResponseDataAsString());
        metricResult.setConsoleResult(getConsole());
        if (result instanceof HTTPSampleResult) {
            HTTPSampleResult res = (HTTPSampleResult) result;
            metricResult.setCookie(res.getCookies());
            metricResult.setRequestMethod(res.getHTTPMethod());
        }
        metricResult.setRequestData(result.getSamplerData());
        metricResult.setResponseHeader(result.getResponseHeaders());
        metricResult.setRequestHeader(result.getRequestHeaders());
        metricResult.setStatusCode(result.getResponseCode());
        jMeterRequestResults.add(metricResult);
    }
}

至此JMeter接口自動化可以通過此方案來實現(xiàn),希望能對你有所啟發(fā)

到此這篇關(guān)于springboot項目組引入JMeter的實現(xiàn)步驟的文章就介紹到這了,更多相關(guān)springboot項目組引入JMeter內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/weixin_40686603/article/details/114634552

延伸 · 閱讀

精彩推薦
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發(fā)項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java實現(xiàn)搶紅包功能

    Java實現(xiàn)搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程xml與Java對象的轉(zhuǎn)換詳解

    xml與Java對象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發(fā)現(xiàn)了對于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7482021-02-04
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經(jīng)有好久沒有升過級了。升級完畢重啟之后,突然發(fā)現(xiàn)好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日本a v网站 | 992人人草 | 91资源在线 | 日韩免费在线 | 国产精品无码永久免费888 | www.四虎.com| 中文字幕国产视频 | 人人99 | 欧美一级片在线 | 国产在线网站 | av一级毛片 | www.xxx日韩| 亚洲国产aⅴ成人精品无吗 成人午夜视频在线观看 | 欧美天天 | 成人午夜在线 | 国产一区网站 | 成人网在线看 | 国产原创精品视频 | 国产成人精品免费视频 | 久久人爽 | 亚洲免费视频一区二区 | 成人国内精品久久久久一区 | 亚洲自拍不卡 | 日韩电影中文字幕 | 艹逼逼视频 | 成人在线视频网 | 免费成人黄色网址 | 久久亚洲精品裙底抄底 | av在线综合网 | 久久av综合| 日韩中文字幕在线观看 | 亚洲激情在线播放 | 日日摸夜夜添夜夜添特色大片 | а天堂中文官网 | 7799精品视频天天看 | 免费看国产视频 | 精品人成| 欧美一区二区三区的 | 国产一区二| 久久久精品国产 | 亚洲三级视频 |