自動化測試框架知識,讀這一篇就夠了!

陳琦發表於2020-05-20

自動化測試因其節約成本、提高效率、減少手動干預等優勢已經日漸成為測試人員的“潮流”,從業人員日益清楚地明白實現自動化框架是軟體自動化專案成功的關鍵因素之一。本篇文章將從什麼是真正的自動化測試框架、自動化指令碼如何工作以及自動化測試框架會如何在測試過程中為你提供競爭優勢三個方面進行闡述,讓您通過這一篇文章,踏入自動化測試框架的領域。

自動化測試的優勢

自動化測試的流行和諸多優勢並不意味著它是靈丹妙藥,定製型專案、週期短、測試易用性等情況並不適合自動化測試。但不可否認的是,如果認真計劃和執行自動化測試框架,確實會為軟體開發和測試公司帶來以下好處:
 

最短時間-最大收益

構建任何可行的自動化測試框架和自動化指令碼都可以最大程度地減少編寫和執行測試所花費的時間,從而可以在短時間內獲得最大的輸出。另外,擁有優秀的自動化測試框架後,人力就可以從諸如同步、錯誤管理、本地配置,報告生成、解釋等這些常見問題中解脫出來。

可重複使用和可讀的自動化程式碼

當你使用現有元件庫中提到的程式碼時,大可以放心,它在以後的時間內仍然是可讀和可重複使用的,並且所有相關任務(如報告、同步和故障排除)都將變得更易訪問。

資源優化

一些公司沒有如設想的一般從自動化實施中受益,因為從自動化測試中獲得的效益取決於採用它的靈活性。 如果自動化系統是靈活的,並且與從事各個元件的不同團隊相容,那麼在資源優化和知識共享方面可以提供巨大的收益。

自動化測試框架的定義

在其他很多行業中,“自動化”指的是通過智慧演算法自動處理流程,流程執行是很少或完全不需要人工干預。而在軟體行業中,自動化測試指的是通過自動化工具(授權版本或開源版本皆可)對軟體應用程式進行各種測試。從技術角度來說,自動化測試框架是一組定製的、可以用來執行指令碼化測試和全面報告測試結果的互動式元件。
要成功地構建自動化測試框架,需要考慮到軟體質量保障專家的建議,他們可以幫助觀察並幫助控制整個測試過程,提高測試結果的準確性。經過精心設計的自動化測試框架能讓測試人員以一種實用、簡化的方式執行自動化測試。

自動化測試框架的型別

以工具為中心的框架

不管是商業自動化工具和開源自動化工具,都有有助於在測試環境中生成報告、測試套件和分散式測試執行的系統基礎設施。比如Selenium 自動化框架,該框架具有主要元件WebDriver——基於Web瀏覽器的外掛,用於控制和操作 Web 瀏覽器中的應用程式的 DOM 模型。Selenium 測試自動化框架還擁有實用的編碼庫和記錄回放工具。

另外一個專用於工具的重要框架是 Serenity,它是圍繞 Selenium Web 驅動程式構建的加速器。 在這種情況下,為加快測試自動化實施過程的速度,社群將特定元件組合在一個公共實體中。

諸如 TestComplete,Ranorex HP QTP 這些工具專用框架時,就很難做出明確的判斷,因為它們都是由帶有動作模擬器、報告和指令碼 IDE 的已部署基礎架構預先構建的。

以應用為中心的框架

這種型別的框架是為實現某個特定應用程式專案自動化而定製的。以應用為中心的框架支援某個指定目標的應用程式實現測試自動化的需求,由從開源庫構建的元件驅動。這種框架可以圍繞SUT建立友好的測試環境來執行一些基本功能,包括部署開發的應用程式、執行應用程式、測試用例執行、直接測試結果報告和便於編碼的包裝器控制元件。以應用為中心的框架還會有一個元件來支援在不同作業系統和瀏覽器上跨各種雲環境的測試執行。

關鍵字驅動框架

關鍵字驅動框架主要可以吸引缺乏編碼經驗的新手開發和測試人員,它既可以是以工具為中心的框架,也可以是以專案為中心的框架。關鍵字驅動框架可以讓編碼不熟練的員工參與編寫、理解自動化指令碼。用於編碼的關鍵字集(如 Login、NavigateToPage、Click、TypeText)作為關鍵字儲存庫安裝在程式碼庫裡,根據提供的關鍵字引用編寫指令碼的電子表格將被傳遞到關鍵字直譯器來執行測試。
laptop-820274_1920.jpg

理想的自動化測試框架的主要元件

如果要實現功能強大且效能卓越的測試自動化框架(無論是開源還是商業的),就必須把包括構成其核心的某些元件考慮在內。 有些框架可能包括所有元件,也有些框架只包括其中幾個,所以不必在每個框架中都涉及到下面提到的所有元件。

1. 測試基礎元件

a)單元測試

單元測試基礎元件可以作為任何自動化測試框架的基本部分。它可以用於以下情況:
 
● 通過@test 或[test]等特定的形式來定義正在使用的測試方法
● 執行影響自動化測試最終結果的斷言
●執行簡單明瞭的測試
 
無論是從命令列、IDE、專用工具還是 CI(持續整合)系統執行測試,為了確保單元測試以簡單的方式執行,單元測試庫都提供了測試執行器。
 
單元測試庫支援幾乎所有程式語言,比如以下這些:Java 的 JUnit 和 TestNG,.NET 的 NUnit 和 MSTest,Python 的 unittest(前身為 PyUnit)。

b)整合和端到端測試

 在執行整合和端到端測試自動化的同時,也非常合適去實踐現有測試庫提供的功能。由應用程式UI驅動的API級測試需要有消除不必要的編碼負擔的元件,這樣能讓與被測應用程式的互動變得更容易。因而,測試人員就不會受到連線到應用程式、傳送請求、接收結果響應這些編碼工作的困擾。

這種型別的幾個重要測試元件有:Selenium(可用於主要語言)、protractor(特定於 JavaScript)、Karate DSL(Java 特定的 API 級整合測試)。

c)行為驅動開發(BDD)

專門用於BDD的元件以行為規範為目標,以可執行程式碼的形式建立可執行規範。在這部分,測試人員可以將預測行為的不同特性和場景轉化為程式碼。儘管不像其他測試工具哪有直接跟被測應用程式互動,但可以作為BDD過程的支援,建立與自動化測試的範圍和意圖相一致的活動文件。BDD元件的典型例子有:cucumber(支援主要語言)、Jasmine (JavaScript)、SpecFlow (for .NET)。

2、測試資料管理

在軟體測試自動化和測試建立過程中,最大的困難是如何利用測試資料管理系統。隨著自動化測試數量的增加,始終存在這樣一個問題:確保執行特定測試所需的某些測試資料在執行測試時可用或可建立。目前對這種情況並沒有一個萬無一失的解決方案,這就要求採用可靠的測試資料管理方法來讓自動化工作成功運轉。
 因此所採用的自動化測試框架需要配置充分,以便能提供基本的補救措施來進入或建立、清除要執行的測試資料。解決這一問題的方法是使用適當的模擬工具,使資料更加簡化、更加清晰、更易於理解。

3、mock、stubs和虛擬資產

  在對自動化測試進行實踐和探索的歷程中,可能會出現以下情況:

●希望將模組與在單元測試中有經驗的已連線元件隔離

●處理在現代應用程式的整合,或端到端測試中常見的繁瑣而關鍵的依賴關係
 
在這些情況裡,就會覺得建立mock、stubs和虛擬資產來反映連線元件的行為模式是非常必要的,還可能會發現處理 mock 和 stub 是一項大範圍、大體量的任務。無論如何,測試人員都會意識到,在開發自動化測試框架期間選擇有用的虛擬化工具是件十分重要的事。

實現模式的通用機制

除了以上提及自動化框架元件,還有一些有用的機制可以幫助建立、使用和維護自動化測試,例如:

包裝器方法(Wrapper methods):使用 Selenium WebDriver 元件時,建立自定義包裝器會讓人更輕鬆地處理錯誤。 建立了用於 Selenium API 呼叫的自定義包裝後,就可以更好地處理超時、異常處理和故障報告。 這之後,建立了自動化測試的人員可以重新使用,這樣就可以避開復雜流程的關注點,專注於進行有價值的測試。

抽象方法(Abstraction methods):抽象機制意味著可讀性的提高和冗餘細節的掩蓋。例如,在建立 Selenium WebDriver 測試時使用頁面物件的目的是在網頁上公開使用者輸入操作,包括輸入憑據或單擊頁面上的某處,目標是通過超越或繞過探索頁面特定元素的需求來實現高階測試方法。 此方法適用於許多類似的應用程式和自動化測試。

 測試結果報告

在選擇將測試結果報告到自動化框架中的庫或機制時,需要將檢視這份報告的目標受眾考慮在內。在這方面,需遵循以下幾個注意事項:

●諸如 Junit 和 TestNG 之類的單元測試框架生成的報告主要針對如 CI(持續整合)伺服器之類的接收系統,這些系統最終會對其進行解釋並以其他軟體可使用的 XML 格式進行呈現。
 
●當尋求使用大多數人都能理解的語言作為進行報告的工具時,你可能需要考慮使用與單元測試框架相容的商業工具,比如用於 Junit、NUnit 和 TestNG 的 UFT-Pro。
 
●另一種選擇是利用諸如 ExtentReports 之類的第三方庫,該庫以易於理解的格式建立測試結果報告,包括通過餅形圖、圖形或影像進行視覺化解釋。

輔助平臺

除了自動化測試框架本身,一些跟持續整合相關的輔助平臺也會對自動化測試有很大的幫助。比如CI可以進行交付件部署、測試排程;原始碼平臺可管理產品和測試指令碼的程式碼;依賴管理器一般是針對某種語言類庫的依賴管理工具,比如用nexus管理公司員工開發的通用java型別;禪道ZTF包含持續整合、單元測試和版本庫管理等特性。

CI平臺

為了以更快、更連貫的方式進行應用程式測試,持續整合平臺可以幫助您定期構建軟體併為新版本執行各種測試。 當開發和部署新功能以及更新現有功能時,此方法使開發人員和測試人員對應用程式質量獲得定期反饋和迅速響應。 當前一些突出的持續整合平臺有TeamCity、CircleCI、Jenkins 等。

原始碼管理

與手動測試一樣,自動化測試也涉及編寫和儲存原始碼版本。 每個開發公司都有一個精選的原始碼和版本控制系統來儲存並保護原始碼。 自動化測試需要完善的原始碼管理系統,該系統在處理生產程式碼時會非常方便。 典型的原始碼管理示例有 Git和Subversion 。

建立依賴管理器

依賴性管理器的主要目的是協助收集、管理現有的已經應用在自動化軟體解決方案 的功能中的依賴性和庫。某些工具(例如Maven和Gradle)同時充當依賴管理器並幫助構建工具。構建工具旨在幫助您從原始碼和支援庫開發自動化軟體並執行測試。這方面的工具包括Ant,npm 和 NuGet。

禪道ZTF

ZTF支援與禪道無縫整合,可將禪道用例和自動化測試指令碼一一繫結,執行的結果能提交到禪道中作為測試結果,執行失敗的指令碼也可以自動建立bug。ZTF自動化測試框架實現了與Jenkins持續整合功能打通。使用者發起任務後,通過ZTF自動執行測試指令碼,把單元測試的結果回傳給禪道,二者合作打通了持續整合閉環。

框架的搭建和實施過程

以下是規劃實現自動化測試解決方案的幾種方式:
 
●從客戶的角度探討自動化的實際適用性、從各個角度檢查其外觀是否良好、並在未充分使用的技術上進行測試。 與之相比,如果自動化開發的努力大大超過預期的優勢,那自動化測試就沒有什麼必要。
 
● 密切關注被測系統的技術,以便找到能夠完美模擬使用者行為的最合適的自動化測試工具,這一點至關重要。
 
●建議採用基於階段的實現方法,其中每個階段都具有交付自動化測試指令碼的優先順序,同時新增框架功能以實現預期的指令碼執行。
 
●在啟動軟體自動化測試之前,為了確保正確執行自動化決策,必須首先估算實施後的投資回報率、概念證明、執行手動迴歸或冒煙測試的時間以及每個版本的執行週期數 。

 結論

在當今快節奏、殘酷的軟體開發生態系統中,自動化測試框架在保持軟體測試周期的速度、效率和清晰度方面起著不可或缺的作用。隨著人工智慧被引入到軟體測試中,考慮採用自動化測試框架的組織必須深入研究最終框架的設計之後才能涉足這一領域。良好的框架設計和使用元件的策略將為最終的自動化測試框架奠定基礎。
 
構建成熟、精細、靈活的自動化測試框架體系結構的最好方法是從小處著手,頻繁地進行測試和稽核,並逐步向更高的層次構建擴充套件版本。從早期開始準備大量的自動化測試很方便,可以更快地看到工作框架,避免之後在自動化測試階段出現衝突或受損的情況。
 
上面闡述的指南旨在幫助軟體測試人員和公司,以讓大家從那些成功的執行自動化測試的專案中汲取經驗。

參考文獻:Mitul Makadia.The ABC of Test Automation Frameworks [OL].(2020-04-20)https://dzone.com/articles/th...

相關文章