分類
courses

易維護擴充且穩定的端到端自動化測試解決方案

學習一種在實務上高效端到端測試的解決方案,結合講師所開發的一些開源框架,實現「測試案例即業務情境,無需修改程式碼的情況下,測試案例即可執行」的效果。

為什麼需要這門課

端到端測試是一種常見且非常重要的自動化測試方法,它從使用者使用/功能驗收的角度出發,涵蓋關鍵需求場景,將整個系統都納入測試範圍。

當產品只有單元測試可能碰到的問題:

  • 即使全部單元測試都綠燈,也可能因為缺少驗證端到端各資源、元件、服務、資料源協作,而抓不到這類 bug
  • 單元測試程式容易因為顆粒度過小把功能切太碎的關係,而陷入見樹不見林,不好從單元測試來理解使用場景的原貌
  • 對高內聚設計不熟悉的開發人員,在設計時很容易把職責切得過碎導致測試程式需要 mock 過多依賴,進而讓單元測試更難理解與維護

端到端測試則盡可能更接近軟體產品的真實執行環境,進而整合驗證系統相關設定、元件依賴協作、資料完整、服務間通訊等作用,確保系統整體可如預期般運作。

然而過去很多人都寫過端到端測試,但成效通常不盡人意,因為通常會遇到這些棘手的問題:

  • 測試程式品質不高,案例過於冗長,重複程式碼過多,缺乏必要的抽象和設計
  • 重構、維護、擴充端到端測試程式的成本過高,時間不足,基礎建設不足
  • 產品程式碼變更時,連帶導致大量測試程式得跟著修改
  • 測試執行時好時壞不穩定,不同案例之間的測試資料或執行順序會相互影響
  • 測試執行環境不獨立,尤其是在後端大量微服務的架構下,建置本機環境繁瑣複雜
  • 測試資料複雜,準備資料時容易有大量重複程式碼或因果意義不明確的測試資料
  • 不知從何下手模擬與驗證的測試,例如無法測試與系統時間、排程任務相關的功能

實務在許多產品團隊成員中,測試人員比較理解需求與場景全貌,但不熟悉程式碼的閱讀與撰寫;而開發人員雖熟悉程式碼的撰寫,卻又無法透過程式碼來與測試、需求人員協作,每一個角色之間的協作都可能會產生溝通的斷層,進而衍生因溝通落差導致的 bug。

我們希望能擁有一個良好且能直接應用到產品實務上的解決方案,有效改善上述的問題,並帶來我們渴望的好處:

  • 測試案例更貼近使用者視角的使用場景,讓使用者、需求方、測試人員甚至能以此當作使用說明書來理解產品功能的運作
  • 需求、測試、開發人員之間的協作,能讓溝通落差最小化,減少浪費,在建置本機環境不必過份依賴例如資料庫管理者、IT/SRE人員,也能在本機進行擬真的端到端測試
  • 即使不會撰寫程式的角色,只要理解產品與領域知識,也能輕鬆理解、甚至能維護與擴充對應的測試案例與場景
  • 不論產品使用的程式語言為何,只要是網站與服務,這樣的解決方案都能一體適用且簡易建置,人員能輕易上手
  • 讓測試程式的結果更擬真,涵蓋更完整的範圍

課程描述

要了解這樣易用且實務的解決方案,這門課程將在兩天內透過十幾個練習,有系統地剖析問題的根本原因與對應解決方案的實踐要點(如下),使學員有能力寫出易維護且穩定的端到端測試,進而做到「無需實現背後的測試程式碼,就能執行新寫的測試案例」的效果。

  • 如何透過實例化需求,從「業務」角度出發,設計出易於理解意圖的案例
  • 如何透過「分層架構」來編寫 UI 端到端測試案例
  • 如何透過容器化技術來建置端到端測試執行的本機環境
  • 如何做到測試預置資料(包括複雜的聯集資料)的「完全控制」和「輕鬆建立」
  • 如何使用領域特定語言(DSL)實現對任意測試資料(如 API 回傳結果、資料庫等等)的驗證
  • 如何模擬外部系統和其他微服務的 API 
  • 如何在測試驅動開發(TDD)中應用端到端測試,以及哪些場景中端到端測試可以取代單元測試
  • 如何在端到端測試中控制系統時間
  • 如何對排程任務來做端到端測試

這個課程適合打算或正在撰寫端到端測試,以及想要提升測試效率的開發和測試人員,或團隊負責人。

課程提供的解決方案幾乎都是開源的應用,不會因此衍生費用的沈重負擔,同時非常適合規模越來越大、背後架構/設計/實作越來越複雜的網路產品服務,提高開發人員在驗收測試驅動開發上的品質與減少溝通斷層的浪費,也大幅減少更版時需要大量測試人員手動驗證系統回歸測試的負擔。

自動化測試示範影片參考

進行安排

第一天

  • 實例化需求練習與解說
  • cucumber 把實例化需求的使用案例寫成 UI 端到端測試
    • 教材練習主要針對 Web 和 Android,然而其他 UI 框架(如 iOS/Flutter/React-Native/Winform 等)的應用和觀念是相通的
  • UI 測試程式碼重構和分層架構講解和練習
  • 用 cucumber 寫第一個 API 端到端測試並重構

第二天

  • 更多實務的案例練習透過 cucumber 來撰寫
  • 實例化需求 code smell 講解
  • 如何用 Docker 來建構端到端測試的執行環境講解
  • 如何用 JFactory 來準備測試預置資料講解及測試程式碼重構演示
  • 如何用 DAL 來驗證任意測試資料講解及測試程式碼重構演示
  • 回顧和 Q&A

課程特色

  • 本課程練習涉及的程式語言為 Java。 不過,沒寫過 Java 也不用擔心,課程中用到的 Java 知識簡單易懂。 而且,課程最後會發現使用解決方案之後的端到端測試,基本上不太需要撰寫額外的 Java 程式碼
  • 本課程練習產品用到的相關技術:Spring Boot,Vue.js (Web 前端),Android 前端,Mysql 等
  • 本課程練習測試用到的相關技術:Cucumber JVM,Mock Server,Selenium,Appium,Spring Data JPA,Docker等
  • 本課程將有10餘個 hands-on 練習,全程透過實戰演練來學習相關方法與技術
  • 本課程不會使用 PPT,沒有講義,會有現場書寫的海報幫助理解與重點摘要。 會建立 Discord 群,課前、課中、課後提供雙向的溝通、提問回答與課程內容補充。

報名資訊

票種

  • 早鳥票(4張) / 老友票 / 團體票:NT$ 26,000 元
  • 一般票:NT$ 28,000 元

註:同時購買 Classic TDD by Example 影音課的話,兩門課可同享 91 折優惠。

講師介紹

姚若舟

Odd-e 技術教練。

擁有超過23年的軟體開發經驗(涉及互聯網,行動互聯網,桌面和嵌入式軟體),為團隊提供專業敏捷和開發實踐的輔導和培訓。

他是中國敏捷社群的積極參與者,也是敏捷之旅2011 上海站和Scrum Gathering 2012/2014 上海大會的組織者,Scrum Gathering 2013/2016/2018 和 Agile China 2015 的話題評委,並在TiD 2014/2023 ,台灣 Java Conference 2018,敏捷之旅2012/2014/2015/2016/2017,Scrum Gathering 2012/2013/2014/2016,Agile Singapore 2013/2014,Agile Conference 2014發表演講。

他對軟體製程的各類實踐(如實例化需求,驗收測試,編寫高可讀性程式碼,單元測試,重構,遺留程式碼隔離,測試驅動開發(TDD),軟體設計,GOOS等)有著深入的 了解和豐富的實戰經驗,同時非常熟悉Java,JS,C++,嵌入式C,C#,Ruby等多種程式語言和相關技術框架。 他是軟體工藝宣言中文版翻譯的發起人,從2011年開始堅持透過Coding Kata來提升自己的程式設計技巧,並在不少公司,社區沙龍和會議中組織過多次代碼道場(Coding Dojo)和代碼 靜修(Coderetreat)的活動,發起了APAC Day of Coderetreat 2015的活動,參與了許多Global Day of Coderetreat 活動的組織和培訓支援。

目前,他專注於如何更好的將軟體製程實務與各類最新開發技術端結合,如何應用軟體製程幫忙新創公司實現0到1的突破,真正做到業務價值驅動的全端開發模式,以及如何 用技術教練路線圖的方法來培養和提升程式設計師的整體技能。

梁辰

資深工程師/架構師/訓練師。

擁有15年軟體開發經驗,曾工作於硬體儲存、金融、醫療等領域,掌握嵌入式、互聯網,桌面程式等相關軟體開發技術。 對敏捷開發實務(測試驅動開發(TDD、ATDD、BDD)、單元測試、程式碼重構、設計、持續交付等)有大量實戰經驗。 比較擅長C/C++,JAVA,RUBY,BASH等程式語言。

多次組織、參與技術社群活動(代碼道場(Coding Dojo),程式碼靜修(Code retreat)),在 2014 成都敏捷之旅演講《TDD在遺留程式碼上的應用》。

目前主要專注於幫助創業團隊產品原型 的快速開發和為技術團隊提供技術諮詢和培訓服務。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *