摘要:概述是一個輕量級的單元測試工具,基于二次開發(fā),使用它基于注解的方式,快速在本地進(jìn)行單元壓測并提供詳細(xì)的報告。當(dāng)和都有指定時,以執(zhí)行次數(shù)多的為準(zhǔn)。測試報告最終的測試報告位于,使用瀏覽器打開即可。
概述
ContiPerf 是一個輕量級的單元測試工具,基于JUnit 4二次開發(fā),使用它基于注解的方式,快速在本地進(jìn)行單元壓測并提供詳細(xì)的報告。
Example 1. 新建 SpringBoot 工程核心依賴如下
2. 測試接口以及實現(xiàn)org.springframework.boot spring-boot-starter-test test org.databene contiperf 2.1.0 test
package com.wuwenze.contiperf.service; import java.util.List; public interface ContiperfExampleService { ListfindAll(); }
import com.wuwenze.contiperf.service.ContiperfExampleService; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Random; import lombok.extern.slf4j.Slf4j; @Slf4j @Service public class ContiperfExampleServiceImpl implements ContiperfExampleService { private final Random RANDOM = new Random(); @Override public List3. 構(gòu)建單元測試findAll() { try { int sleepSecond = RANDOM.nextInt(10); log.info("#findAll(): sleep {} seconds..", sleepSecond); Thread.sleep(sleepSecond * 1000); } catch (InterruptedException e) { // ignore } List resultList = new ArrayList<>(); for (int i = 0; i < 1000; i++) { resultList.add("string_" + i); } return resultList; } }
package com.wuwenze.contiperf.service; import com.wuwenze.contiperf.ContiperfExamplesApplication; import org.databene.contiperf.PerfTest; import org.databene.contiperf.junit.ContiPerfRule; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest(classes = ContiperfExamplesApplication.class) public class ContiperfExampleServiceTest { @Rule public ContiPerfRule i = new ContiPerfRule(); @Autowired private ContiperfExampleService contiperfExampleService; @Test @PerfTest(threads = 1000, duration = 1500) public void findAll() { contiperfExampleService .findAll() .forEach(System.out::println); } }4. 最終執(zhí)行效果
查看測試報告:
@PerfTest(invocations = 300):執(zhí)行300次,和線程數(shù)量無關(guān),默認(rèn)值為1,表示執(zhí)行1次;
@PerfTest(threads=30):并發(fā)執(zhí)行30個線程,默認(rèn)值為1個線程;
@PerfTest(duration = 20000):重復(fù)地執(zhí)行測試至少執(zhí)行20s。
三個屬性可以組合使用,其中Threads必須和其他兩個屬性組合才能生效。當(dāng)Invocations和Duration都有指定時,以執(zhí)行次數(shù)多的為準(zhǔn)。
例,@PerfTest(invocations = 300, threads = 2, duration = 100),如果執(zhí)行方法300次的時候執(zhí)行時間還沒到100ms,則繼續(xù)執(zhí)行到滿足執(zhí)行時間等于100ms,如果執(zhí)行到50次的時候已經(jīng)100ms了,則會繼續(xù)執(zhí)行之100次。
如果你不想讓測試連續(xù)不間斷的跑完,可以通過注釋設(shè)置等待時間,例,@PerfTest(invocations = 1000, threads = 10, timer = RandomTimer.class, timerParams = { 30, 80 }) ,每執(zhí)行完一次會等待30~80ms然后才會執(zhí)行下一次調(diào)用。
在開多線程進(jìn)行并發(fā)壓測的時候,如果一下子達(dá)到最大進(jìn)程數(shù)有些系統(tǒng)可能會受不了,ContiPerf還提供了“預(yù)熱”功能,例,@PerfTest(threads = 10, duration = 60000, rampUp = 1000) ,啟動時會先起一個線程,然后每個1000ms起一線程,到9000ms時10個線程同時執(zhí)行,那么這個測試實際執(zhí)行了69s,如果只想衡量全力壓測的結(jié)果,那么可以在注釋中加入warmUp,即@PerfTest(threads = 10, duration = 60000, rampUp = 1000, warmUp = 9000) ,那么統(tǒng)計結(jié)果的時候會去掉預(yù)熱的9s。
2)Required參數(shù)@Required(throughput = 20):要求每秒至少執(zhí)行20個測試;
@Required(average = 50):要求平均執(zhí)行時間不超過50ms;
@Required(median = 45):要求所有執(zhí)行的50%不超過45ms;
@Required(max = 2000):要求沒有測試超過2s;
@Required(totalTime = 5000):要求總的執(zhí)行時間不超過5s;
@Required(percentile90 = 3000):要求90%的測試不超過3s;
@Required(percentile95 = 5000):要求95%的測試不超過5s;
@Required(percentile99 = 10000):要求99%的測試不超過10s;
@Required(percentiles = "66:200,96:500"):要求66%的測試不超過200ms,96%的測試不超過500ms。
最終的測試報告位于target/contiperf-report/index.html,使用瀏覽器打開即可。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/76446.html
摘要:顧名思義,是用于數(shù)據(jù)源選擇切換的框架,這是一款基于切面指定注解實現(xiàn)的,通過簡單的數(shù)據(jù)源注解配置就可以完成訪問時的自動切換,切換過程中是線程安全的。注意事項在使用時需要添加對應(yīng)數(shù)據(jù)庫的依賴如果使用連接池,不要配置使用的依賴,請使用依賴。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服務(wù)集成基礎(chǔ)框架, 內(nèi)部提供了框架的封裝集成、使用擴(kuò)展、自動化完成配置,...
摘要:本書概括以軟件系統(tǒng)為例,重點講解了應(yīng)用架構(gòu)中的物理設(shè)計問題,即如何將軟件系統(tǒng)拆分為模塊化系統(tǒng)。容器獨立模塊不依賴于具體容器,采用輕量級容器,如獨立部署模塊可獨立部署可用性模式發(fā)布接口暴露外部配置使用獨立的配置文件用于不同的上下文。 本文為讀書筆記,對書中內(nèi)容進(jìn)行重點概括,并將書中的模塊化結(jié)合微服務(wù)、Java9 Jigsaw談?wù)劺斫狻?本書概括 以Java軟件系統(tǒng)為例,重點講解了應(yīng)用架構(gòu)...
摘要:的機器學(xué)習(xí)庫的機器學(xué)習(xí)庫,包括算法交叉驗證神經(jīng)網(wǎng)絡(luò)等內(nèi)容。在即將到來的大會上,她將和大家分享在機器學(xué)習(xí)領(lǐng)域的全新可能。入門總結(jié)入門相關(guān),如安裝配置基本使用等。 基于 Swoole 開發(fā) PHP 擴(kuò)展 Swoole-1.9.7 增加了一個新特性,可以基于 Swoole 使用 C++ 語言開發(fā)擴(kuò)展模塊,在擴(kuò)展模塊中可以注冊 PHP 內(nèi)置函數(shù)和類。現(xiàn)在可以基于 Swoole 來編寫 PHP ...
閱讀 893·2023-04-26 03:03
閱讀 2218·2021-10-12 10:12
閱讀 1210·2021-09-24 09:48
閱讀 1659·2021-09-22 15:25
閱讀 3343·2021-09-22 15:15
閱讀 925·2019-08-29 16:21
閱讀 1074·2019-08-28 18:00
閱讀 3435·2019-08-26 13:44