自動化測試導入的六個階段:從手動測試到自主測試

簡介:人工智慧讓未來更快、更有智慧的測試

在十幾年前,人工智慧(AI)、機器學習(ML)甚至是自動化,在軟體測試產業都還只是難以理解的概念。如今,自動化測試儼然已成為尋求實施敏捷和 DevOps 等現代開發方法或是滿足市場對高品質軟體需求的團隊之重要基石。

企業現在可以透過策略性地導入自動化測試,來縮短測試時間、加快產品上市速度、提高測試覆蓋率和準確性,並提升團隊效率。隨著人工智慧和機器學習開始融入測試和開發,自動化測試工具也搭載了智慧演算法,QA 團隊可以利用這些功能來強化測試工作。

雖然自動化測試的優勢已經廣泛被認同,但實際上只有不到一半的 QA 專業人員能夠將超過一半的測試工作自動化。大家都知道,圖形使用者介面 (GUI) 測試是最難自動化的,所以大部分的 GUI 測試案例還是得靠手動進行。針對 GUI 測試,42% 的 QA 團隊會採取手動與自動測試結合的方式,而 31% 的團隊則完全依賴手動測試。

對許多開發團隊來說,從手動測試過渡到自動化測試並不容易。這個轉變不僅涉及流程和基礎設施的調整,更重要的是需要改變測試團隊的思維模式,尤其是涉及到工作流程的時候。而且,要將自動化測試有效地納入測試流程中,必須確保它能像手動測試一樣可靠和準確。

從手動到自動化測試的六個階段

汽車工程師協會 (SAE) 將向全自動駕駛汽車的過渡分為六個階段,分為兩個駕駛階段:有人駕駛(監控駕駛)和無人駕駛(非監控駕駛)。

有人駕駛與無人駕駛

前三個階段強調駕駛員必須負責監控車輛並做出決策,而後三個階段則逐漸讓駕駛員放棄控制,最終甚至不需要駕駛員介入(也就是自動駕駛車)。對駕駛員來說,最大的轉變在於從「需監控」到「無需監控」的測試階段。

汽車邁向自動駕駛的六個階段

進階測試 vs. 自動化測試

從需要駕駛員到無人駕駛的轉變不僅適用於汽車產業,也同樣適用於軟體開發和測試。隨著每個階段的推進,軟體測試工具的功能不斷提升,賦予 QA 工程師和測試人員更多依賴自動化來加速軟體開發的能力。

在從手動測試到自動化測試的轉變過程中,前四個階段的重點是建立進階的自動化能力。測試人員或團隊逐漸從手動建立、執行及維護測試,轉向使用自動化工具來協助處理測試週期的各個部分。

在後兩個階段,團隊將加速測試流程,並逐步將控制權交給自動化工具。最終計畫是能達到完全自動化的階段,讓測試可以在沒有人工介入的情況下自動生成並執行。

從手動測試到自動化測試的六個階段

深入了解六個階段

完成這六個階段將幫助您順利從手動測試轉向自動化測試。在每個階段中,我們將探討:

  • 每個階段的定義
  • TestComplete 中的功能如何協助優化每個階段的 UI 測試
  • 推進到下一階段的最佳實踐

第一階段:手動測試

階段定義:手動測試是由測試人員模擬最終使用者來驗證軟體是否如預期運作的過程。測試人員的目標是透過實際操作產品,發現應用程式中的問題或缺陷。

在手動測試中,測試人員完全掌控測試過程,包括測試的建立、執行、維護、監控,以及處理測試失敗的復原方案。目前,超過一半的測試仍然是透過手動進行,尤其是在 UI 層面。儘管 API 自動化測試的使用日益增長,但在 UI 層的自動化測試轉型中,團隊往往面臨更大的挑戰。

第一階段最佳實踐:

  • 成為應用程式的專家:在手動測試階段,首先需要掌握應用程式的複雜性。這有助於確保用戶體驗的高品質,並在每次版本更新後增加對應用程式穩定性的信心。要做到這一點,最有效的方法是深入閱讀應用程式相關文件,並進行探索性測試,找出對用戶最重要的關鍵使用場景。 

第二階段:輔助自動化

階段定義:輔助自動化是成功轉型的第一步。在這個階段,QA 團隊或測試人員開始使用自動化工具來輔助他們的測試工作,包括建立和執行測試。不過,測試人員仍然需要手動管理和維護測試腳本以確保測試品質。

這是從手動測試轉向自動化測試的關鍵階段,因為這個時期需要為自動化測試框架奠定基礎。框架越結構化,您的自動化測試就越能提升效率、穩定性和可擴展性。

物件辨識在自動化 UI 測試中的重要性

目前市面上的大多數工具都具備滿足這一階段需求的功能。尤其對於 UI 測試來說,具有強大物件識別和物件儲存功能(如物件庫)的工具對自動化測試的成功至關重要。

自動化 UI 測試工具(如 TestComplete)透過文件物件模型 (DOM) 層來識別物件。該工具會捕捉用戶介面上的元素,每個捕捉到的物件都包含用來描述它的屬性,例如像素位置、顏色、處理程序 ID 以及文字內容。

TestComplete 中的自動化測試工具功能

在這個階段,對於自動化入門者來說,一個能準確識別物件且無需撰寫腳本即可輕鬆建立和執行測試的工具,將是非常有幫助的選擇。

 

Object Spy要成功進行自動化 UI 測試,工具必須能夠準確識別並儲存使用者介面上的物件。在 TestComplete 中,「Object Spy」可以幫助您檢視應用程式中任何 UI 元件的屬性和方法,這些元件可以被加入到物件庫(又稱之為 Name Mapping)的階層結構中,方便後續使用。

錄製(Record)和回放(Replay):錄製與回放功能允許測試人員透過錄製螢幕上的使用者動作,例如按鍵、輸入文字和點擊,來建立 UI 測試,然後在不同情境下回放這些動作,並比較結果是否符合預期行為。這項技術的好處是幾乎不需要撰寫程式碼,因此任何人都可以輕鬆建立和執行自動化測試。在 TestComplete 中,開始進行測試自動化只需在「Record and Replay」工具列上點擊「Record」即可。

關鍵字驅動測(Keyword-Driven Testing:在關鍵字驅動測試中,自動化 UI 測試是由許多關鍵字組成的,這些關鍵字定義了測試中要執行的動作。這些動作可以是先前提到的滑鼠動作、點擊,還有像是拖拉、開啟和關閉應用程式視窗等。對於剛開始接觸自動化的人來說,最簡單的方式就是使用「Record and Replay」功能來建立關鍵字驅動測試。

在 TestComplete 中,您可以將一系列關鍵字組合起來,建立動作或測試。在下圖中,您可以看到左側顯示的是動作(Operations)或測試動作,右側是測試案例(Test Case)。TestComplete 讓團隊或個人能夠透過簡單的滑鼠點擊,輕鬆建立複雜的自動化測試場景,完全不需要具備程式語言的專業知識。

資料驅動測試和資料產生器若是將資料寫死到測試中,意味著該測試只能用於測試單一情境。若要測試不同的資料集,就需要一個新的測試。

然而,測試人員經常需要重複執行測試,這樣的流程不僅耗時,還會讓維護變得繁瑣。對於想轉向自動化的人來說,這並不實際。為每個情境建立單獨的測試會在自動化旅程的初期就形成瓶頸。TestComplete 能夠幫助您將測試資料與測試指令分離,這樣您就可以使用不同的輸入資料集來執行 UI 測試。

您所需的資料可以儲存在外部的 Excel 或 CSV 檔案中,並在測試指令中使用。然而,手動產生測試資料可能會耗費大量時間。TestComplete 內建的資料產生器(Data Generator讓您能夠快速產生資料集,如電子郵件地址或身分證字號。正如下圖所示,您只需要指定所需的參數即可。

使用 TestComplete 進行資料驅動測試的好處在於,它能夠透過縮短測試時間、增加覆蓋範圍來提升團隊效率,因為您可以測試更多情境,同時減少維護工作量。這些都是邁向自動化流程的重要關鍵。

第二階段最佳實踐

  • 為測試腳本選擇一種語言-當您剛開始建立自動化測試框架時,您應該選擇一種語言來建立測試。透過撰寫和重用程式碼,將有助於培訓員工,並促進測試人員與開發人員之間的溝通。
  • 為每個測試建立測試標籤-概述您的測試類型,並定義每個測試在框架中的角色。透過適當的測試標記,您可以設計一個可重複使用的框架。
  • 將每個測試與需求編號連結-將每個測試與需求編號連結,能幫助您更有效地監控測試覆蓋率和測試進度。這同時也會讓測試結果分析,以及將測試結果匯入測試管理工具變得更加容易。

第三階段:部分自動化

階段定義:在這個階段,測試自動化工具將負責處理測試腳本建立、維護、執行的各個面向,但測試人員仍需負責監控測試流程及應用程式的運行狀況。

TestComplete 中的自動化測試工具功能

瀏覽器和裝置循環:在 Web 和 Mobile 測試中,確認您的應用程式能在眾多不同的瀏覽器和裝置上正常運作是非常重要的。但如果需要為每一種配置單獨建立測試腳本,對於需要快速推進的團隊來說,這樣的做法無法擴展。

在 TestComplete 中,您可以利用Brower Loop」(瀏覽器循環)來啟動多個 Web 瀏覽器,並讓測試工具在每個瀏覽器中執行測試案例。同樣地,針對原生行動應用程式的測試,您可以在 TestComplete 中設置Device Loop」(裝置循環),在您選擇的行動裝置上執行測試。

在這兩種情境中,工具會負責在多個瀏覽器和裝置上執行相同的網頁或行動測試,這樣可以加快測試週期並減少團隊執行重複測試步驟的工作量。測試完成後,測試人員需要分析結果並確認測試成功執行,以確保應用程式的品質。

Data-Driven Loops 資料驅動迴圈:在第二階段,我們討論了資料驅動測試的概念、重要性以及 TestComplete 的資料產生器如何節省時間。設定資料驅動迴圈是您在 TestComplete 中用來透過單一測試執行多組資料集的操作。您只需選擇資料來源,系統就會自動運行迴圈來測試不同的資料集。

智能修復與更新:TestComplete 內建一個非常實用的功能是它能深入分析測試失敗的原因,並提供修復常見 UI 測試錯誤的建議。

在 TestComplete 中執行測試後,您可以透過檢視測試日誌來分析結果,只需點擊任何錯誤,即可輕鬆找到是哪個測試步驟導致測試失敗。這讓測試人員能夠更快速地解決問題並提高測試效率。

在 UI 測試中,最常見的錯誤之一是「Object Not Found」,也就是找不到物件。當應用程式的底層程式碼被更新時,物件屬性可能會改變,GUI 物件的位置也可能發生變動,這可能 UI 測試變得非常脆弱。

在 TestComplete 中,當發生「Object Not Found」的錯誤時,工具的智能建議系統會通知您此錯誤,並提供修復問題的建議。

當開發團隊對程式碼進行更改且物件屬性有變更時,TestComplete 會將這些更新與您現有的物件庫進行比較。如果發現任何不一致之處,TestComplete 會通知您有更新。此外,如果有任何物件或屬性不再被使用,工具也會通知您。

有了智能建議系統,維護自動化 UI 測試變得前所未有的簡單。對於剛開始自動化的人來說,了解測試失敗的原因並知道如何修復是成功的關鍵之一。

第三階段最佳實踐:

  • 建立共用工具:為常見的使用者介面(UI)動作(例如選單操作和文字輸入欄位)建立共用工具。這些是測試的基本組件,您可以將它們組合起來形成測試邏輯,並在自動化測試中重複使用。這也有助於檢視測試的所有人判斷錯誤來源究竟是測試腳本的問題還是真正的應用程式缺陷。
  • 建立驗證點:驗證點有助於測試維護。例如,如果您需要驗證某個文字欄位只能接受數字而非文字,那麼只需在一個地方更新驗證點,而不需要在每個測試中都進行修改。驗證資料應該是共用的。不同的輸入工具應該能夠接受先前步驟中建立的資料物件,這樣您可以將項目連接在一起。
  • 記錄自動化測試的進展:在建立自動化測試時,可能會很容易忘記為什麼或如何將應用程式的某些部分自動化。因此,整個測試過程中,您應該記錄並做筆記,包含資料準備、環境設定以及驗證點的建立。透過建立良好的記錄機制,您可以在下一個測試週期開始時,運用這些資料進行反饋和持續學習。

第四階段:加速自動化

階段定義:在第四階段,自動化工具為測試建立、執行、維護的各個面向取得更多控制,以加速自動化流程,但測試人員仍需負責監控應用程式,並確保在條件不變的情況下維持品質。

在這個階段,您將邁出從手動測試到自動化測試的下一步,專注於加速您的自動化測試工作。這將幫助您將測試時間縮短到原來的幾分之一。此時,您的自動化框架應該已經建立,並且您應該對如何在單一裝置或多個裝置上建立和執行 UI 測試有了深入的了解。

TestComplete 中的自動化測試工具功能

分散式測試和平行測試:分散式和平行測試都可以讓您的團隊同時在不同的機器上運行 UI 測試,這意味著您可以增加測試覆蓋率並在更短的時間內完成更多工作。雖然兩者相似,但分散式和平行測試有著不同的使用情境。

分散式測試:在分散式測試中,通常會有一個測試包含多個元件或步驟,這些步驟分佈在不同的機器上執行。這些機器會在測試執行過程中相互協調,以確保測試依照次序進行。例如,測試一個像 Slack 這樣的聊天平台時,您需要執行一個測試,來確保訊息可以在兩台不同的電腦上收發。某一台機器上的步驟必須等待另一台機器完成對應的步驟後,才能繼續執行測試。在 TestComplete 中,您可以使用工具的 Network Suite 來實現這一點。

平行測試:平行測試則是讓功能測試同時在多台機器上執行,但這些測試彼此之間不會互動。在 TestComplete 中,您可以透過其附加模組 TestExecute 來實現平行測試。

在這兩種情境下,TestComplete 負責在預定的瀏覽器、裝置或虛擬或真實機器上執行測試。只要初始的測試腳本和環境不變,工具將會自動使用相同的測試案例來同時進行測試。這將有效縮短測試週期,並讓團隊成員可以將精力放在更重要的任務上,而不必浪費時間重複建立測試和測試步驟。

CI/CD 工具整合:持續整合和測試是建立持續交付引擎的基礎。持續整合是指將開發 Build 拆分成較小的 Package 進行管理,而持續測試則是透過自動化測試,讓團隊能夠更早發現問題並即時獲得有關業務風險的回饋。

要成功落實持續整合,可以使用像 Jenkins、Bamboo、Travis CI 等工具,在每次 Build 後於一台或多台電腦上自動執行測試,定期 Build、測試和部署軟體。

許多開發團隊會使用像 GitHub 這樣的版本控制庫來幫助開發人員儲存和管理程式碼。CI 工具(如 Jenkins)會持續監控來自 GitHub 的變更。一旦偵測到變更,它會拉取新的原始碼並執行單元測試和進一步的分析。如果單元測試失敗則可迅速發現缺陷;如果單元測試全部通過,則可以從 TestComplete 這樣工具透過指令觸發任何 CI 系統,來自動控制並針對應用程式運行自動化 UI 功能測試。

TestComplete 可以與 Jenkins、Bamboo 和 Git 以及其他 CI/CD 工具和版本控管系統整合,這使它成為一個強大的自動化工具,並能無縫整合在任何 CI/CD Pipeline 中。

第四階段最佳實踐:

  • 保持工作區乾淨 – 在每次工作之前或之後清理工作區,以確保在 Build 或測試階段開始時有一個「乾淨」的環境。隨著每次 Build,環境很容易變得混亂和無序。例如,當 Java 版本升級、需要更換 Build 工具、Git 中的專案被重構或重新命名,或是新專案被建立或淘汰時,您的工作區很快會變得過時。保持工作區乾淨有助於更好地管理每次 Build 階段的 Pipeline。
  • 使用平行 Build – 平行 Build 能加快開發和測試執行時間。Jenkins 具備這項功能,可以讓您在一台或多台測試電腦上快速完成測試。
  • 使用版本控制管理 – 版本控制管理工具可以儲存和管理您在交付管道中使用的程式碼、腳本和配置。Jenkins 與 Git 配合良好,能夠捕捉變更並提供 Build 時間等統計數據,幫助在不犧牲品質指標的情況下加快交付速度。

軟體測試的未來:第五階段與第六階段

在 QA 週期的每一個階段,我們都可以看到 AI 的應用逐步滲透,以減輕關鍵的軟體開發問題,並加速測試的建立、維護和執行,這使 AI 成為現今軟體團隊必須掌握的最重要技術。第五和第六階段,即進階的無監控自動化,代表著軟體品質的未來。在這些階段,工具廣泛融入 AI 和機器學習(ML)功能,測試人員逐漸將更多的日常責任交由工具來管理,減少對測試過程的控制。

第五階段:無輔助自動化

階段定義:在第五階段,自動化工具為測試建立、執行、維護的各個面向取得更多控制,以加速自動化進程。而當應用程式的條件發生變化時,測試人員對監控品質的責任逐漸減少,工具開始接管更多的測試管理工作。

TestComplete 中的自動化測試工具功能

TestComplete 的 AI 驅動視覺識別是自動化測試中首個將物件識別功能交由工具管理的步驟。AI 驅動的視覺識別使用光學字符識別(OCR)來提取和驗證動態圖像、圖表、主機和 PDF 中嵌入的文字。

即使 UI 層發生變更或圖像更新,工具不依賴於測試腳本中寫死的標識符或屬性,而是能夠根據螢幕上顯示的內容進行識別。透過將 AI 應用於 OCR,物件庫可以保持最新,讓工具在維護方面接管更多任務,並在測試應用程式的更新部分時更加可靠。

與其他技術相比,TestComplete 的 AI 驅動視覺識別精確度提升了一倍,使 UI 自動化工程師能夠識別和測試先前無法識別的應用程式元件,並將更多的控制權交給工具管理。

第六階段:自主測試

階段定義:在第六階段,自動化工具將被重新定義為自主工具,即工具本身能夠全面掌控測試腳本的建立、維護和執行。它將能從測試失敗中學習,並根據變化的條件做出決策,決定如何建立和執行新的測試。

目前,自主軟體測試解決方案仍處於初期階段。功能測試工具已經採用了各種自主能力,從應用程式結構的發現到預測性自我修復,再到智慧化的錯誤追蹤。然而,端到端的自主測試解決方案尚未被大型企業廣泛採用。

結論:成功需要有混合測試解決方案

並非每個組織都已經準備好進行真正的自主測試。要全面接受自主測試,需要人與機器的結合,來確保 AI 驅動系統的可擴展性、穩定性和安全性。要讓團隊順利從手動測試過渡到進階自動化,再到自主測試,必須有能夠結合人類與機器能力的混合引擎。

企業可以透過混合測試解決方案,利用模組化的 AI 投資來解決關鍵問題,並減輕耗時任務的負擔。例如,使用結合屬性識別與 AI 視覺識別的混合自動化測試工具,開發團隊可以在測試建立和維護上實現高度的準確性與便利性。

屬性辨識技術依賴於將物件屬性寫死在腳本中,而視覺辨識則依靠工具動態捕捉 UI 元素。結合這兩者的優勢,軟體團隊能夠同時享受屬性辨識帶來的穩定性與準確性,以及 AI 視覺測試提供的速度與可擴展性。

隨著科技加速進步,各行各業的開發團隊都在探索如何運用這些技術來開發高度穩定、可擴展且安全的應用程式。面對眾多開發和品質管理方法與工具的選擇,團隊有時會感到這些工具不夠完善或難以使用。

將 AI 與傳統自動化測試工具結合,建立一個混合引擎,這樣能幫助許多團隊從手動測試順利過渡到進階自動化測試。重點是,讓自動化測試成為團隊獲得高品質軟體的最好幫手。

 

文章來源: Six Stages from Manual to Autonomous Testing, SmartBear 2024