大家好,我是洋子,自動化測試已經是測試領域老生常談的話題了,今天給大家分享自動化測試到底該怎麼做
在講自動化測試前,先看下軟體測試的分層模型,如下圖所示的「三層金字塔」,分為單元、服務和UI三個層級。儘管大家對此的具體描述各不相同(有人將三層分別定義為單元、介面、整合測試;也有人將整個金字塔劃分為4-5個層級),但金字塔自底向上的結構是大家公認和遵循的
單元測試是針對程式碼單元(通常是類/方法)的測試,單元測試的價值在於能提供最快的反饋,在開發過程中就可以對邏輯單元進行驗證。好的單元測試可以幫助改善既有設計,在團隊掌握 TDD的前提下,單元測試能輔助重構,幫助提升程式碼整潔度。
介面(API)測試是針對業務介面進行的測試,主要測試內部介面功能實現是否完整。比如內部邏輯是否正常、例外處理是否正確。
介面測試關注的重點更多在於資料層面,如資料處理,資料狀態,資料傳遞
介面測試的主要價值在於介面定義相對穩定,不像介面或底層程式碼會經常發生變化,所以介面測試比較容易編寫,用例的維護成本也相對較低。在介面層面準備測試的價效比相對較高。手動進行介面測試的常用工具有Postman,瀏覽器F12偵錯工具
UI測試從使用者的角度驗證產品功能的正確性,測的是端到端的流程,並且加入使用者場景和資料,驗證整個過程是否流暢。有時候在UI測試時,還會進行整合測試,整合測試的業務價值最高,它驗證的是一個完整的流程,但因為需要驗證完整流程,在環境部署、準備用例及實施等方面成本較高,實施起來並不容易。
前面我們瞭解到了軟體測試的三層模型,所以自動化測試也是基於這三層模型進行展開的,我們可以在單元測試階段進行單元自動化測試,介面測試階段進行介面自動化測試,在UI測試階段進行UI自動化測試。
因為單元測試關注的重點更多在於程式碼的實現與內部邏輯,所以要想進行單元自動化測試,對測試開發工程師的程式碼能力要求比較高。對於不同的開發程式語言,有對應的單元測試框架,比如Java 有Junit
、testNG
。C#有Nunit
。Python 有UnitTest
、Pytest
。Go 有 testing
、GoConvey
、
GoStub
、GoMock
、GoMonkey
。運用這些測試框架,再結合一些自動化測試(指令碼)平臺,CI流水線執行單測外掛等我們就可以進行單元自動化測試了。
介面自動化當中,可以構造三種介面自動化case,分別是單介面、場景、diff 自動化case
單介面自動化case顧名思義就是對單個介面構造自動化case,包含請求方式,介面名和介面路徑,傳參,預期返回結果。在校驗預期返回結果時通常是會進行斷言,常用的斷言方式可以選擇鍵值對(鍵為返回的欄位名,值為返回的資料),JSON Schema和Yaml
場景自動化case則是將多個單介面自動化case根據業務場景整合起來,能夠發現業務場景下的介面問題,比如超時,上下游異常等
diff測試簡單來說就是比對相同介面在不同版本/不同環境下面的返回內容是否符合預期,diff測試目前很多網際網路大廠已經在採用,我們在寫自動化case同樣要構造diff自動化case,構造的方法和單介面自動化case相同,只是我們需要不同的環境URL地址進行對比
如果使用Java語言,可選擇TestNG
或者REST Assured
作為測試管理框架,搭配Maven+HttpClient+Jenkins+Allure/ReportNG測試報告+MyBatis+mock+springboot
可以開發一套基於Java的介面自動化測試平臺。如果使用Python語言,介面自動化測試管理框架可以是Pytest/Unitest/Airtest/Robot Framework
四選一 。搭配Requests庫+PyMySQL+Allure測試報告+Flask/Django
可以開發一套基於Python的介面自動化測試平臺
無論是Web端還是App端,UI自動化測試都是基於頁面元素的識別和定位來模擬使用者行為。UI自動化測試工具常見的有Appium,Selenium,搭配Pytest或者Airtest測試管理框架,可以開發出一套UI自動化測試平臺。
自動化測試是一種比手工測試更快發現問題的手段,它能夠提高測試效率和品質,近幾年來網際網路大廠針對人工智慧領域,利用機器學習和深度學習演演算法做了許多探索,如用例自動生成,問題自動分析等等,學會自動化測試還是很有必要性。