做了五年自動(dòng)化平臺(tái)開(kāi)發(fā),根據(jù)這幾年的工作經(jīng)歷,個(gè)人把自動(dòng)測(cè)試分為三個(gè)階段:
   
    依賴工具階段:
   
    在這個(gè)階段,一般是剛起步階段,公司開(kāi)始想做自動(dòng)化,開(kāi)始在選擇自動(dòng)化工具階段,是采用開(kāi)源的,還是商用的或者自己自主開(kāi)發(fā)呢。個(gè)人建議使用開(kāi)源+二次開(kāi)發(fā)。原因很簡(jiǎn)單一個(gè)是成本問(wèn)題,開(kāi)源意味著免費(fèi)了,二是開(kāi)源能拿到源碼可以讓它來(lái)適應(yīng)自己的結(jié)構(gòu)框架。采用商用的話,一個(gè)是成本問(wèn)題,因?yàn)闇y(cè)試本身不是產(chǎn)品不能直接效益的。公司一般都希望把資金盡可能投在產(chǎn)品上。而是采用商用產(chǎn)品,可能要去適應(yīng)它的框架。當(dāng)然你如果你的需求是那種大眾化需求,采用商用產(chǎn)品是一個(gè)比較好的選擇。
   
    另外一種選擇是自主開(kāi)發(fā)然后把它開(kāi)源。如果在市面沒(méi)有找到合適的工具,這時(shí)候要采用自己開(kāi)發(fā)了。但是為什么要開(kāi)源呢。原因在于一旦開(kāi)源之后,你的維護(hù)成本降低了,并且會(huì)大批具有相同需求人來(lái)不斷改進(jìn)它。但是如果你打算將來(lái)當(dāng)作產(chǎn)品來(lái)賣(mài),那另說(shuō)了。但常見(jiàn)的做法是公司一般會(huì)把自主開(kāi)發(fā)的helper工具開(kāi)源。
   
    工具有了之后,公司開(kāi)始招人,學(xué)習(xí)工具的使用,開(kāi)始大規(guī)模自動(dòng)化了。在這時(shí)候,依靠工具本身提供的功能,產(chǎn)品的自動(dòng)化率很大突飛猛進(jìn)的變化;旧夏芎芸熳龅搅30%左右的覆蓋率。
   
    走到這個(gè)時(shí)候,慢慢發(fā)現(xiàn)自動(dòng)化腳本開(kāi)發(fā)效率不高。這個(gè)時(shí)候開(kāi)始對(duì)工具進(jìn)行二次開(kāi)發(fā),開(kāi)發(fā)一些針對(duì)自己產(chǎn)品的特定功能。例如實(shí)現(xiàn)針對(duì)產(chǎn)品原語(yǔ)開(kāi)發(fā)。使開(kāi)發(fā)效率從C語(yǔ)言時(shí)代跨越到matlab時(shí)代。
   
    另外在這個(gè)時(shí)候,腳本的量有一定的規(guī)模,這個(gè)時(shí)候會(huì)發(fā)現(xiàn)讓這些腳本能夠有效run起來(lái)是一個(gè)大問(wèn)題。并且還不斷集成新開(kāi)發(fā)的腳本。這個(gè)時(shí)候開(kāi)始對(duì)腳本開(kāi)發(fā)了有一定的規(guī)范。例如要求case之間要求相互獨(dú)立。每個(gè)case要自成一體。不能說(shuō)一個(gè)case只能login,create動(dòng)作,而沒(méi)有delete,logout等等。
   
    等你把這開(kāi)發(fā)效率和case集成的問(wèn)題解決了,這時(shí)候產(chǎn)品的自動(dòng)化覆蓋率會(huì)有一個(gè)新突破,輕松能做70%以上。
   
    依賴人的階段:
   
    等自動(dòng)化覆蓋率達(dá)到50%以上之后,慢慢從對(duì)工具的依賴轉(zhuǎn)移到了對(duì)人的依賴。畢竟現(xiàn)在還做不到腳本的自動(dòng)定位問(wèn)題,自動(dòng)提bug. 腳本fail了,只能說(shuō)明出了問(wèn)題,但到底是誰(shuí)出錯(cuò)了(是腳本錯(cuò)了,還是軟件一個(gè)真正的bug呢)。這個(gè)是還是需要人來(lái)定位了。走到這個(gè)階段了,你的自動(dòng)化的case應(yīng)該已經(jīng)上1000了吧。每次的SUCCESS的可能性不大。假設(shè)fail 10%,這已經(jīng)是一個(gè)很好的值了。也是說(shuō)一次要有100個(gè)左右的case需要人來(lái)查,定位問(wèn)題,重現(xiàn)問(wèn)題。如果產(chǎn)品發(fā)布高一些三天發(fā)布一個(gè)版本;旧弦恢軙(huì)200個(gè)case需要去查,定位。如果發(fā)布頻率再高一些。要出現(xiàn)人機(jī)賽跑了。機(jī)器一晚上能run 1000個(gè)case沒(méi)有問(wèn)題。但讓人去做100左右的case的問(wèn)題定位,重現(xiàn)。是非常吃力了。這個(gè)時(shí)候自動(dòng)化有效性取決于結(jié)果檢查人員的效率。并且這個(gè)時(shí)候自動(dòng)化開(kāi)始招來(lái)結(jié)果檢查人員的抱怨。并且這個(gè)時(shí)候還會(huì)出現(xiàn)一個(gè)現(xiàn)象。例如1000個(gè)case失敗了80%,也是800個(gè)case.那800 失敗的case終對(duì)應(yīng)是1-2bug呢,還是對(duì)應(yīng)100bug呢(不敢期望800 失敗的case對(duì)應(yīng)800個(gè)bug了)。 如果是前者,可能會(huì)引起人們對(duì)自動(dòng)化有效性開(kāi)始懷疑。進(jìn)一步可能加劇測(cè)試與開(kāi)發(fā)之間矛盾。因?yàn)?0%的失敗率意味著軟件質(zhì)量很差,但實(shí)際結(jié)果查下來(lái),只是一兩個(gè)小bug引起的。以后遇到問(wèn)題,大家第一個(gè)問(wèn)題那是不是腳本錯(cuò)了。一旦這個(gè)矛頭出現(xiàn)了。測(cè)試與開(kāi)發(fā)之間矛盾激化了。
   
    到了這個(gè)時(shí)候,測(cè)試效率瓶頸又回到人的身上。在這個(gè)時(shí)候,要開(kāi)始對(duì)case本身結(jié)構(gòu)進(jìn)行重構(gòu)了。例如抽出一些基本功能的case來(lái)做smoke test. 然后把case按照產(chǎn)品功能的邏輯性進(jìn)行從上到下分層歸類,哪些case先run,哪些case后run.  并且盡可能優(yōu)化結(jié)果檢查效率,例如建立失敗后rerun的機(jī)制,對(duì)執(zhí)行過(guò)程log日志進(jìn)行分類優(yōu)化等等,把結(jié)果結(jié)果檢查效率給提上來(lái)。
 
這個(gè)階段,對(duì)于case本身有效性要做review了,例如是不是有測(cè)試點(diǎn)重復(fù)的case.刪除合并那些測(cè)試點(diǎn)重復(fù)的case.在這個(gè)時(shí)候大家想辦法如何減少case的數(shù)量(這個(gè)時(shí)候理想標(biāo)準(zhǔn)是case加一個(gè)太多,減一個(gè)又太少)。
   
    等把這些都做完了,產(chǎn)品的自動(dòng)化覆蓋率基本達(dá)到85%以上了。后面15%怎么辦呢,要從客戶反饋問(wèn)題中來(lái)提高了。但是能走到這一步的公司,自動(dòng)化測(cè)試可以說(shuō)是做的相當(dāng)成功了。
   
    依賴架構(gòu)的階段:
   
    走過(guò)了前面兩個(gè)階段,大家可能自動(dòng)化是不是做到頭了。其實(shí)只是萬(wàn)里長(zhǎng)征的第一步了。只要軟件開(kāi)發(fā)沒(méi)有停止。測(cè)試不會(huì)停止。在這時(shí)候往往會(huì)兩個(gè)方向:繼續(xù)開(kāi)發(fā)新的release,還是開(kāi)發(fā)新的產(chǎn)品。
   
    先說(shuō)繼續(xù)開(kāi)發(fā)的release. 新的release要開(kāi)發(fā)新功能,可能要對(duì)老功能進(jìn)行重構(gòu)。一些接口或者邏輯變了,你的自動(dòng)腳本自然也跟著改了。也是說(shuō)軟件有改動(dòng),你的腳本可能要跟著改。有可能接口改變對(duì)你來(lái)說(shuō)是致命的傷害。并且有的時(shí)候,一個(gè)老的版本已經(jīng)賣(mài)給出去了(假設(shè)為r1.0吧,現(xiàn)在開(kāi)發(fā)為r2.0)。客戶現(xiàn)場(chǎng)發(fā)現(xiàn)了bug.客戶由于各種原因又不愿意升級(jí)到新版本r2.0. 這時(shí)候你的開(kāi)發(fā)要出現(xiàn)分枝,并行開(kāi)發(fā)了。對(duì)于手工測(cè)試來(lái)說(shuō),問(wèn)題不大。但拿r2.0的腳本去測(cè)r1.0分枝恐怕不行吧。估計(jì)這時(shí)候,要么使現(xiàn)在腳本能夠這個(gè)差異給吃掉了。要么使測(cè)試腳本也分枝。對(duì)于產(chǎn)品公司可以花人力去做并行開(kāi)發(fā),對(duì)于測(cè)試也花人力去并開(kāi)維護(hù)腳本。這個(gè)有違當(dāng)初做自動(dòng)化初衷吧。軟件開(kāi)發(fā)怕是需求變更。自動(dòng)化測(cè)試腳本質(zhì)也是軟件。只是一套軟件去測(cè)另一軟件。  如果一個(gè)構(gòu)架好的軟件,具有很強(qiáng)擴(kuò)展性,容易應(yīng)對(duì)變化。反之,這個(gè)軟件慢慢會(huì)做不去了,給做死了。自動(dòng)化測(cè)試也會(huì)遇到同樣的問(wèn)題。
   
    現(xiàn)在在說(shuō)開(kāi)發(fā)新產(chǎn)品。一般大家都會(huì)選擇功能相似產(chǎn)品去開(kāi)發(fā),去重構(gòu)以前的代碼,以實(shí)現(xiàn)盡可能復(fù)用。同樣測(cè)試腳本也一樣,是不是能夠復(fù)用呢。對(duì)于軟件本身大家會(huì)花費(fèi)大量的人力去框架結(jié)構(gòu)設(shè)計(jì)與代碼重構(gòu)。對(duì)于測(cè)試腳本很少有人會(huì)花同樣人力去這樣做。并且走到時(shí)候,初做底層那批人也走的差不多,現(xiàn)在這個(gè)時(shí)候系統(tǒng)也可能變的非常龐大,重構(gòu)成本非常大。如果原來(lái)的測(cè)試腳本不能方便移植復(fù)用到新的產(chǎn)品中。慢慢這個(gè)自動(dòng)化測(cè)式也走到頭了。要么要從頭來(lái)過(guò)了。