2

使用ezSpec落實行為驅動開發與實例化需求(9):內建報表

 1 year ago
source link: https://teddy-chen-tw.blogspot.com/2023/03/ezspec9.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

使用ezSpec落實行為驅動開發與實例化需求(9):內建報表

March 25 10:43~11:48

截圖 2023-03-25 上午11.47.18

▲等待報表功能全部完成,ezSpec就可以開源了

前言

前幾集介紹ezSpec的基本功能以及同步執行功能,今天介紹ezSpec最後一個功能:報表。報表功能是做到Living Documentation(活文件)的核心功能之一,先用ezSpec描述系統行為,然後這些可執行規格變成驗收條件,執行結果透過報表整理,產出與系統現狀同步的Living Documentation。

目前ezSpec支援產生個別Feature file執行結果的報表,報表格式為txt檔與json檔,整合性報表還在開發中。ezSpec支援Visitor設計模式,開發人員也可以自行撰寫Visitor,產生使用者自訂報表。本集先介紹如何產生內建報表,下一集介紹如何擴充ezSpec,撰寫使用者自訂的報表。

產生報表

要讓ezSpec產生報表,首先測試案例(Test Class)要實作EzSpec介面,請參考圖1。

截圖 2023-03-25 上午10.59.46

▲圖1:測試案例實作EzSpec介面

EzSpec介面程式碼如圖2,它身上有四個Annotation:

  • @DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class):這是JUnit 5的內建annotation,在JUnit報表中會將test mehtod的名字的底線取代為空白,以方便閱讀。例如,將scenario_using_EzScenario_annotation顯示為scenario using EzScenario annotation。
  • @ExtendWith(EzSpecReportExtension.class):@ExtendWith是JUnit 5支援使用者自行擴充功能的annotation,ezSpec的EzSpecReportExtension透過實作JUnit 5 的AfterAllCallback介面,讓JUnit執行每一個Test Clase之後呼叫ezSpec,以便產生報表。
  • @EzSpecReportFormat({EzSpecReportFormat.Format.json, EzSpecReportFormat.Format.txt}):這是ezSpec自訂的annotation,用來表示產生那些格式的內建報表。目前ezSpec支援txt與json這兩種報表格式
  • @Tag(EzSpecTag.LivingDoc.EzSpec):這也是JUnit 5內建的annotation,用來分類測試案例。參考圖3,ezSpec內建EzSpecTag介面,裡面包含常用的Tag。將Test Class(在ezSpec的情境中,也就是Feature file)用Tag分類,主要以下兩個目的:
    • 在test suite中作為測案案例的選擇條件,例如只挑選單元測試,或是只挑選整合測試。
    • 作為Living Documentation的分類標籤,例如產生Use Case的報表,或是產生在Staging環境測試執行結果的報表。

截圖 2023-03-25 上午11.01.43

▲圖2:EzSpec介面程式碼

截圖 2023-03-25 上午11.16.02

▲圖3:EzSpecTag介面程式碼片段

只要測試案例(Test Class)實作EzSpec介面,並依據前幾集介紹的方式撰寫Feature, Story, Scenario, Scenario Outline,執行測試案例之後,ezSpec就會在預設的目錄 target/ezSpec-report 產生報表,請參考圖4。

截圖 2023-03-25 上午11.23.35

▲圖4:ezSpec在預設目錄中產生報表

圖5與圖6分別展示ezSpec產生的純文字檔報表與json格式報表。

截圖 2023-03-25 上午11.25.09

▲圖5:ezSpec純文字檔報表範例

截圖 2023-03-25 上午11.28.05

▲圖6:ezSpec JSON格式報表範例

不要產生報表

有時候你可能會臨時不要產生某個測試案例的報表,此時可以直接在測試案例上面加上@DisableEzSpecReport。

截圖 2023-03-25 上午11.20.20

▲圖7:加上@DisableEzSpecReport就不會產生該測試案例的報表

如果想要禁止ezSpec產生所有測試案例的報表,可以設定EZREPORT環境變數,把它設為OFF即可。什麼時候會取消報表產生功能?因為產生報表需要時間,也需要寫入檔案,因此會讓測試案例跑得比較慢一點。原本這也不是什麼大問題,但如果你的專案採用類似PiTest這種Mutation Test工具,那麼同一個測試案例會被執行N次,而且在這種情況下,開發人員只需要觀看PiTest產出的報表,並不需要ezSpec的報表。此時,關閉ezSpec產生報表功能,可以加速PiTest執行。

結論

報表系統算是ezSpec的最後一哩路,目前ezSpec提供的報表屬於個別驗收測試(Feature file)執行結果的報表,雖然使用者可以透過下一集介紹的方式擴充ezSpec產生使用者自訂報表,但Teddy還是想在ezSpec中提供基本的整合報表功能。等待整合報表功能完成,Teddy就會將ezSpec開源給有興趣的鄉民們使用。

友藏內心獨白:人要衣裝,佛要金裝,報表也是很重要的功能。


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK