PHPUnit 自動化測試大作戰【CH01】

閱讀時間約 4 分鐘

初遇自動化測試

在數年前,我剛從第一份工作離職,轉職到第二份工作, 新工作是在一個大集團的IT部門,職位是後端工程師。 當時集團正準備導入一個由子公司開發的微服務系統, 使用的技術是PHP 8 及 Laravel 9 因為該系 統在子公司運作得不錯, 因此集團高層想將它擴展成,全集團都可使用的規模, 也因此需要招募人手來協助進行(而那個人手就是我)。

到職當天,部門副理協助我建置好環境, 並告訴我子公司工程師在開發此微服務系統時,有寫了很多自動化測試, 建議我可以由閱讀自動化測試案例,來了解這個微服務系統的功能。 這就是我第一接觸到自動化測試,以及 PHPUnit 這個工具。

什麼是自動化測試?

讓我們來看看維基百科的定義:

In software testing, test automation is the use of software separate from the software being tested to control the execution of tests and the comparison of actual outcomes with predicted outcomes.

換言之,所謂 自動化測試 ,指的是使用其他軟體來自動測試待測軟體、比較實際結果與預期結果之異同、生成測試報告的這一個過程。

簡單地說,就是用測試程式來測試原始程式的邏輯,是否符合預期。

為什麼要撰寫自動化測試?

這時候一定會有人問,手動測試不香嗎,為什麼要用自動化測試?多花時間寫測試值得嗎? 的確,大多數自動化測試能做到的事情,手動測試都能做到, 且撰寫自動化測試不是毫無成本, 有時甚至會花上比開發功能本身,更多的人力成本來撰寫測試。

但若我們從另一個角度來探討, 自動化測試基本上只有第一次撰寫時最花時間,後續執行測試時,都是以秒來計算 而且是讓電腦自動執行測試程式來進行測試, 只要測試腳本沒問題,那電腦就會以正確的方式進行測試。

反觀手動測試,因為執行測試的是人, 而只要有人介入,就有一定的人為出錯率, 有可能是測試時漏了某個動作,導致測試要重來; 有可能是漏了某個測試資料,導致測試又要重來; 有可能是漏了某項測試案例,導致發生了改A壞B,上線了才爆炸; 有可能測試者心情不好,沒有心力按下測試鍵。 以上種種,都是人為手動測試可能發生的情況, 若是使用自動化測試,這些情況大多可避免。

此外,手動測試花的是人力,通常以 分鐘來計算,這也是不小的成本。 而自動化測試,會花到的成本大概只有 幾秒鐘的電力。

自動化測試的優點與缺點

讓我們來總結一下自動化測試的優缺點:

優點

  • 交給電腦來執行測試程式,執行測試時無需消耗人力,也不會喊累
  • 避免人為因素導致的出錯
  • 可以計算測試覆蓋率,了解程式庫中有多少部分有被測試

缺點

  • 需要花費額外成本開發測試程式
  • 需要花費額外成本建立測試環境

TDD與自動化測試的關聯

許多人常會將自動化測試,與近年流行的測試驅動開發(TDD, Test-Driven Development)掛勾在一起,但我認為實際上兩者是描述不同的概念。

自動化測試,指的是一種測試軟體的測試方式; 測試驅動開發,指的是一種先擬好測試,再撰寫程式邏輯的,開發流程。

使用自動化測試,未必也採用了測試驅動開發,反之亦然。

舉例來說,小明是一個API開發者, 每當他在開發API時,他會先撰寫程式邏輯,接著進行手動測試驗證, 確認無誤後,再撰寫自動化測試程式。

而另一位API開發者小華, 他會先在紙上擬好各功能的測試案例, 包含測試資料準備、測試流程、預期結果等, 接著用這些案例測試程式。 因為對應的程式邏輯根本尚未開發,因此一定都不符測試預期, 這時小華再開始開發各功能的程式邏輯, 並在每次開發完一項功能時,就執行該功能相關的各測試案例, 直到所有測試案例都被滿足的當下,即為開發完成。

在小明的例子中,他採用了自動化測試來測試程式,但沒有使用測試驅動開發; 在小華的例子中,他採用了測試驅動開發的開發流程,但沒有使用自動化測試。

本系列文章討論範圍

在這個系列中,我將與大家分享這數年來使用 PHPUnit 的各種經驗,以其各種測試情境,主要內容包含 常用測試函數、API測試、資料庫測試、畫面測試、Mocking、測試覆蓋率計算、Seeder、Data Provider等內容,望能對初學PHPUnit及自動化測試的同好們有所幫助。

下一篇來為大家介紹環境建置。

如果您喜歡這篇文章,歡迎加入追蹤以接收新文章通知 😄

參考資料:

  1. https://en.wikipedia.org/wiki/Test_automation
  2. https://en.wikipedia.org/wiki/Test-driven_development

本系列文章目錄

avatar-img
8會員
279內容數
歡迎來到 WilliamP 的沙龍天地,在這裡將與各位讀者探討各種主題,包刮高中數學題庫、PHP開發經驗、LINE聊天機器人開發經驗、書摘筆記等,歡迎交流!
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
在電商行銷部三年,薪水漲幅無感、加班沒加班費,讓我心灰意冷。正當打算離職時,工程部主管邀我轉職工程部。憑藉GA追蹤和處理bug的經驗,我順利轉職。從模仿文件開始,學習資料架構和SQL,不用寫程式但薪水和成長性更高。這次轉職讓我看到更多可能性,工作生活變得更有趣了!
Thumbnail
今天要說的是我在前公司砸鍋的故事。 前公司是軟體公司,我在那邊擔任前端工程師,負責維護公司後台網頁的介面跟資料串接。 先交代一下故事背景:
我不知道跟我有沒有關係,我剛出社會的時候剛好到一家還算蠻大的網站公司,那個時後公司很多技術很不成熟,所以他們問我我都是怎麽測試網站,總之呢!狗眼看人低,他們以為我只是點開每一個連結檢查網頁,所以他們覺得自己很厲害就開始寫一些只會點開網站的程式,事實上網站測試是一頁一頁全憑經驗預知道客戶是怎樣使用一頁
Thumbnail
先來幫大家複習一下我的轉職歷程,簡短來說,我是先到了一間軟體公司負責軟體的中英翻譯、行銷,讓我對打造軟體產品起了濃厚的興趣。 轉職前端後,我在台灣北部知名的接案公司待了一年半,後續開啟我的自有產品開發之路,以撰寫文章當下的現狀來說,我在一間台灣知名老牌的財經平台寫了八個月的軟體產品後,投入到⋯⋯
Thumbnail
前文提到我按照某公司培訓營的指示自學了Scratch,並完成了一個不太理想的「半成品」程式。幾個月後,我參加了另一個課程,不同的是這次是使用PHP,為期三天(週三至週五),每天上課四小時,總計約12小時。課程內容包括基礎語法與環境架設、網路爬蟲、實際構建購物車並與資料庫進行串接。
Thumbnail
#職場故事 #網頁設計 #前端工程師 #轉職 #跨領域 八、軟體公司的前端工程師之路 新公司不是做網頁專案的,而是自己研發資安軟體的公司,主要只有一個大專案,跟很多客製化的需求。 我在這次轉職時有考慮到,我其實不太喜歡一個案子做完就結束的感覺,因為那會讓我覺得這些作品做完好像也不是我的東西..
Thumbnail
第一份正職工作 在iot公司擔任後端工程師,一上工就使用先前沒用過的php/laravel,也馬上負責公司產品的架構規劃,先前資料庫只有簡單記載使用者跟使用者的一些設定,很多地方有資料不一致的問題,產品內容還有很多實體的關係沒有被定義進資料庫都是這次改版我要做的事情。 改版納入公司、機器
Thumbnail
#職場故事 #網頁設計 #前端工程師 #轉職 #跨領域 五、網頁設計師要做什麼? 說實話,每間公司不一樣。 我不是只面試一間而已,光是網頁設計我應該至少投了十間以上,我問到的職務內容跟範圍不全然相同。依照公司規模和用的框架,會有滿大的差別。 網頁設計主要分成以下工作:
Thumbnail
#職場故事 #網頁設計 #前端工程師 #轉職 #跨領域 一、為什麼想轉職? 初次踏入網頁設計這一行,是在我26歲時。 為什麼想轉行呢? 在這之前,我是個畢業於化學工程學系,每天在實驗室中跟檢體搏鬥的化驗員。你以為實驗室化驗員薪水很高嗎?並沒有,起薪23k而已,你做好幾年把考核...
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
在電商行銷部三年,薪水漲幅無感、加班沒加班費,讓我心灰意冷。正當打算離職時,工程部主管邀我轉職工程部。憑藉GA追蹤和處理bug的經驗,我順利轉職。從模仿文件開始,學習資料架構和SQL,不用寫程式但薪水和成長性更高。這次轉職讓我看到更多可能性,工作生活變得更有趣了!
Thumbnail
今天要說的是我在前公司砸鍋的故事。 前公司是軟體公司,我在那邊擔任前端工程師,負責維護公司後台網頁的介面跟資料串接。 先交代一下故事背景:
我不知道跟我有沒有關係,我剛出社會的時候剛好到一家還算蠻大的網站公司,那個時後公司很多技術很不成熟,所以他們問我我都是怎麽測試網站,總之呢!狗眼看人低,他們以為我只是點開每一個連結檢查網頁,所以他們覺得自己很厲害就開始寫一些只會點開網站的程式,事實上網站測試是一頁一頁全憑經驗預知道客戶是怎樣使用一頁
Thumbnail
先來幫大家複習一下我的轉職歷程,簡短來說,我是先到了一間軟體公司負責軟體的中英翻譯、行銷,讓我對打造軟體產品起了濃厚的興趣。 轉職前端後,我在台灣北部知名的接案公司待了一年半,後續開啟我的自有產品開發之路,以撰寫文章當下的現狀來說,我在一間台灣知名老牌的財經平台寫了八個月的軟體產品後,投入到⋯⋯
Thumbnail
前文提到我按照某公司培訓營的指示自學了Scratch,並完成了一個不太理想的「半成品」程式。幾個月後,我參加了另一個課程,不同的是這次是使用PHP,為期三天(週三至週五),每天上課四小時,總計約12小時。課程內容包括基礎語法與環境架設、網路爬蟲、實際構建購物車並與資料庫進行串接。
Thumbnail
#職場故事 #網頁設計 #前端工程師 #轉職 #跨領域 八、軟體公司的前端工程師之路 新公司不是做網頁專案的,而是自己研發資安軟體的公司,主要只有一個大專案,跟很多客製化的需求。 我在這次轉職時有考慮到,我其實不太喜歡一個案子做完就結束的感覺,因為那會讓我覺得這些作品做完好像也不是我的東西..
Thumbnail
第一份正職工作 在iot公司擔任後端工程師,一上工就使用先前沒用過的php/laravel,也馬上負責公司產品的架構規劃,先前資料庫只有簡單記載使用者跟使用者的一些設定,很多地方有資料不一致的問題,產品內容還有很多實體的關係沒有被定義進資料庫都是這次改版我要做的事情。 改版納入公司、機器
Thumbnail
#職場故事 #網頁設計 #前端工程師 #轉職 #跨領域 五、網頁設計師要做什麼? 說實話,每間公司不一樣。 我不是只面試一間而已,光是網頁設計我應該至少投了十間以上,我問到的職務內容跟範圍不全然相同。依照公司規模和用的框架,會有滿大的差別。 網頁設計主要分成以下工作:
Thumbnail
#職場故事 #網頁設計 #前端工程師 #轉職 #跨領域 一、為什麼想轉職? 初次踏入網頁設計這一行,是在我26歲時。 為什麼想轉行呢? 在這之前,我是個畢業於化學工程學系,每天在實驗室中跟檢體搏鬥的化驗員。你以為實驗室化驗員薪水很高嗎?並沒有,起薪23k而已,你做好幾年把考核...