DevOps測試必備基礎(chǔ)?:實(shí)踐分享和適用工具推薦
譯文譯者 | 李睿
審校 | 梁策 孫淑娟
在對已開發(fā)代碼進(jìn)行質(zhì)量和可靠性分析時(shí),測試的作用至關(guān)重要。代碼質(zhì)量的任何小瑕疵都可能導(dǎo)致項(xiàng)目遭遇重大失敗。由于它的重要性,許多DevOps(開發(fā)運(yùn)營)團(tuán)隊(duì)在開發(fā)流程的早期就已啟動測試——不僅僅是在開發(fā)項(xiàng)目結(jié)束時(shí),或質(zhì)量保證人員(QA)在部署前完成最后檢查之后才進(jìn)行。
數(shù)據(jù)統(tǒng)計(jì)機(jī)構(gòu)Statista公司表示,DevOps的采用率在持續(xù)集成(CI)/持續(xù)交付CD工作流程中達(dá)到了驚人的62%,在開發(fā)環(huán)境中達(dá)到了60%。隨著越來越多的行業(yè)采用最新技術(shù),人們正在見證企業(yè)以不同程度將之采用。
本文將介紹為什么在DevOps流程的早期測試代碼至關(guān)重要,還將通過示例重點(diǎn)介紹DevOps測試的特定方法和具體實(shí)踐。我們先從基礎(chǔ)開始:
傳統(tǒng)測試是怎樣開展的?
傳統(tǒng)的軟件測試通常包括回歸測試,其中每個(gè)功能測試都在更新完成后進(jìn)行。通過持續(xù)交付,開發(fā)人員可以在準(zhǔn)備好后立即部署更新。這通常意味著新功能需要頻繁部署。
開發(fā)人員通過采用頻率更高的A/B型測試,來確保這些新功能不會破壞現(xiàn)有代碼中的任何內(nèi)容。開發(fā)人員將為一部分用戶發(fā)布一個(gè)功能版本,然后為另一部分用戶發(fā)布另一個(gè)版本,然后返回舊版本。
直到所有版本都得到部署,并且可以確定哪個(gè)最佳,或者直到原始版本被證明比其他迭代更好,這個(gè)過程將一直持續(xù)。
傳統(tǒng)測試方法的問題
傳統(tǒng)上,開發(fā)人員執(zhí)行單元測試或功能測試。這些測試適用于源代碼,但不包括任何與系統(tǒng)上線后功能運(yùn)轉(zhuǎn)狀況的內(nèi)容。對于每次變更正式上線時(shí)的表現(xiàn),這些傳統(tǒng)測試并沒有給出太多反饋。
DevOps則是一種新嘗試:當(dāng)企業(yè)將測試納入其開發(fā)和運(yùn)營流程時(shí),開發(fā)和運(yùn)營這兩個(gè)團(tuán)隊(duì)開始更緊密地合作。
DevOps測試怎樣開展?
DevOps的過程是將開發(fā)人員的產(chǎn)品盡快送到用戶手中。測試是該過程的一部分,對于防止正式環(huán)境出錯(cuò)至關(guān)重要。
不過,在執(zhí)行出色的DevOps流程中,測試不會單獨(dú)進(jìn)行。相反,測試工程師從第一天起就與開發(fā)人員一起協(xié)作。這樣即使某些內(nèi)容發(fā)布還沒有準(zhǔn)備好,或是沒有通過質(zhì)量保證(QA),也可以在上線之前修復(fù)。
測試自動化工具能幫企業(yè)改善其反饋循環(huán),將周期時(shí)間和質(zhì)量保證工作量減少一半。其基本理念是,如果企業(yè)將他們的開發(fā)(Dev)和運(yùn)營(Ops)團(tuán)隊(duì)聚合在一起,他們可以更快、更可靠地交付軟件,并減少資源使用。
這可能是比快速上市或持續(xù)交付更大的好處。我們討論的測試問題,無論其速度或部署方法如何,都將帶來更好的結(jié)果。
DevOps測試的商業(yè)利益
1.錯(cuò)誤數(shù)量更少
錯(cuò)誤總是會導(dǎo)致問題——它們不僅會讓用戶感到不滿,還會付出生產(chǎn)力損失和高員工流動率方面的代價(jià)。進(jìn)行自動化測試可以確保企業(yè)的開發(fā)團(tuán)隊(duì)在發(fā)布之前對其版本充滿信心。
這意味著缺陷會被及早發(fā)現(xiàn),并在成為大問題前被解決。同時(shí),在開發(fā)周期的早期發(fā)現(xiàn)這些問題,也意味著在以后需要更新或升級時(shí)減少麻煩。
2.軟件交付更快
無論是快速發(fā)布錯(cuò)誤修復(fù)還是重大升級,自動化測試過程都將幫助企業(yè)更快發(fā)布軟件。因?yàn)閳F(tuán)隊(duì)可以自動完成QA流程,企業(yè)無需等待人工開展。
而對于某些開發(fā)框架,員工只需具有一定軟件開發(fā)知識,就可以從頭開始創(chuàng)建全功能測試。企業(yè)功能越早交付,就越早看到客戶的滿意度結(jié)果,從而獲得更高的收入。
3.上市時(shí)間加速
上市時(shí)間加速不僅僅是企業(yè)能夠迅速地將功能呈現(xiàn)在客戶面前。因?yàn)槿绻總€(gè)新版本都漏洞百出,那么企業(yè)的業(yè)務(wù)也會因此受到影響。相比保護(hù)品牌和聲譽(yù),戰(zhàn)勝競爭對手獲得更多市場份額,快速上市變得更加關(guān)鍵。
4.版本更可靠
可靠性是企業(yè)最重要的資產(chǎn)之一。版本如果有問題也會對其品牌和聲譽(yù)造成無法彌補(bǔ)的損害,更不用說客戶保留率。事實(shí)上,根據(jù)Failory公司的調(diào)查,即使應(yīng)用程序中只有少量錯(cuò)誤也會對客戶的滿意度產(chǎn)生50%的負(fù)面影響。DevOps測試確保軟件版本更可靠,沒有Bug和錯(cuò)誤。
標(biāo)準(zhǔn)的DevOps測試實(shí)踐怎么展開?
對于現(xiàn)代軟件開發(fā),DevOps測試毫無疑問是不可或缺的——它是更先進(jìn)的工具可以發(fā)揮重要作用的領(lǐng)域之一。對于改進(jìn)DevOps流程和提高質(zhì)量的方法,需考慮以下三件事:測試驅(qū)動開發(fā)(TDD)、自動化和開源軟件。
- 測試驅(qū)動開發(fā)——與DevOps的任何部分一樣,測試應(yīng)該貫穿整個(gè)應(yīng)用程序設(shè)計(jì)。測試驅(qū)動開發(fā)不是在編寫代碼之后構(gòu)建測試,而是在代碼編寫時(shí)同步進(jìn)行,從而推動團(tuán)隊(duì)快速前進(jìn)。
- 自動化——自動化測試有助于以更低成本交付優(yōu)質(zhì)產(chǎn)品。通過利用像Jenkins這樣的開源工具,企業(yè)可以通過將自動化集成到現(xiàn)有的DevOps流程中來創(chuàng)造更多價(jià)值,而不是圍繞它創(chuàng)建一個(gè)全新的流程。最重要的是,哪怕企業(yè)QA人員不堪重負(fù),自動化測試也將有助于繼續(xù)推進(jìn)開發(fā)。
- 開源軟件——自動化測試軟件并不少,盡管存在像Selenium WebDriver這樣的免費(fèi)替代方案,提供具有更大靈活性和更高性價(jià)比的功能,許多企業(yè)仍然依賴專有解決方案。
全球流行的五大DevOps測試工具
1.Selenium
Selenium是一個(gè)采用Java、Python和其他語言編寫的不同軟件測試框架。它適用于通過自動與用戶界面(UI)交互來編寫基于Web的測試應(yīng)用程序。Selenium支持不同的瀏覽器,例如Firefox、Chrome和Internet Explorer。它可以用各種編程語言編寫測試,如Java、C#和Python等。
2.Appium
Appium是一個(gè)高級的、開源的測試自動化框架,用于編寫自動化測試,尤其適用于原生和混合移動應(yīng)用程序。Appium允許企業(yè)使用Java、Python等客戶端語言創(chuàng)建測試。該框架支持多個(gè)應(yīng)用平臺,包括iOS和Android。使用Appium的優(yōu)點(diǎn)是不需要有root手機(jī)就可以運(yùn)行自動化測試。但是,Appium僅適用于真實(shí)的移動設(shè)備,不支持模擬器。
3.SoapUI
SoapUI是一個(gè)免費(fèi)的開源Web應(yīng)用程序測試工具,提供功能、回歸和負(fù)載/性能測試。企業(yè)可以用它來創(chuàng)建自動化測試,來檢查RESTful Web服務(wù)。它帶有用于創(chuàng)建SOAP和HTTP測試以及數(shù)據(jù)驅(qū)動測試功能的內(nèi)置庫。用戶界面易于訪問并具有豐富的功能集。它通過自定義庫支持多種語言,如Java、C#、Perl、Python等。
4.Jenkins
Jenkins是最流行的持續(xù)集成和交付工具之一。如果不熟悉配置管理,它也是一個(gè)很好的入門工具,因?yàn)樗挠脩艚缑姹绕渌惍a(chǎn)品更簡單。Jenkins基于Java構(gòu)建,這意味著它支持所有主要操作系統(tǒng)(Windows、Linux和macOS),并且可以在任何具有強(qiáng)大網(wǎng)絡(luò)支持的云平臺上良好運(yùn)行。
5.JMeter
JMeter是一個(gè)高性能的Java桌面應(yīng)用程序,旨在測試功能行為和測量性能。最初設(shè)計(jì)用于測試Web應(yīng)用程序,它已擴(kuò)展到其他測試功能。該軟件在BSD許可下免費(fèi)提供,并且是開源的。JMeter與所有支持JavaSE(操作系統(tǒng)特定包)的操作系統(tǒng)兼容。構(gòu)成JMeter的所有文件都是可移植的,你可以在任何環(huán)境中運(yùn)行,而無需安裝客戶端或服務(wù)器組件。
結(jié)語
DevOps測試自動化有兩種基本方法。第一個(gè)是測試驅(qū)動開發(fā)(TDD),首先編寫測試,然后基于它們編寫代碼。第二個(gè)是行為驅(qū)動開發(fā)(BDD),企業(yè)可以在其中開發(fā)反饋軟件應(yīng)如何運(yùn)行的測試,而不僅僅是確保其正常工作。
驅(qū)動開發(fā)(BDD)似乎最適合DevOps測試,因?yàn)镈evOps的重點(diǎn)是使軟件開發(fā)人員與運(yùn)營團(tuán)隊(duì)保持一致,以便他們可以更快地一起部署。驅(qū)動開發(fā)(BDD)允許兩個(gè)團(tuán)隊(duì)的成員和測試人員在一組測試中工作,描述了他們的更改如何影響整體系統(tǒng)行為。
因此,如果已經(jīng)在踐行DevOps,那么沒有理由不踐行驅(qū)動開發(fā)(BDD)。
原文標(biāo)題:Testing in DevOps – The Basic and Critical Things You Need to Know,作者:Manav Jain