【探討】Facebook是如何做自動(dòng)化測(cè)試的?
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2012/3/20 11:11:20 ] 推薦標(biāo)簽:
導(dǎo)讀:近,在國(guó)外知名問(wèn)答網(wǎng)站Quora上有個(gè)討論,原意是:“Facebook是如何做自動(dòng)化測(cè)試的,他們是怎樣測(cè)試才能保證每周的升級(jí)都可以不出差錯(cuò)的呢?” 引發(fā)了開(kāi)發(fā)者們的激烈討論。
來(lái)自Facebook的Steven Grimm很好地回答了這個(gè)問(wèn)題,覺(jué)得還不錯(cuò),這里以第一人稱(chēng)翻譯了一下。
對(duì)于PHP的代碼,我們寫(xiě)了非常多的基于PHPUnit測(cè)試框架的測(cè)試類(lèi),這些測(cè)試類(lèi)覆蓋范圍比較大,從簡(jiǎn)單的判讀真假的單元測(cè)試到大規(guī)模的后端服務(wù)的集成測(cè)試。開(kāi)發(fā)人員把運(yùn)行這些基于PHPUnit的測(cè)試用例作為他們工作中的一部分,同時(shí)這些用例也在一些專(zhuān)用的設(shè)備上不停地被運(yùn)行(注:持續(xù)集成模式)。當(dāng)開(kāi)發(fā)人員對(duì)一些代碼做了比較大的修改時(shí),在開(kāi)發(fā)機(jī)器上的自動(dòng)化工具會(huì)運(yùn)行這些測(cè)試用例的同時(shí)也會(huì)生成相應(yīng)的代碼覆蓋率數(shù)據(jù),對(duì)于需要提交到代碼庫(kù)的diff,在做代碼review的時(shí)候回自動(dòng)地產(chǎn)生一份帶有覆蓋率的測(cè)試報(bào)告。
對(duì)于前端的代碼,我們使用Waitir(注:Waitir是前端UI的自動(dòng)化測(cè)試框架)做了基于瀏覽器的界面自動(dòng)化測(cè)試。這些測(cè)試用例涵蓋了網(wǎng)站頁(yè)面的功能,特別是針對(duì)隱私方面,比如:“用戶(hù)X發(fā)布了Y,而Y應(yīng)該/不應(yīng)該被用戶(hù)Z看到”,有著大量的基于瀏覽器級(jí)別的這種用例。(這些隱私規(guī)則當(dāng)然也會(huì)使用一些更低級(jí)別的方法被測(cè)試到,但是這些規(guī)則的實(shí)現(xiàn)是必須要嚴(yán)格執(zhí)行的,并有著非常高的優(yōu)先級(jí),因此這部分必須要有足夠的測(cè)試用例來(lái)覆蓋)
除了一些使用watir的全自動(dòng)化用例以外,我們也有一些半自動(dòng)化的測(cè)試。這些測(cè)試也使用了waitir技術(shù),這樣可以使一些表格填充或者點(diǎn)擊button來(lái)完成整改界面上的流程的測(cè)試不太單調(diào)乏味,而且我們可以很清楚地檢查和驗(yàn)證當(dāng)前的步驟或流程是否正確合理。
我們也在嘗試開(kāi)始使用JSSpec (注:JavaScript單元測(cè)試框架)去做一些JavaScript代碼的單元測(cè)試,但當(dāng)前也是剛剛開(kāi)始做。
對(duì)于后端服務(wù)的測(cè)試,根據(jù)不同的服務(wù)特性我們采用了許多不同的測(cè)試框架與方法。對(duì)于一些需要開(kāi)源發(fā)布的項(xiàng)目,我們會(huì)使用開(kāi)源的測(cè)試框架,像Boost和JUnit測(cè)試框架(注:Boost是針對(duì)C++/JUnit是針對(duì)Java的測(cè)試框架);對(duì)于另外一些項(xiàng)目,可能永遠(yuǎn)都不會(huì)發(fā)布到外界,我們是使用內(nèi)部開(kāi)發(fā)的可以很緊密地與我們build系統(tǒng)集成在一起的C++測(cè)試框架。還有少數(shù)項(xiàng)目會(huì)使用項(xiàng)目級(jí)別的測(cè)試工具。多數(shù)后端服務(wù)的測(cè)試都會(huì)緊緊地和持續(xù)集成/Build系統(tǒng)結(jié)合在一起,這些持續(xù)集成的build系統(tǒng)會(huì)不停地針對(duì)源代碼自動(dòng)地運(yùn)行測(cè)試用例并生成測(cè)試結(jié)果,測(cè)試結(jié)果在存儲(chǔ)在數(shù)據(jù)庫(kù)的同時(shí)會(huì)發(fā)送到通知系統(tǒng)中去。
HipHop(注:HipHop for PHP是Facebook的PHP項(xiàng)目)有一套類(lèi)似的持續(xù)集成系統(tǒng),HipHop的單元測(cè)試和所有基于PHPUnit的測(cè)試都會(huì)被運(yùn)行。所有的這些測(cè)試結(jié)果會(huì)和基于普通的PHP解釋器的結(jié)果做對(duì)比,從而可以看到不同PHP上的行為的不同;
Facebook的測(cè)試工具將測(cè)試結(jié)果存儲(chǔ)在數(shù)據(jù)庫(kù)的同時(shí)會(huì)發(fā)送一份通知郵件,這個(gè)郵件會(huì)包含執(zhí)行失敗的信息并且郵件的接收范圍是開(kāi)發(fā)同學(xué)可以自己調(diào)整的。(例如,你可以選擇只有在測(cè)試連續(xù)失敗一段時(shí)候的時(shí)候才接收到通知郵件,或者當(dāng)一個(gè)用力失敗的時(shí)候立刻收到通知)。在瀏覽器UI上,測(cè)試結(jié)果和 缺陷/開(kāi)發(fā)任務(wù)跟蹤系統(tǒng)會(huì)結(jié)合在一起,可以很容易的將測(cè)試失敗與開(kāi)發(fā)任務(wù)關(guān)聯(lián)起來(lái)。
測(cè)試中一個(gè)非常重要的現(xiàn)象是“導(dǎo)致阻塞”,也是一個(gè)測(cè)試用例失敗有可能會(huì)阻止發(fā)布(在Facebook,有發(fā)布工程師會(huì)來(lái)評(píng)估是否可以將帶有問(wèn)題的代碼發(fā)布到生產(chǎn)環(huán)境,發(fā)布工程師在必要的情況下會(huì)得到授權(quán)去阻止產(chǎn)品的發(fā)布)。阻止產(chǎn)品發(fā)布上線(xiàn)的事情是被認(rèn)為是非常嚴(yán)重的問(wèn)題,因?yàn)樵贔acebook大家對(duì)于這種快速發(fā)布的模式是深深引以為豪的。
我所在的團(tuán)隊(duì)是測(cè)試工程部門(mén),主要職責(zé)是打造通用基礎(chǔ)工具,這些工具會(huì)被上述的所有人用到,同時(shí)我們也在維護(hù)測(cè)試框架,像PHPUnit和Watir。Facebook沒(méi)有專(zhuān)職的測(cè)試團(tuán)隊(duì),所有的工程師都需要為他們的代碼寫(xiě)自動(dòng)化測(cè)試用例,并維護(hù)這些測(cè)試用例,保證產(chǎn)品代碼改變的同時(shí)這些測(cè)試代碼可以正確地運(yùn)行。
Facebook的測(cè)試還處于一個(gè)初期起步嘗試階段,上面的介紹都只是我們?cè)诋?dāng)前運(yùn)行的方法而已。
相關(guān)推薦

最新發(fā)布
性能測(cè)試之測(cè)試環(huán)境搭建的方法
2020/7/21 15:39:32軟件測(cè)試是從什么時(shí)候開(kāi)始被企業(yè)所重視的呢?
2020/7/17 9:09:11Android自動(dòng)化測(cè)試框架有哪些?有什么用途?
2020/7/17 9:03:50什么樣的項(xiàng)目適合做自動(dòng)化?自動(dòng)化測(cè)試人員應(yīng)具備怎樣的能力?
2020/7/17 8:57:06幾大市面主流性能測(cè)試工具測(cè)評(píng)
2020/7/17 8:52:11RPA機(jī)器人能夠快速響應(yīng)企業(yè)需求,是怎么做到的?
2020/7/17 8:48:05Bug可以真正消滅嗎?為什么?
2020/7/17 8:43:03軟件測(cè)試基本概念是怎么來(lái)的?軟件測(cè)試生命周期的形成歷經(jīng)了什么?
2020/7/16 9:11:10