自動化回歸測試全接觸:概念、方法和實踐

2020-12-17 51CTO

眾所周知,在軟體開發的生命周期中,開發人員往往需要修改已有代碼,或將新功能引入目標系統。不過,此類更改可能會通過影響現有功能對系統造成破壞。因此,我們需要執行一系列測試,以驗證新的代碼對系統不會造成負面影響。這便是回歸測試。

在本文中,我們將從回歸測試的概念入手,討論其實施的重要性,以及那些實現自動化測試的方法與優秀實踐。

什麼是回歸測試?

回歸測試是一種軟體的測試形式,能夠涵蓋軟體系統中的各種功能性和非功能性的元素。我們可以在執行如下操作後,通過它來發現潛在的問題或錯誤。

部署新的功能添加新的模塊修復現有缺陷重構程序代碼更改系統配置改善應用程式的性能針對上述任何事件,如果採用手動的方式測試整個系統,顯然既費時又費力。開發團隊往往希望通過自動化測試的方式,來加快整個工作流程,以實現每修改一次代碼,都能執行一系列預先開發好的測試腳本。據此,他們能夠在進行連續性回歸測試的同時,降低測試的總體成本,減少人為錯誤,並保持更高的準確性。

為何要使用自動化回歸測試?

如前文所述,我們在對每個系統組件進行下一階段開發之前,需要對其進行徹底的測試,否則就會積累所謂的技術債(technical debt)。這不僅成本高昂,而且對於開發工作流程來說也是危害極大的。

值得注意的是,錯誤的修復成本會在軟體開發的各個階段呈指數性增長,並且會在產品發布的時候高達30倍以上。下圖是此類費用隨時間增加的統計圖。

可見,通過在開發的早期階段進行徹底的測試,不但可以及時地發現錯誤,還能夠避免糾正錯誤所帶來的高昂成本。這也正是自動化回歸測試發揮作用的地方。當然,除了改進錯誤檢測的效率,自動化回歸測試還能夠為開發工作、及其流程帶來如下好處:

更高的測試覆蓋範圍 - 自動化能夠讓我們通過運行更多的回歸測試,來檢查系統的各個方面。顯然,這是手動回歸測試所無法達到的徹底水平。更高的測試投資回報率 - 儘管自動化測試有時會引發更高的初期投資,但是從長遠來看,由於軟體開發和維護是一個連續性的過程,因此自動化回歸測試往往可以在可預見的將來,為團隊節省大量的時間與金錢,並能收穫更大的回報。更少的人力成本 - 使用自動化測試平臺時,團隊只需一名QA(質量檢測)工程師即可測試腳本。相反,手動回歸測試將需要數名專業人員,才能達到相似的效果。因此,自動化大幅減少了回歸測試所需的總體時間和人力成本。增強的穩定性 - 手動回歸測試的結果,往往取決於團隊中QA專家的專業知識和測試方法。而自動化卻能夠確保用相同的專業技術,來測試整個系統的方方面面。重複性 - 自動化回歸測試可以按需隨時執行,而無需顧及QA團隊是否有時間和精力。而手動測試則需要為每個新項目配備足夠的QA人員。如何執行自動化回歸測試?

正如執行任何其他類型的自動化軟體測試一樣,我們需要遵循預定義的測試路線,才能成功地完成回歸測試。

正所謂「工欲善其事,必先利其器」,我們在執行自動化回歸測試前,首先也是最重要的一步是:選擇合適的工具。目前市場上的自動化回歸測試工具林林總總,其中比較流行的包括Selenium、TestComplete、Ranorex Studio和Perfecto。

接著,我們可以按照如下四步來開展自動執行回歸測試:

發現和計劃 - 首先概述產品將要發布的範圍,確定哪些測試用例可能會被包含在回歸測試的套件中。設計和開發 – 在確定測試項目需包含的所有任務後,開始為每個測試用例編寫自動化的腳本。測試執行 – 運行測試,並在執行過程中識別錯誤。測試結束 - 最後,記錄和提交測試報告,進而執行其他的後續測試。自動化回歸測試的方法

目前,業界通常會使用如下三種方法,來執行自動化回歸測試。您該具體選擇哪種方法,則完全取決於開發的優先級、代碼庫的大小、以及可用在測試中的資源。

全部重新測試 - 有時候,在代碼庫上執行所有現有的回歸測試是一種最佳選擇。儘管需要初期大量的投入,但是只要設計合理,就能夠發現一些不需要回歸的環節。當然,客觀地說,該方法對於大型代碼庫幾乎是不可行的。基於優先級重新測試 – 按照重要性和緊迫性的順序,執行測試用例。在確定具有最高優先級的測試用例時,往往需要QA專家給出專家意見。而且,優先級測試應涵蓋所有關鍵的代碼路徑,以發現那些嚴重的錯誤。選擇性重新測試 - 您可以選擇回歸測試套件中的一個子集來執行,而不是重新運行整個測試套件。在後續的回歸周期中,您只需執行那些可以在代碼庫上復用的測試用例,並將過時的用例剔除出去。此外,您還可以使用混合回歸測試技術,即:先執行優先級測試,然後再運行其他必要的測試,以避免遺漏並實現全覆蓋。

自動化回歸測試的實例

如前所述,我們可以根據對代碼庫所進行的更改,來採用不同形式的回歸測試。有些是在添加新的功能後執行,而有些是在修復了系統中已知錯誤後執行。下面,讓我們來討論回歸測試的一些實際案例:

場景1:假設有一個具有資料庫管理功能的應用,其核心功能有三個,即:數據添加、數據保存、以及數據刪除。當我們在新版本中,引入允許用戶對數據進行修改的「數據更新」功能時,則需要通過執行回歸測試,來確保該功能不會影響到既有的「添加」、「保存」和「刪除」功能。場景2:某個系統具有管理員、版主、客戶和作者,四個角色模塊。如果管理員模塊出現了錯誤,那麼就會導致作者使用其憑據,以版主的身份登錄到後臺系統中。因此,測試團隊需要反饋開發團隊修復該錯誤。而在實施了有效修復後,測試團隊將再次檢查系統,以確保具有修復功效的代碼能夠正常工作,且不會影響到其他模塊與功能(該過程便是回歸測試)。根據上述的場景,我們來討論其中的登錄驗證功能,即:用戶輸入其登錄憑據(如用戶名和密碼),然後單擊登錄按鈕。其中,用於測試此功能的分步實施代碼如下:

如下代碼則展示了當我們對該功能性代碼進行測試時,生成的具有登錄功能的類:

上述代碼實為手動回歸測試的示例。如果我們使用諸如Perfecto之類的自動化回歸測試工具,則無需對測試腳本進行硬編碼。我們只需做到:首先,確定可能用到的回歸測試,並記錄每個測試用例的工作流程。接著,使用Perfecto儀錶板對測試方案進行建模。如下圖所示,我們可以讓Perfecto協助將工作流程轉換為測試腳本。

在工作流程準備就緒後,我們即可執行測試並捕獲結果。而在完成測試之後,Perfecto將返回對應的測試通過或失敗狀態,並為每個執行的命令提供詳細的反饋。據此,您可以相繼開展分析測試結果,生成報告,以及重新測試更改等工作。

自動執行回歸測試的最佳做法

在執行回歸測試時,開發團隊往往會碰到包括:時間與資源有限,測試時間過長,測試用例增多等各方面的挑戰。為了避免「踩坑」,並能夠成功地完成自動化回歸測試,我在此為您羅列了如下實踐建議:

選用可靠的自動化工具,以擴大測試的範圍,並利用其自動化的優勢。在整個項目中採用常規化的測試方案。通過獨立可重用的回歸測試,以節省時間。在修改代碼庫後,應重新運行過往已成功完成的測試。通過定期更新回歸測試包,以確保與更新的產品版本相對應。為每個新發現的錯誤編寫各種測試。確保所有集成測試用例都被包含在回歸測試的套件中。希望上述實踐經驗能夠幫助您平滑地開展回歸測試,並獲得預期的結果。

小結

回歸測試是在減少潛在技術債,並改善軟體項目維護態勢的有效方法。藉助自動化測試工具,開發團隊不但能夠簡化測試的整體工作量,並且可以確保產品在交付到生產環境之前的穩定性與代碼質量。

相關焦點

  • 優化回歸測試的三種方法
    讓我們看看質量保證團隊可以做的,以優化他們回歸測試的一些事情:  回歸測試用例選擇  標準測試用例的索引選擇是回歸測試覆蓋的最佳引入點。測試用例的標準化級別應允許版本更新。級別高的是自動測試,以及時間和邊界要求。
  • 技術中臺之DevOps自動化測試實踐
    4.如何在DevOps中執行rf腳本並生成測試報告一、為什麼採用RobotFramework?針對接口、web網頁、app自動化測試的工具有很多:selenium、jmeter、soapui、robotFramework、postman等,如何選擇適合自己的自動化測試工具?此時便要看具體需求和業務。
  • 視覺回歸測試—UI自動化的最後一公裡
    視覺回歸測試我們認為如果一個界面通過第一次的人工驗證並發布之後,它就是一個正確的標準界面,並且是包含了人工測試價值的資產。當下一次測試的時候,這部分價值就應該被保留並重用起來,用於減少新的一次測試的時間,從而實現界面的快速回歸測試。
  • 回歸測試的最優方法
    此外,隨著新的功能和更多組件的增加,軟體應用程式變得越來越大,回歸測試包,也就是一個測試用例庫,被開發並運用於每次應用程式的新版本發布。  選擇回歸測試包的測試  如先前所述,對於每個應用軟體的新版本而言,需要執行三組測試集:回歸測試,特定版本的測試和缺陷的測試腳本。選擇測試用例的回歸測試包不是一件容易的事。選擇測試集以及回歸測試包需要仔細的思考和注意力。
  • 淺談冒煙測試和回歸測試
    冒煙測試引入到軟體測試中,是指測試人員在正規測試一個新版本之前,先投入較少的人力和時間驗證一個軟體的主要功能,如果主要功能都沒有實現,則打回開發組重新。這樣做的好處是可以節省大量的時間成本和人力成本。何為回歸測試?
  • 自動化測試的測試模型有哪些?優缺點分別是什麼?
    自動化測試的測試模型有哪些?測試行業從業者需要掌握的測試模型有線性測試、模塊化驅動測試、數據驅動測試以及行為驅動測試 ,這些測試模型的優缺點也十分鮮明。下面我們一起來詳細分析一下吧!例如,自動化測試的執行需要保持測試用例的獨立性和完整性,所以每一條用例在執行時都需要登錄和退出操作,so可以把登錄和退出的操作封裝為公共函數。(2)優點:由於最大限度消除了重複,從而提高了開發效率和提高測試用例的可維護性。(3)缺點:雖然模塊化的步驟相同,但是測試數據不同。
  • 什麼是回歸測試?
    理論上,軟體產生新版本,都需要進行回歸測試,驗證以前發現和修復的錯誤是否在新軟體版本上再次出現。  相信無論從底層的編程人員和測試人員,還是到頂層的項目管理者,都經歷過客戶的需求變更對項目帶來的巨大影響。
  • Testin雲測CTO陳冠誠:AI在自動化測試中的創新機會點
    希望通過我的分享拋磚引玉,我相信不管是阿里,還是業界的同行,在整個測試開發領域裡,大家都做了很多的實踐,所以我今天希望跟大家分享一下我的觀點。二、測試框架的痛點軟體自動化誕生了非常多的軟體,不管是QTP,還是基於圖形化的自動化測試框架,它們都有非常多的痛點。
  • 回歸測試知多少
    ,完善一些舊邏輯,隨著軟體的逐漸成熟,功能的不斷增加,勢必會出現兩個問題:新增功能對原有功能的影響有多大原有功能是否會出現新問題此時,勢必需要進行回歸測試,隨著軟體的不斷發展,回歸測試所佔的比重就會越大。
  • 跑者實踐:自我測試乳酸閾值配速和心率的幾個方法
    跑步實踐證明,每周能夠進行如上所述的一種乳酸訓練,就能極大地提高跑步能力和乳酸閾值水平。當然,這裡的前提是跑者很清楚自己的乳酸閾值。 不管是為了進行乳酸閾值區間訓練,還是為了確定跑步是否達到乳酸閾值配速,又或者是為了了解自己的乳酸閾值水平是否有所提高,都需要跑者對自己在乳酸閾值點上的配速、心率以及發力程度有清楚的認知。
  • 跑者實踐:自我測試乳酸閾值配速和心率的幾個方法
    跑步實踐證明,每周能夠進行如上所述的一種乳酸訓練,就能極大地提高跑步能力和乳酸閾值水平。當然,這裡的前提是跑者很清楚自己的乳酸閾值。實踐證明,只要操作得當,這些方法也能保持相當的準確度,可靠性很高。下面我們一起來了解一下。
  • Python接口測試實戰丨如何實現特殊字符集的自動化測試?
    在當前網際網路產品更新迭代的快節奏下,回歸測試的時間被嚴重壓縮,在金融領域和其他網際網路應用場景下,支付、轉帳、清算往往是核心功能,為了確保資金安全和快速到帳,接口在對用戶名、帳戶名中的特殊字符的正確處理顯得尤為重要。
  • 自動化文本情感分析的基本概念和研究思路
    自動化情感分析的研究思路和應用領域又是什麼?本文結合研究團隊多年豐富的經驗和應用,從文本情感分析技術/方法應用的理解角度進行分享,歡迎讀者們批評指正。因此透過人工編碼的傳統內容分析就無法支持大數據應用的需求,自動化情感分析因應而生。自動化的文本情感分析,是指結合自然語言處理(Natural Language Processing)、文本挖掘(Text Mining),以及計算機語言等領域技術方法,來提取文本中的信息,自動化的文本情感識別流程某種程度上彌補了需要快速掌握信息的需求。
  • 全開放的工業自動化系統正噴薄而出
    這一標準化活動的鮮明特色,就是充分吸收和繼承工業標準的已有成果,以及對一切利益攸關者都持開放態度。另外,從一開始就十分注重結合實際的驗證工作,標準的制定必須經得起測試床的測試和工業裝置中試的檢驗和驗證。OPA的一個目標就是要大幅提升控制設計軟體平臺,而不再採用今天DCS運用的專用的功能塊和軟體工具。
  • 只寫測試用例不管代碼?懶人如何高效的做回歸測試
    自動回歸測試將大幅降低系統測試、維護升級等階段的成本。回歸測試作為軟體生命周期的一個組成部分,在整個軟體測試過程中佔有很大的工作量比重,軟體開發的各個階段都會進行多次回歸測試。在漸進和快速迭代開發中,新版本的連續發布使回歸測試進行的更加頻繁,而在極端編程方法中,更是要求每天都進行若干次回歸測試。因此,通過選擇正確的回歸測試策略來改進回歸測試的效率和有效性是很有意義的。
  • 知識點暴擊匯總:一篇文章幫你理清軟體測試方法
    √ 動態測試動態測試方法是指通過運行被測程序,檢查運行結果與預期結果的差異,並分析運行效率、正確性和健壯性等性能。這種方法由三部分組成:構造測試用例、執行程序、分析程序的輸出結果。自動化測試比如功能測試自動化、性能測試自動化、安全測試自動化。通常所說的自動化是指功能測試自動化。
  • 一文教你使用Jenkins集成Junit自動化測試,超簡單!
    隨著技術的發展,Devops的概念越來越深入人心,Devops使得構建、測試、發布軟體能夠更加地快捷、頻繁和可靠。DevOps對應用程式發布的有著重要影響,具備DevOps能力則發布軟體產品時風險更低,其中一個重要的原因就是自動化,減少了人工幹預,強大的部署自動化手段確保部署任務的可重複性、減少部署出錯的可能性。
  • 大數據測試的簡要指南:概念、策略、挑戰、工具和好處
    為了保證大數據的質量,我們顯然需要對大體量的數據進行測試。本文將通過簡要指南的形式,引導您全面了解大數據測試的相關概念、策略、挑戰、好處以及相關測試工具。
  • 「首席架構師看敏捷」核心實踐:測試驅動開發(TDD)簡介
    你需要一個快速的編譯器和回歸測試套件)。您的設計必須由高度內聚、鬆散耦合的組件(例如,您的設計高度規範化)組成,以使測試更容易(這也使系統的演化和維護更容易)。對於開發人員來說,這意味著他們需要學習如何編寫有效的單元測試。
  • 科技浪潮下的商業銀行系統測試轉型之我見
    第三,探索出適用於首次測試使用的界面自動化工具,基於系統UI設計和需求文檔,即可編輯自動化案例,待測試交付後直接使用自動化工具開展冒煙測試,打破了業界傳統界面級自動化測試框架基於錄製/回放模式、僅適用於手工測試通過後進行自動化回歸測試的局限性。3.積累測試資產,傳承經驗思維「操千曲而後曉聲,觀千劍而後識器」。