高階測試:如何使用Flink對Strom任務的邏輯功能進行復現測試?

博為峰網校發表於2022-08-08

Flink和Strom都是時下較為流行的資料流平臺,考慮以下一種應用場景:已經使用Strom完成了對於某一邏輯功能的開發,如果現在期望使用Flink實現相同的邏輯,那麼就需要考慮如何使用Flink來對Strom任務的邏輯功能進行最簡單的復現測試。 加我VX:atstudy-js 回覆“測試”,進入 自動化測試學習交流群~~

使用Flink來測試Strom任務的邏輯主要存在兩個最基本的問題:第一,Storm透過自定義的Bolt類實現自定義的邏輯,在Flink中如何實現?第二,Storm按照自定義標準實現資料分發的邏輯,在Flink中如何實現?

本文主要透過兩個最基本的Flink程式例項對上述兩個使用Flink測試Strom任務邏輯存在的基本問題進行解答。

第一個問題,我們可以透過Flink的ProcessFuction類進行實現,透過繼承該類,在該類的processElement方法中實現自定義邏輯。ProcessFuction類如下圖所示,我們可以透過var1這個引數直接獲取當前流中的資料,然後進行自定義的邏輯加工,再透過Collector類var3的collect方法將處理後的資料傳送到下一個流中。

假設某一Strom任務的功能邏輯是:① 對初始資料來源(一個字串)末尾新增一個字串。② 然後再次新增另一個字串。

我們以上述對字串加工的Strom任務為例,說明Flink程式如何透過ProcessFuction類對該任務實現復現測試。

(1)Flink主程式,假設初始資料來源為“abc”。

(2)第一個業務加工類,給資料流末尾新增“def”。

(3)第二個業務加工類,給資料流末尾新增“ghi”。

(4)執行Flink程式,觀察輸出結果,“abc”被二次加工為“abcdefghi”。

第二個分發資料的問題,我們假設某一Strom任務的功能邏輯是對資料來源(股票物件)進行分類,將股價高於X的分為一類,將股價小於等於X的分為另一類。

我們以上述對股票資料物件分類處理的Strom任務為例,說明Flink程式如何透過旁路輸出特性實現對資料流按照自定義標準分類,輸出到不同的子資料流中處理。

Flink 的旁路輸出依然涉及ProcessFunction類的processElement方法,該方法的Context型別的var2引數的主要作用是利用其output方法進行旁路輸出(我們用於進行資料分流)。

Flink的旁路輸出特性可以用來對資料進行分流,透過建立一個流的標籤(OutputTag),再利用這個OutputTag標籤物件作為引數,呼叫初始/父級資料流的getSideOutput(OutputTag)方法獲取子資料流。

每個流標籤都有一個id,也可以不建立物件,只要流標籤的id相同,其中的資料就相同。因此,可以透過匿名內部類的形式來獲取子資料流。第一個引數是id,第二個引數是資料型別(不能省略)。

(1)建立股票類Stock,屬性包括名稱和價格。

(2)建立消費訊息的Flink程式。

(3)建立生產訊息的Flink程式。

我們用“STOCK_LOW_PRICE”和“STOCK_HIGH_PRICE”這兩個ID作為兩個旁路輸出標籤的ID。

在processElement方法中,我們透過判斷股票的價格是否大於50區分出低價股和高價股,利用Context物件的output方法進行旁路輸出,把price小於50的Stock物件輸出到ID為“STOCK_LOW_PRICE”的低價股標籤旁路中,而把price大於等於50的Stock物件輸出到ID為“STOCK_HIGH_PRICE”的高價股標籤旁路中。

(4)依次啟動消費者程式、生產者程式,觀察消費者程式控制臺中的輸出:

此時,桌面生成了兩個資料夾,當中記錄了股票資料,result1記錄了小於50的低價股,result2中記錄了股價大於等於50的高價股。

最後:

可以到我的個人V:atstudy-js,可以免費領取一份10G軟體測試工程師面試寶典文件資料。以及相對應的影片學習教程免費分享!其中包括了有基礎知識、Linux必備、Mysql資料庫、抓包工具、介面測試工具、測試進階-Python程式設計、Web自動化測試、APP自動化測試、介面自動化測試、測試高階持續整合、測試架構開發測試框架、效能測試等。

這些測試資料,對於做【軟體測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31407649/viewspace-2909517/,如需轉載,請註明出處,否則將追究法律責任。

相關文章