文章目錄
- 前言
- 軟體測驗三層金字塔
- 單元測驗
- 介面測驗
- UI測驗
- 自動化測驗三種型別
- 單元自動化測驗
- 介面自動化測驗
- UI自動化測驗
- 結束語
前言
大家好,我是洋子,自動化測驗已經是測驗領域老生常談的話題了,今天給大家分享自動化測驗到底該怎么做

軟體測驗三層金字塔
在講自動化測驗前,先看下軟體測驗的分層模型,如下圖所示的“三層金字塔”,分為單元、服務和UI三個層級,盡管大家對此的具體描述各不相同(有人將三層分別定義為單元、介面、集成測驗;也有人將整個金字塔劃分為4-5個層級),但金字塔自底向上的結構是大家公認和遵循的

單元測驗
單元測驗是針對代碼單元(通常是類/方法)的測驗,單元測驗的價值在于能提供最快的反饋,在開發程序中就可以對邏輯單元進行驗證,好的單元測驗可以幫助改善既有設計,在團隊掌握 TDD的前提下,單元測驗能輔助重構,幫助提升代碼整潔度,
介面測驗
介面(API)測驗是針對業務介面進行的測驗,主要測驗內部介面功能實作是否完整,比如內部邏輯是否正常、例外處理是否正確,
介面測驗關注的重點更多在于資料層面,如資料處理,資料狀態,資料傳遞
介面測驗的主要價值在于介面定義相對穩定,不像界面或底層代碼會經常發生變化,所以介面測驗比較容易撰寫,用例的維護成本也相對較低,在介面層面準備測驗的性價比相對較高,手動進行介面測驗的常用工具有Postman,瀏覽器F12除錯工具
UI測驗
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的介面自動化測驗平臺
UI自動化測驗
無論是Web端還是App端,UI自動化測驗都是基于頁面元素的識別和定位來模擬用戶行為,UI自動化測驗工具常見的有Appium,Selenium,搭配Pytest或者Airtest測驗管理框架,可以開發出一套UI自動化測驗平臺,
結束語
自動化測驗是一種比手工測驗更快發現問題的手段,它能夠提高測驗效率和質量,近幾年來互聯網大廠針對人工智能領域,利用機器學習和深度學習演算法做了許多探索,如用例自動生成,問題自動分析等等,學會自動化測驗還是很有必要性,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/400565.html
標籤:python
