高階測試:如何使用Flink對Strom任務的邏輯功能進行復現測試?
Flink和Strom都是時下較為流行的資料流平臺,考慮以下一種應用場景:已經使用Strom完成了對於某一邏輯功能的開發,如果現在期望使用Flink實現相同的邏輯,那麼就需要考慮如何使用Flink來對Strom任務的邏輯功能進行最簡單的復現測試。 加我VX:atstudy-js 回覆“測試”,進入 自動化測試學習交流群~~
本文主要透過兩個最基本的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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Strom及DRPC效能測試與改進RPC
- 測試筆試邏輯思維題筆試
- 車載T-Box邏輯功能測試方案
- 開發者測試(4)-採用精準測試工具對dubbo微服務應用進行測試微服務
- 【星雲測試】開發者測試(3)-採用精準測試工具對springcloud微服務應用進行穿透測試SpringGCCloud微服務穿透
- 效能測試進階實踐篇:10分鐘教你使用JMeter進行websocket測試!JMeterWeb
- 如何對你Mac進行壓力測試?Mac
- 如何使用spring測試模組測試請求功能Spring
- 使用ab對nginx進行壓力測試Nginx
- 如何對Mac進行基礎檢測和速度測試Mac
- 開發者測試(3)-採用精準測試工具對springcloud微服務應用進行穿透測試SpringGCCloud微服務穿透
- 如何對網站登入進行漏洞測試以及漏洞修復網站
- 使用 Bash shell 指令碼進行功能測試(轉)指令碼
- 軟體測試的底層邏輯
- 使用 Laravel 進行商品功能測試Laravel
- Golang 單元測試 - 邏輯層Golang
- 用雲壓力測試工具,如何完成一次測試任務
- 如何對 ElasticSearch 叢集進行壓力測試Elasticsearch
- Golang 專案中如何對 API 進行測試?GolangAPI
- 如何對非同步呼叫進行單元測試非同步
- 【星雲測試】開發者測試-採用精準測試工具對Spring Boot應用進行測試Spring Boot
- 【星雲測試】開發者測試-採用精準測試工具對SpringBoot應用進行測試Spring Boot
- 介面測試怎麼進行,如何做好介面測試
- 使用 HTTPie 進行 API 測試HTTPAPI
- 使用PostMan進行API測試PostmanAPI
- 軟體測試中的功能測試和非功能測試
- 測試前奏 之 Robotium使用Eclipse和ADT對apk進行黑盒測試EclipseAPK
- 負載測試如何尋找"拐點"?使用哪種方法進行測試?負載
- 介面測試進階篇
- 開發者測試-採用精準測試工具對Spring Boot應用進行測試Spring Boot
- PHP進階,使用互動模式進行快速測試實驗?PHP模式
- [杭州]知名IT公司高薪誠聘測試主管,高階測試高薪
- H5測試||測試執行階段測啥H5
- 學點高階測試工程師才懂的技術:手把手教你進行越權測試工程師
- 介面測試的時候如何生成隨機資料進行測試隨機
- 邏輯注入漏洞滲透測試檢測辦法
- 如何使用hammerdb進行MySQL基準測試MySql
- 測試人員如何提高API功能測試效率?API