一個(gè)優(yōu)秀的測試基礎(chǔ)架構(gòu)是如何煉成的?eBay茹炳晟暢談測試演進(jìn)史
原創(chuàng)【51CTO.com原創(chuàng)稿件】2018年5月18-19日,由51CTO主辦的全球軟件與運(yùn)維技術(shù)峰會在北京召開。此次峰會圍繞人工智能、大數(shù)據(jù)、物聯(lián)網(wǎng)、區(qū)塊鏈等12大核心熱點(diǎn),匯聚海內(nèi)外60位一線專家,是一場高端的技術(shù)盛宴,也是***IT技術(shù)人才學(xué)習(xí)和人脈拓展不容錯(cuò)過的平臺。
在“DevOps轉(zhuǎn)型之路”分會場,eBay中國研發(fā)中心測試基礎(chǔ)架構(gòu)技術(shù)主管茹炳晟帶來了《測試基礎(chǔ)架構(gòu)的演進(jìn)之路》的主題演講,分享了大型電商網(wǎng)站的測試基礎(chǔ)架構(gòu)設(shè)計(jì)經(jīng)驗(yàn)與心得。會后,51CTO記者根據(jù)茹炳晟在WOT2018全球軟件與運(yùn)維技術(shù)峰會的演講內(nèi)容進(jìn)行了整理。
GUI 自動化測試框架的演變
茹炳晟介紹到,eBay是一家大型電商平臺,其中測試基礎(chǔ)架構(gòu)與DevOps的關(guān)系非常大,跟CI/CD(持續(xù)集成持續(xù)發(fā)布)高度集成。在CI/CD的流程中,對測試的調(diào)用都是通過統(tǒng)一的測試執(zhí)行服務(wù),通過這個(gè)統(tǒng)一的測試執(zhí)行服務(wù)來發(fā)起所有的測試執(zhí)行,包括API測試,GUI測試和性能測試。CI/CD整個(gè)流程過程當(dāng)中,發(fā)起者并不需要知道測試運(yùn)行在哪里,測試執(zhí)行環(huán)境在哪里,測試是怎么設(shè)計(jì)的,他只負(fù)責(zé)發(fā)起一個(gè)測試,同步或者異步得到一個(gè)結(jié)果,然后決定這個(gè)流水線是不是可以往下走。這些行為都是基于測試基礎(chǔ)架構(gòu)來進(jìn)行構(gòu)建的。
GUI(圖形用戶界面)自動化測試是最早的自動化測試之一,屬于比較重量級的測試,投入產(chǎn)出比一直不高,所以對于大型電商網(wǎng)站通常用于上線前的輕量級Smoke測試以確保所以核心功能的正確性。同時(shí)GUI(圖形用戶界面)自動化測試也是經(jīng)歷了一個(gè)傳奇式的變化,從一個(gè)非常簡單的架構(gòu),一直演進(jìn)到大型電子商務(wù)能夠適應(yīng)全球化站點(diǎn),同一套測試腳本能夠運(yùn)行在全球化不同國家的站點(diǎn)上。
在最原始的測試框圖上,有業(yè)務(wù)的需求會轉(zhuǎn)換成功能需求,功能需求轉(zhuǎn)換成測試需求,測試需求會有測試用例,測試用例會在本地測試執(zhí)行環(huán)境運(yùn)行。測試團(tuán)隊(duì)會在本地機(jī)器上面打開這個(gè)網(wǎng)站進(jìn)行測試,那么問題來了,一旦需要進(jìn)行全回歸測試,原始方法效率肯定很差,必須借助自動化測試功能,錄制回放就是最初的自動化。UFT這種工具可以在錄制完之后反復(fù)回放腳本。但是缺點(diǎn)是一旦界面有任何變化的,腳本需要從最初開始修改,這顯然讓人無法接受。
模塊化因此應(yīng)運(yùn)而生,它可以將一些基于操作級別可重復(fù)的腳本單獨(dú)抽象出來,并且把它參數(shù)化。但茹炳晟表示,在實(shí)際操作中,哪些是可重復(fù)的腳本,腳本的力度如何控制,其實(shí)比較難處理。因?yàn)槊總€(gè)人理解都不一樣,對于可重用腳本的定義,在每個(gè)團(tuán)隊(duì)之間會有很大的差異。
經(jīng)過進(jìn)一步的發(fā)展,茹炳晟和他的團(tuán)隊(duì)把可重復(fù)的腳本進(jìn)一步演變成對于Page Object(頁面對象模型)的抽象,自動化腳本就變成了page的分裝,上面有基于page元素上的操作。后來,他們在page的基礎(chǔ)上,又做了一層Business Flow(業(yè)務(wù)流程)的抽象,測試人員可以直接看到業(yè)務(wù)驅(qū)動的測試腳本,從case維護(hù)的易操作性及可讀性來看,又上了一個(gè)檔次。
再到后來,茹炳晟和他的團(tuán)隊(duì)開始嘗試使用Out-of-box Test Data / Golden Data Set測試數(shù)據(jù),逐漸開始基于Unified Flow Framework實(shí)現(xiàn)Flow Branch控制。茹炳晟解釋道,像全球都擁有站點(diǎn)的大型電商網(wǎng)站,每一個(gè)國家對網(wǎng)站的功能都會有輕微的差異,這就要求技術(shù)團(tuán)隊(duì)必須在同一個(gè)業(yè)務(wù)流程里能夠?qū)崿F(xiàn)不同的功能點(diǎn)。過去是5個(gè)國家寫5個(gè)各自獨(dú)立的腳本,而現(xiàn)在只需要1個(gè)腳本就可以供不同國家站點(diǎn)進(jìn)行差異化測試,對工程師的工作效能提升而言是非常有幫助的。
后來,他們又基于Page Encapsulation Code Generator提高Page Object的效率。當(dāng)一個(gè)新的page或者一個(gè)page有改動的時(shí)候,他們可以通過一個(gè)很小的程序,就可以把這個(gè)page上面所有的元素動態(tài)捕捉下來,以后需要用的時(shí)候,只要是這個(gè)page上面的元素就可以調(diào)用了,整個(gè)page的生成都是自動完成,不需要人工去做。
到了這個(gè)階段,測試能力已經(jīng)非常強(qiáng),但是eBay的測試團(tuán)隊(duì)仍然沒有滿足,他們引入Test Data Service,提供統(tǒng)一的測試數(shù)據(jù)準(zhǔn)備服務(wù)。他們提供了一個(gè)完整統(tǒng)一的接口,可以幫助測試人員降低所有測試數(shù)據(jù)的復(fù)雜性,讓測試工作變得更加高效。
測試數(shù)據(jù)之疼+應(yīng)對策略的平臺化演變
茹炳晟將測試數(shù)據(jù)的痛點(diǎn)歸納成五個(gè)部分。
***個(gè)痛點(diǎn)是On-the-fly數(shù)據(jù)的時(shí)間消耗準(zhǔn)備。On-the-fly是什么概念呢?測試人員在測試用例開始實(shí)施之前,會在測試的腳本里動態(tài)生成數(shù)據(jù),但如果是非常復(fù)雜的數(shù)據(jù)會十分消耗時(shí)間。
第二個(gè)痛點(diǎn)是Out-of-box測試數(shù)據(jù)的臟數(shù)據(jù),在擁有大量測試用例的場景,可能存在數(shù)據(jù)相互干擾的問題,會讓大量的測試用例由于臟數(shù)據(jù)而測試不通過。
第三個(gè)痛點(diǎn)是測試數(shù)據(jù)本身組合的復(fù)雜性,電子商務(wù)網(wǎng)站需要綁定不同的支付方式、快遞方式,不同國家有不同法務(wù)要求,各種參數(shù)的組合非常多,給測試數(shù)據(jù)帶來很大的困擾。
第四個(gè)痛點(diǎn)是測試數(shù)據(jù)準(zhǔn)備的環(huán)境依賴性,例如做某個(gè)功能的測試,需要準(zhǔn)備特定的數(shù)據(jù),但是因?yàn)槲⒎?wù),這個(gè)數(shù)據(jù)是由另外一個(gè)服務(wù)器提供,但各種問題可能導(dǎo)致數(shù)據(jù)準(zhǔn)備不出來,結(jié)果功能測試就無法完成。
第五個(gè)痛點(diǎn)是性能測試數(shù)據(jù)準(zhǔn)備的時(shí)間消耗。在這方面eBay有非常好的實(shí)踐,通過Test Data Service,他們將成功率提高了很高的量級,并且把測試數(shù)據(jù)的問題從原來的30%降到5%以下。
API自動化測試框架的演變
茹炳晟介紹到,大型電商網(wǎng)站通常有上萬個(gè)API,由于快速迭代并上線發(fā)布,留給測試的時(shí)間非常少,只能通過一個(gè)很大的集群環(huán)境去并行運(yùn)行這些API測試,他們會引入一個(gè)并發(fā)的訪問控制器,對這些集群、上萬個(gè)API進(jìn)行控制。
經(jīng)過五六個(gè)不同階段的發(fā)展,對于API測試,目前eBay已經(jīng)完全遷到微服務(wù)上實(shí)現(xiàn)。目前公司service數(shù)量大概有百余個(gè),如果按原來API的思路,case數(shù)量會超過10萬,即使用集群也跑不完。所以他們改變策略,引入了一個(gè)基于消費(fèi)者契約的驗(yàn)證模式。例如當(dāng)A端的B來調(diào)用某個(gè)腳本,測試系統(tǒng)只需要知道是誰來調(diào)用,如何調(diào)用,然后把涉及到的API調(diào)用測試一遍就可以了。下一次只會測試之前調(diào)用過的腳本,就能保證整個(gè)模塊的質(zhì)量。
對于測試執(zhí)行環(huán)境的搭建,茹炳晟以GUI測試為例,例如某個(gè)測試人員要求這個(gè)GUI測試是運(yùn)行在某個(gè)操作系統(tǒng)中的某個(gè)瀏覽器上的某一個(gè)版本上。那么他們會先到Selenium Grid集群里發(fā)送請求,詢問集群下面有沒有安裝著這個(gè)操作系統(tǒng)的這個(gè)瀏覽器版本的節(jié)點(diǎn)?如果有,測試系統(tǒng)會直接發(fā)給他,如果沒有,測試系統(tǒng)會動態(tài)地創(chuàng)建一個(gè)。
以上內(nèi)容是51CTO記者根據(jù)eBay中國研發(fā)中心測試基礎(chǔ)架構(gòu)技術(shù)主管茹炳晟在WOT2018全球軟件與運(yùn)維技術(shù)峰會的采訪內(nèi)容整理,更多關(guān)于WOT的內(nèi)容請關(guān)注51cto.com。
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請注明原文作者和出處為51CTO.com】