Premo測試框架詳解
BitXHub 是趣鏈科技自主研發的跨鏈技術平台,提供基於異構聯盟鏈間的賬本互操作解決方案。為保證BitXHub跨鏈平台在日常迭代過程中的功能符合用戶需求,並儘可能多的把問題在發布或交付之前發現並改正,Premo測試工具應運而生。 Premo主要基於BitXHub自身的gosdk實現,具有易於擴展和維護的特點。本文主要圍繞功能測試、性能測試以及自動化測試三個方面來概述Premo的測試框架。
【架構總覽】
Premo測試框架如下圖所示。基於測試的內容主要分為「功能測試」和「性能測試」。功能測試主要基於testing和testify實現整體測試框架,基於gosdk實現和BitXHub跨鏈平台的通信和調用;性能測試主要是在gosdk的基礎上通過協程實現。 Premo在功能測試的基礎上又進一步實現了持續集成測試,持續集成測試部分主要藉助GitHub Actions實現。

【功能測試】
功能測試模塊主要依託於BitXHub項目自身的gosdk,testify開源庫和testing庫實現。功能測試模塊根據測試的功能點分為多個測試文件,每一個測試文件內的測試用例都包含於一個測試套件中,在日常測試可以基於你所需要測試的功能點來運行不同的套件,如下圖所示。例如model1001_chain_test.go內的所有測試用例都包含在model1這個套件中,如果需要運行chain相關的測試用例只需運行model1的套件即可。

▲並行化測試
隨著項目的不斷擴展,測試用例的數目也在不斷增加,回歸全量測試用例所消耗的時間也越來越長,順序測試的方法在快速迭代的版本開發中顯得越來越低效。採用並行化測試可以有效解決這個問題,然而這又會引入一個新的問題,也就是測試用例之間的耦合性。很多用例在串行測試的過程中不會暴露問題,一旦進行並行化測試就會出現並發上的問題。
以BitXHub跨鏈平台為例,BitXHub跨鏈平台在接收跨鏈交易的過程中會根據賬戶地址維護一個nonce值用於實現跨鏈交易的有序性,每收到一筆交易nonce值就會增加1 ,如果收到的nonce值小於預期的nonce值,BitXHub跨鏈平台就會丟掉這筆交易,反之,如果大於預期的nonce,BitXHub跨鏈平台就會暫存這筆交易,直至nonce達到預期。這就會要求我們在並行化測試的用例中人為的去維護這個nonce值。因此,並行化測試中很重要的一點就是需要維護用例之間的相對獨立性,如何維護用例的相對獨立性則需要根據項目自身因地制宜。
【性能測試】
衡量一個跨鏈服務系統是否可靠穩定很重要的一點便是跨鏈自身的性能指標。 Premo根據上述需求,基於BitXHub自身的gosdk實現了一套完整的性能測試方案用於檢驗BitXHub跨鏈平台的性能是否滿足需求。 Premo中進行的性能測試主要是壓力測試,通過向BitXHub跨鏈平台發送大量的跨鏈交易來驗證BitXHub處理跨鏈交易的性能。整體性能測試主要分3個步驟進行,分別是應用鏈準備、發送跨鏈交易和統計TPS。
▲應用鏈準備
在發送跨鏈交易前,需要預先根據不同的交易類型註冊一定數量的應用鏈到中繼鏈,以便後續Premo通過SDK使用這些應用鏈的身份向中繼鏈發送跨鏈交易。應用鏈註冊成功後還需要部署相應的驗證規則,用於中繼鏈驗證交易的有效性。
▲發送跨鏈交易
根據預先設定的TPS和應用鏈數量可以計算出一條應用鏈在一秒內需要向BitXHub跨鏈平台發送的跨鏈交易數量。預先設定的交易類型可以構造出對應的交易體。注意由於跨鏈交易的有序性要求,我們需要在交易體中維護每一條跨鏈交易的nonce值。同時為了更加均勻的發送跨鏈交易,每隔50ms,Premo就會發送部分跨鏈交易到BitXHub跨鏈平台上,例如Premo需要模擬20條應用鏈每秒總共發送2000條跨鏈交易,那麼每條應用鏈需要在1秒內發送100條跨鏈交易,每50ms每條應用鏈就會發送5條跨鏈交易。
▲統計TPS
統計TPS是通過訂閱BitXHub跨鏈平台的區塊事件實現。訂閱區塊事件後,BitXHub跨鏈平台每出一個塊就會推送到Premo中,Premo通過統計區塊內的交易數量來計算TPS,每筆交易的延時= 收到區塊的時間搓- 交易的時間搓。 Premo根據上述信息每秒打印TPS和交易的平均延時。
【自動化測試】
▲Make命令
▲Make命令
正文
▲GitHubActions
正文
▲allure-server
GitHub上開源的Allure Report Server,支持通過GitHub Actions的方式發布測試報告,並且allure-server支持docker。
「上述需要進行的工作較多,我們可以一點一點解析」
(1)根據PR觸發action:
具體參考github actions的官方文檔Eventsthat trigger workflows相關章節;
(2)根據目的分支功能測試:
在action中我們可以獲取目的分支名,Premo的測試用例是根據BitXHub跨鏈平台的版本維護的,所以只需根據目的分支名拉取Premo進行功能測試即可;
(3)發布測試報告:
發布測試報告主要通過allure-server進行,allure-server在上文已經提過。需要注意的一點是allure-server對應的服務器的地址不能暴露,否則會給服務器帶來不穩定因素,通過倉庫[Setting]中設置[Secrets]來可以解決這個問題;
(4)郵箱通知:
郵件通知在GitHub Actions中較為常見,使用對應的action即可。需要注意是由於使用的SMTP的形式所以郵箱的賬號和密碼不能公開。通過倉庫[Setting]中設置[Secrets]可以解決這個問題。在郵箱通知的過程中需要知道目的郵箱的賬目密碼,同時還需要郵箱開啟SMTP服務,這種情況下在action中配置PR提交者的郵箱變的不可取。
一個合適的解決方式是:通過郵箱自身的收發信規則。以騰訊企業郵箱為例,郵箱支持根據郵件的內容進行自動轉發。我們只需要在郵件中攜帶提交者的github的名稱(或者其他身份信息),收發信規則根據名稱過濾,將郵件自動轉發給PR提交者。通過上述方式在action中不需要根據不同的PR提交者指定不同的郵箱地址,只需要將郵件發送給"即可。"即可。
正文

正文
作者簡介
作者簡介
祝煒潔
趣鏈科技數據網格實驗室BitXHub團隊


