欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Awaitility同步異步工具實(shí)戰(zhàn)示例詳解

 更新時(shí)間:2022年08月25日 17:05:28   作者:螞蟻背大象  
這篇文章主要為大家介紹了Awaitility同步異步工具實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

在編寫(xiě)測(cè)試用例的時(shí)候遇到有異步或者隊(duì)列處理的時(shí)候經(jīng)常會(huì)用到 Thread.sleep() 等待來(lái)進(jìn)行測(cè)試。例如:DLedger 測(cè)試選舉的過(guò)程。當(dāng)DLedger Leader下線。此時(shí)DLedger會(huì)重新發(fā)起選舉,這個(gè)選舉的過(guò)程是需要一定時(shí)間。很多時(shí)候在測(cè)試代碼中就會(huì)使用 Thread.sleep 。

由于選舉需要的時(shí)間多少不確定所以sleep時(shí)間就會(huì)設(shè)置為開(kāi)發(fā)者經(jīng)驗(yàn)的最大值。這樣會(huì)造成測(cè)試代碼會(huì)變得很慢。 當(dāng)然開(kāi)發(fā)者可以通過(guò)自己輪詢(xún)來(lái)實(shí)現(xiàn)減少時(shí)間的消耗。

下面介紹一個(gè)處理這個(gè)一類(lèi)問(wèn)題的工具:awaitility

1. awaitility入門(mén)

Maven:

<dependency>
      <groupId>org.awaitility</groupId>
      <artifactId>awaitility</artifactId>
      <version>xxxx</version>
      <scope>test</scope>
</dependency>

文章編寫(xiě)的時(shí)候版本為:4.2.0

1.1 靜態(tài)導(dǎo)入

為了有效地使用Awaitility,建議從Awaitility框架中靜態(tài)地導(dǎo)入以下方法:

org.awaitility.Awaitility.*

在使用的時(shí)候需要搭配Java的時(shí)間相關(guān)的類(lèi)以及Junit相關(guān)類(lèi):

java.time.Duration.*

java.util.concurrent.TimeUnit.*

org.junit.Assert.*

1.2 簡(jiǎn)單例子

例子1:

await().until(newUserIsAdded());

等待直到執(zhí)行newUserIsAdded()返回true. 這個(gè)是沒(méi)有返回值的。

例子2:

await().atMost(5, SECONDS).until(newUserWasAdded());

最多等待5秒,等待直到執(zhí)行newUserIsAdded()返回true. 這個(gè)是沒(méi)有返回值的。

例子3:

await().until( userRepositorySize(), equalTo(1) );

等待直到執(zhí)行userRepositorySize()返回方法對(duì)應(yīng)的值. 這個(gè)是有返回值

更多的例子可以參照官網(wǎng) 使用例子

2. awaitility在RocketMQ中的實(shí)戰(zhàn)

在RocketMQ的test cases 中有一些使用了 Thread.sleep,接下來(lái)我們看看如何使用awaitility進(jìn)行優(yōu)化,減少測(cè)試用例的執(zhí)行時(shí)間。以ControllerManagerTest測(cè)試用例為例子來(lái)解決,在代碼中可以看到有這樣的代碼:

上圖框出來(lái)的代碼主要的作用是什么呢?等待Broker的Master過(guò)期,但是過(guò)期的時(shí)間我們根據(jù)設(shè)置的心跳的過(guò)期時(shí)間來(lái)預(yù)估時(shí)間。所以這里填寫(xiě)的是6秒當(dāng)然你也可以填寫(xiě)10秒或者更長(zhǎng)。

解決之前的執(zhí)行時(shí)間:

使用awaitility對(duì)代碼進(jìn)行改造重構(gòu):

重構(gòu)后的代碼,如上圖的紅線框出來(lái)部分。當(dāng)然我這里還對(duì)其他的進(jìn)行處理。

有興趣的可以關(guān)注一下RocketMQ的這個(gè)ISSUE:github.com/apache/rock…

使用awaitility重構(gòu)后的執(zhí)行時(shí)間:

時(shí)間有明顯的下降。相比之前的下降了5秒左右。

3. 總結(jié)

  • 在測(cè)試過(guò)程中引入awaitility能夠很大程度上方便測(cè)試,無(wú)需要每次都憑經(jīng)驗(yàn)去預(yù)估時(shí)間。并且很多時(shí)候這個(gè)Thread.sleep的時(shí)間不是很好估算。減少了單元測(cè)試執(zhí)行的時(shí)間。特別是像RocketMQ這樣大型的項(xiàng)目單元測(cè)試很多。并且很多都是去測(cè)試分布式的,如果使用Thread.sleep會(huì)導(dǎo)致整個(gè)單元測(cè)試的時(shí)間很長(zhǎng)。
  • 無(wú)需自己去實(shí)現(xiàn)輪詢(xún)來(lái)減少單元測(cè)試的時(shí)間。

以上就是Awaitility同步異步工具實(shí)戰(zhàn)示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Awaitility同步異步工具實(shí)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java如何正確處理下載文件時(shí)HTTP頭的編碼問(wèn)題

    Java如何正確處理下載文件時(shí)HTTP頭的編碼問(wèn)題

    這篇文章主要介紹了Java如何正確處理下載文件時(shí)HTTP頭的編碼問(wèn)題,
    通常HTTP消息包括客戶(hù)機(jī)向服務(wù)器的請(qǐng)求消息和服務(wù)器向客戶(hù)機(jī)的響應(yīng)消息,今天來(lái)講解下正確處理下載文件時(shí)HTTP頭的編碼問(wèn)題,需要的朋友可以參考下
    2023-07-07
  • spring cloud-給Eureka Server加上安全的用戶(hù)認(rèn)證詳解

    spring cloud-給Eureka Server加上安全的用戶(hù)認(rèn)證詳解

    這篇文章主要介紹了spring cloud-給Eureka Server加上安全的用戶(hù)認(rèn)證詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Java 使用POI生成帶聯(lián)動(dòng)下拉框的excel表格實(shí)例代碼

    Java 使用POI生成帶聯(lián)動(dòng)下拉框的excel表格實(shí)例代碼

    本文通過(guò)實(shí)例代碼給大家分享Java 使用POI生成帶聯(lián)動(dòng)下拉框的excel表格,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-09-09
  • MyBatis中ResultMap與多表查詢(xún)的處理方法

    MyBatis中ResultMap與多表查詢(xún)的處理方法

    這篇文章主要介紹了MyBatis中ResultMap與多表查詢(xún)的處理方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • Java實(shí)現(xiàn)去除文檔陰影的示例代碼

    Java實(shí)現(xiàn)去除文檔陰影的示例代碼

    文稿掃描大家用的都比較頻繁、想是各種證件、文件都可以通過(guò)掃描文稿功能保存到手機(jī)。相比直接拍照,在掃描文稿時(shí),程序會(huì)對(duì)圖像進(jìn)行一些矯正。比如去除陰影、修正傾斜、旋轉(zhuǎn)矯正等。進(jìn)行這些處理后的圖片要更加容易識(shí)別。今天就來(lái)討論一下去除陰影的操作
    2022-12-12
  • 一個(gè)簡(jiǎn)陋的java圖書(shū)管理系統(tǒng)

    一個(gè)簡(jiǎn)陋的java圖書(shū)管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了一個(gè)簡(jiǎn)陋的java圖書(shū)管理系統(tǒng),簡(jiǎn)單的實(shí)現(xiàn)功能測(cè)試,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • struts2 中文亂碼的解決辦法分享

    struts2 中文亂碼的解決辦法分享

    這篇文章主要介紹了struts2 中文亂碼的解決辦法,需要的朋友可以參考下
    2014-02-02
  • eclipse配置tomcat10的詳細(xì)步驟總結(jié)

    eclipse配置tomcat10的詳細(xì)步驟總結(jié)

    今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著eclipse配置tomcat10的詳細(xì)步驟展開(kāi),文中有非常詳細(xì)的介紹及圖文示例,需要的朋友可以參考下
    2021-06-06
  • Java利用Redis實(shí)現(xiàn)高并發(fā)計(jì)數(shù)器的示例代碼

    Java利用Redis實(shí)現(xiàn)高并發(fā)計(jì)數(shù)器的示例代碼

    這篇文章主要介紹了Java利用Redis實(shí)現(xiàn)高并發(fā)計(jì)數(shù)器的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Java實(shí)現(xiàn)自定義LinkedList類(lèi)的示例代碼

    Java實(shí)現(xiàn)自定義LinkedList類(lèi)的示例代碼

    LinkedList類(lèi)跟ArrayList類(lèi)不同,它通過(guò)指針以及結(jié)點(diǎn)的操作對(duì)鏈表進(jìn)行增刪改查。本文就來(lái)和大家分享下Java如何為實(shí)現(xiàn)自定義LinkedList類(lèi),需要的可以參考一下
    2022-08-08

最新評(píng)論