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

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

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

引言

在編寫測試用例的時候遇到有異步或者隊列處理的時候經常會用到 Thread.sleep() 等待來進行測試。例如:DLedger 測試選舉的過程。當DLedger Leader下線。此時DLedger會重新發(fā)起選舉,這個選舉的過程是需要一定時間。很多時候在測試代碼中就會使用 Thread.sleep 。

由于選舉需要的時間多少不確定所以sleep時間就會設置為開發(fā)者經驗的最大值。這樣會造成測試代碼會變得很慢。 當然開發(fā)者可以通過自己輪詢來實現(xiàn)減少時間的消耗。

下面介紹一個處理這個一類問題的工具:awaitility

1. awaitility入門

Maven:

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

文章編寫的時候版本為:4.2.0

1.1 靜態(tài)導入

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

org.awaitility.Awaitility.*

在使用的時候需要搭配Java的時間相關的類以及Junit相關類:

java.time.Duration.*

java.util.concurrent.TimeUnit.*

org.junit.Assert.*

1.2 簡單例子

例子1:

await().until(newUserIsAdded());

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

例子2:

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

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

例子3:

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

等待直到執(zhí)行userRepositorySize()返回方法對應的值. 這個是有返回值

更多的例子可以參照官網 使用例子

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

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

上圖框出來的代碼主要的作用是什么呢?等待Broker的Master過期,但是過期的時間我們根據(jù)設置的心跳的過期時間來預估時間。所以這里填寫的是6秒當然你也可以填寫10秒或者更長。

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

使用awaitility對代碼進行改造重構:

重構后的代碼,如上圖的紅線框出來部分。當然我這里還對其他的進行處理。

有興趣的可以關注一下RocketMQ的這個ISSUE:github.com/apache/rock…

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

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

3. 總結

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

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

相關文章

  • Java如何正確處理下載文件時HTTP頭的編碼問題

    Java如何正確處理下載文件時HTTP頭的編碼問題

    這篇文章主要介紹了Java如何正確處理下載文件時HTTP頭的編碼問題,
    通常HTTP消息包括客戶機向服務器的請求消息和服務器向客戶機的響應消息,今天來講解下正確處理下載文件時HTTP頭的編碼問題,需要的朋友可以參考下
    2023-07-07
  • spring cloud-給Eureka Server加上安全的用戶認證詳解

    spring cloud-給Eureka Server加上安全的用戶認證詳解

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

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

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

    MyBatis中ResultMap與多表查詢的處理方法

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

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

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

    一個簡陋的java圖書管理系統(tǒng)

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

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

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

    eclipse配置tomcat10的詳細步驟總結

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

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

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

    Java實現(xiàn)自定義LinkedList類的示例代碼

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

最新評論