新聞中心
一、當前軟件開發(fā)的趨勢

創(chuàng)新互聯(lián)專注于橋西網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供橋西營銷型網(wǎng)站建設,橋西網(wǎng)站制作、橋西網(wǎng)頁設計、橋西網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務,打造橋西網(wǎng)絡公司原創(chuàng)品牌,更為您提供橋西網(wǎng)站排名全網(wǎng)營銷落地服務。
開篇我們先簡要介紹一些近幾年在企業(yè)開發(fā)中出現(xiàn)的重要概念,以便引入持續(xù)測試的主旨。這些概念中重要的兩個便是DevOps和微服務。兩者都是目前軟件開發(fā)中的優(yōu)秀實踐和方法論,旨在為企業(yè)提供更高的靈活性,提升運營效率。
1.1 DevOps
DevOps是一套實踐方法論和文化,提倡打破原有組織和限制,職能團隊開始擁抱和接受DevOps所倡導的高度協(xié)同,研發(fā)、測試、運維及交付一體化的思維。隨著DevOps和敏捷熱度的不斷提升,無論是互聯(lián)網(wǎng)企業(yè)還是傳統(tǒng)軟件企業(yè)都開始擁抱敏捷,實踐DevOps。持續(xù)集成CI(Continuous integration)、持續(xù)交付CD(Continuous delivery )作為DevOps的優(yōu)秀實踐,越來越受到重視。
1.2 微服務架構(gòu) Microservice Architecture
微服務架構(gòu)源起于DevOps意識形態(tài)和實踐中,是一種軟件架構(gòu)風格。微服務架構(gòu)帶來了一系列好處,例如可部署性、可靠性、可用性等等。雖然原則上可以使用任何架構(gòu)來實踐DevOps,但微服務架構(gòu)正在成為構(gòu)建持續(xù)部署 (CD)系統(tǒng)的標準架構(gòu)風格。由于每項服務的規(guī)模都很小,它允許通過連續(xù)重構(gòu)來實現(xiàn)單個服務的體系結(jié)構(gòu),因此減少了對大型項目前期設計的需求,允許盡早發(fā)布軟件并且持續(xù)交付。微服務和DevOps是天然的共同體,結(jié)合起來共同實現(xiàn)軟件開發(fā)行業(yè)的變革。
二、動化測試 Test Automation
隨著敏捷和微服務架構(gòu)的引入,CI/CD成為構(gòu)建和部署的標準,即使在沒有采用微服務架構(gòu)的項目中也是如此。為了保證已定義的流程和事務按照預期運行,測試必不可少。而在應對現(xiàn)代軟件產(chǎn)品頻繁的變化和發(fā)布上,傳統(tǒng)的手工測試方式在人員和效率上都存在嚴重不足,因此自動化測試已經(jīng)成為現(xiàn)代軟件研發(fā)過程中一個關鍵組成部分。自動化測試是打通持續(xù)集成和持續(xù)交付的核心,沒有有效的自動化測試保證,持續(xù)集成和持續(xù)交付就僅僅是一個沒有靈魂的軀殼。
2.1 測試分類
測試按照不同的維度可以進行多種分類。
-
按測試手段是否手工,可劃分為自動化測試和人工測試;
-
按照測試目的劃分,可分為功能測試、性能測試、負載測試等。
本文采用Martin Fowler按照層級分類的方式對測試進行分類。
Martin Fowler描述測試金字塔分為單元、服務和UI三個層級。盡管大家對此的具體描述各不相同(有人將三層分別定義為單元、接口、集成測試;也有人將整個金字塔劃分為4-5個層級),但金字塔自底向上的結(jié)構(gòu)是大家公認和遵循的。
1)單元測試
單元測試是針對代碼單元(通常是類/方法)的測試,單元測試的價值在于能提供快速的反饋,在開發(fā)過程中就可以對邏輯單元進行驗證。好的單元測試可以幫助改善既有設計,在團隊掌握 TDD的前提下,單元測試能輔助重構(gòu),幫助提升代碼整潔度。
2)接口(服務/API)測試
接口測試是針對業(yè)務接口進行的測試,主要測試內(nèi)部接口功能實現(xiàn)是否完整。比如內(nèi)部邏輯是否正常、異常處理是否正確。接口測試的主要價值在于接口定義相對穩(wěn)定,不像界面或底層代碼會經(jīng)常發(fā)生變化,所以接口測試比較容易編寫,用例的維護成本也相對較低。在接口層面準備測試的性價比相對較高。
3)集成(UI)測試
集成測試從用戶的角度驗證產(chǎn)品功能的正確性,測的是端到端的流程,并且加入用戶場景和數(shù)據(jù),驗證整個過程是否健康流暢。集成測試的業(yè)務價值最高,它驗證的是一個完整的流程,但因為需要驗證完整流程,在環(huán)境部署、準備用例及實施等方面成本較高,實施起來并不容易。
2.2 微服務架構(gòu)為測試帶來的挑戰(zhàn)
微服務架構(gòu)在解決了應用大小、應用開發(fā)規(guī)模等問題之后也帶來了一些新的問題,比較突出的有微服務數(shù)量增多、服務間調(diào)用關系復雜等等。復雜的依賴導致即使項目資深開發(fā)人員也不能一下子梳理出所有關系。
微服務和傳統(tǒng)的單體應用相比,在測試策略上會有一些不太一樣的地方。簡單來說,在微服務架構(gòu)中,測試的層次變得更多,需要測試的服務和應用也會變得更多。手動執(zhí)行所有的測試是低效的,無法跟上互聯(lián)網(wǎng)快速迭代的要求。這時有必要引入自動化測試來減輕測試團隊的壓力,提高測試效率和測試質(zhì)量。
2.3 自動化測試
說起自動化測試,功能測試人員可能會將其想得很高端復雜。
先來看一般的功能測試如何進行:設計并編寫用例文檔,描述測試步驟和預期結(jié)果;測試人員根據(jù)測試用例描述按步驟操作,然后判斷實際結(jié)果與預期是否一致。如果一致,測試通過;如果不符,測試失敗。
自動化測試要做的事情與功能測試是一致的。分層理論和自動化測試方法結(jié)合,出現(xiàn)了三個層面的自動化:單元測試自動化、接口測試自動化和UI測試自動化。當然,不同層面的自動化關注點是不一樣的。所以,從測試的行為本質(zhì)上來看,功能測試與單元自動化測試、接口自動化測試和UI自動化測試并沒有區(qū)別。唯一的區(qū)別是,一個由人來執(zhí)行,一個由代碼或工具執(zhí)行。
2.4 自動化測試分層
1)單元自動化測試
單元測試自動化,指對軟件中最小的可測試單元進行檢查和驗證,調(diào)用被測服務的類或方法,根據(jù)類或方法的參數(shù),傳入相應的數(shù)據(jù),得到一個返回結(jié)果,最終斷言返回的結(jié)果是否符合預期。如果相等,測試通過;如果不相等,測試失敗。
所以,單元測試關注的是代碼的實現(xiàn)與邏輯。單元測試是最基本的測試,也是測試中的最小單元,它的對象是函數(shù)對象,也可以包含輸入輸出,針對的是函數(shù)功能或者函數(shù)內(nèi)部的代碼邏輯,并不包含業(yè)務邏輯。
該類測試一般由研發(fā)人員完成,需要借助單元測試框架,如java的Junit、TestNG,python的unittest等。
2)接口自動化測試
接口自動化測試,主要驗證模塊間的調(diào)用返回以及不同系統(tǒng)、服務間的數(shù)據(jù)交換。接口測試自動化一般在業(yè)務邏輯層進行測試。根據(jù)接口文檔是RESTful還是RPC?調(diào)用被測試的接口,構(gòu)造相應的請求數(shù)據(jù),得到返回值,是成功或者失敗。不管輸入的參數(shù)是怎樣的,我們都將得到一個結(jié)果,最終斷言返回的結(jié)果是否等于預期結(jié)果。如果相等,測試通過;如果不相等,測試失敗。
所以,接口測試關注的是數(shù)據(jù)。只要數(shù)據(jù)正確了,功能就做成大半,剩下的無非是如何把這些數(shù)據(jù)展示在頁面上。
常見的接口測試工具有postman、jmeter、loadrunner等。
3)集成(UI)自動化測試
UI層是用戶使用產(chǎn)品的入口,所有功能通過這一層提供給用戶,目前測試工作大多集中在這一層,這種測試更貼近用戶的行為,模擬用戶點擊了某個按鈕、在輸入框里輸入了某些指令。有時可能用戶看到登錄成功了,但UI自動化并不知道它剛才的點擊有沒有生效。所以要找“證據(jù)”,比如登錄成功后頁面右上角會顯示“歡迎,xxx”,這就是登錄成功的有力“證據(jù)”。當UI自動化登錄成功后,就去獲取這個數(shù)據(jù)進行斷言,斷言如果相等,測試通過;如果不相等,測試失敗。
所以,UI自動化的關注點用戶操作形為,以及UI上各種組件是否可用。常見的測試工具有UFT、Robot Framework、Selenium、Appium等。
4)分層占比實踐
每種自動化測試都有自己的側(cè)重和優(yōu)劣勢,在實際工作中不可能做到均分,因此我們需要制定合理的測試策略對其進行組織和分配,包括每部分測試投入多少、測試用例比例是多少等。
測試金字塔還有另一個維度的信息,如上圖所示。
-
越往上,越接近QA、業(yè)務/最終用戶,越往下,越接近開發(fā);
-
越往上,測試執(zhí)行越慢,越往下,測試執(zhí)行越快;
-
越往上,測試成本越高(越耗時,失敗時的信息越模糊,越難跟蹤),越往下,測試成本越低。
按照測試金字塔模型以及投入/產(chǎn)出比,我們得知越向下回報率越高,所以應該使用大量的單元測試和全面的接口測試來覆蓋產(chǎn)品提供的基本邏輯和功能,使用少量的集成(UI)測試來進行前端界面的功能驗證。
都說業(yè)內(nèi)最佳實踐看Google,Google的自動化分層投入占比是:單元測試(Unit):占比70%;接口測試(Service):占比20%;集成測試(UI):占比10%。
三、自動化測試最佳實踐
對現(xiàn)階段公司大部分團隊來說,更符合實際測試模式是紡錘模型。新項目中,可能由于時限原因或者開發(fā)人員習慣問題,一開始并沒有把單元測試準備得很完善;而某些遺留老項目,可能原本就沒有多少單元測試。
在上述情況下,一般的做法是先將重心放在中間層的測試上,原因有以下兩點:
-
第一,中間層投入產(chǎn)出比較高,可以實現(xiàn)較高的自動化率;
-
第二,可以幫助加強開發(fā)跟測試人員之間的協(xié)作,提高測試質(zhì)量。這一層需要開發(fā)跟測試人員共同定義,因為開發(fā)知道內(nèi)部實現(xiàn)的細節(jié),測試掌握業(yè)務場景。
3.1 紡錘型向金字塔型過渡
當項目進行一段時間以后,各層測試占比有必要向理想型的金字塔型過渡,這時需要關注以下三個方面:
-
開發(fā)與測試互相傳遞能力;
-
全員關注產(chǎn)品設計跟代碼的質(zhì)量;
-
讓用例逐步下沉,最后逐步過渡到理想型。
3.2 測試質(zhì)量評估
關于度量,不要用單一的指標去評估測試和產(chǎn)品質(zhì)量,比如用例通過率、代碼覆蓋率等都無法獨立地評估產(chǎn)品質(zhì)量。
評估測試質(zhì)量時要關心以下幾個方面:
-
第一是用例比例,即每一層的用例比例是多少。
-
第二是測試覆蓋率。
-
第三是測試總運行時間,因為經(jīng)過優(yōu)化以后,總運行時間一定是越來越少。
-
第四是代碼質(zhì)量指標,反映代碼的質(zhì)量和整潔度。
四、自動化測試面臨的挑戰(zhàn)
引入自動化測試可以為團隊帶來很多好處,當然自動化測試也有其自身的缺點和挑戰(zhàn)。面臨的最大挑戰(zhàn)就是變化,因為變化會導致測試用例運行失敗,所以需要對自動化腳本不斷debug。如何控制成本、降低成本是對自動化測試工具以及人員能力的挑戰(zhàn)。
另一個值得注意的是,自動化測試不能完全代替人工測試,一定的人工探索測試也是必不可少的。我們一直在不懈努力和探索,本文為自動化測試最佳實踐系列文章的第一篇,重點介紹了自動化測試的現(xiàn)狀和金字塔模型,接下來的系列文章中會繼續(xù)為大家介紹我們的自動化測試實踐,包括自動化測試平臺的核心功能、持續(xù)測試的方法與工具等。
【本文是專欄機構(gòu)宜信技術(shù)學院的原創(chuàng)文章,微信公眾號“宜信技術(shù)學院( id: CE_TECH)”】
本文題目:自動化優(yōu)秀實踐(一):從紡錘模型到金字塔模型
轉(zhuǎn)載來源:http://m.fisionsoft.com.cn/article/dpegidp.html


咨詢
建站咨詢
