在半年前,我想很多人,包括我自己,都不知道watir是個(gè)什么東東。在國內(nèi)幾乎沒有介紹的文章,嘗鮮者聊聊。但半年后,隨著用Ruby+Watir開發(fā)了一個(gè)具有較大規(guī)模的自動(dòng)化測(cè)試框架,再回頭看來,我個(gè)人認(rèn)為,用RAW是做web自動(dòng)化測(cè)試的第一選擇。事實(shí)上,現(xiàn)在網(wǎng)上關(guān)于Watir的介紹和經(jīng)驗(yàn)也多了起來。
在用Watir之前,對(duì)于自動(dòng)化測(cè)試工具,我只有一些使用Rational Robot的經(jīng)驗(yàn)。Robot對(duì)于我來說大的問題是,從一個(gè)C/C++/java程序員看來,它的scrīpt語言實(shí)在太不敢恭維了。包括語法'丑陋',提供的外部庫功能匱乏(net, file, remote control, database ....),還有編輯器也非常簡(jiǎn)陋。總的來說,我在寫robot scrīpt的時(shí)候,我都在懷念在eclipse里使用java無所不能的感覺。
Robot并不全是壞的印象。它c(diǎn)ool的地方是Record&Replay。但是,如果是對(duì)某個(gè)不斷進(jìn)化的產(chǎn)品進(jìn)行測(cè)試,而且這個(gè)產(chǎn)品還不是那么簡(jiǎn)單。那么直接RecordReplay是遠(yuǎn)遠(yuǎn)不夠的。套用一句不知道是哪個(gè)專家說的“自動(dòng)化測(cè)試程序也是程序”,也需要設(shè)計(jì),也需要架構(gòu),也需要設(shè)計(jì)模式。
其他商業(yè)的自動(dòng)化測(cè)試工具我還簡(jiǎn)單體驗(yàn)過Silktest,也是我所在公司曾經(jīng)采用的。但它的scrīpt語言更不討人喜歡,而且據(jù)使用它的同事說穩(wěn)定性存在問題。更好的工具比如Mercury的QTP,我沒有使用過。
現(xiàn)在看來Ruby+Watir確實(shí)是一個(gè)正確的選擇,但半年前這并不是顯而易見的。公司原來的測(cè)試工具是silktest,并在上面開發(fā)了一定量的testcases。不過由于人力不夠和lisense的問題,這個(gè)測(cè)試套件已經(jīng)有很長(zhǎng)一段時(shí)間停步不前了,并沒有隨著產(chǎn)品的更新而更新。silktest形如雞肋,Robot,QTP...價(jià)格又高不可攀,而對(duì)于一個(gè)做產(chǎn)品的公司來說,自動(dòng)化測(cè)試似乎是不可避免的,所以公司招聘了一個(gè)自動(dòng)化測(cè)試Consultant,希望她能帶來價(jià)廉物美的利器。而這個(gè)consultant此前在用Ruby+Watir做項(xiàng)目。
Consultant帶來了Ruby+Watir,并計(jì)劃做一個(gè)SmokeTest suite,集成進(jìn)Nightly build。她希望能在QA組里找一個(gè)助手,因?yàn)槲乙郧白隽艘恍┳詣?dòng)互測(cè)試的工具并在team里使用,所以我也參加了進(jìn)來。當(dāng)然這個(gè)時(shí)候,我對(duì)Watir一無所知,而Ruby,雖然曾經(jīng)進(jìn)入了我的視野,但在一年前,我選擇了Python作為我的第一腳本語言。
2個(gè)人的Team建立了。計(jì)劃是consultant著手搭建框架,我先學(xué)習(xí)Ruby和Watir。隨后的一個(gè)月,我不得不放下放下ruby,而參加更緊迫的產(chǎn)品releas測(cè)試。當(dāng)然我還是抽空翻看了ProgramingRuby 2Ed一書,寫了一些程序來熱身一下,雖然是蜻蜓點(diǎn)水,但也被ruby的優(yōu)美和強(qiáng)大折服。當(dāng)consultant再次來到中國,我對(duì)她準(zhǔn)備如何實(shí)現(xiàn)這個(gè)框架還是一無所知。我也不知道我得職責(zé)到底是什么。
當(dāng)我提出我得問題后,consultant給我看了她已經(jīng)完成的一些東西,我看了感覺比較失望。因?yàn)閺乃拇a看,她并不想提供一個(gè)框架,只是針對(duì)smoketest提供一些例程。對(duì)這些例程配合不同的輸入數(shù)據(jù),構(gòu)成smoketest的全部。而我此時(shí)已經(jīng)雄心勃勃,希望看到的是一個(gè)精心設(shè)計(jì)的面向?qū)ο罂蚣埽瑢?duì)QA所面對(duì)的產(chǎn)品的功能有一個(gè)比較完備的抽象層,-它不僅僅是為了Smoketest
這個(gè)框架要實(shí)現(xiàn)的目標(biāo)是,在它基礎(chǔ)上應(yīng)該能夠把大部分(>80%)的Manual test比較輕松的翻譯為自動(dòng)化腳步。對(duì)每一個(gè)step都能直接而且方便的翻譯為一句ruby 語句。也是說需要達(dá)到一種效果:讀自動(dòng)化腳本像在讀用人類語言描述的testcase。自動(dòng)化腳本完全是在描述測(cè)試邏輯,這真是一個(gè)夠“理想化”的目標(biāo)!
我提出了我的想法,發(fā)給她一份我對(duì)整個(gè)框架設(shè)計(jì)的構(gòu)思。她顯然并不愿意大動(dòng)干戈。我于是試圖說服我們這邊的QA Manager趁此機(jī)會(huì)做一個(gè)全功能的測(cè)試框架,并獲得了成功。consultant只能作出讓步,但要求不能miss smoketest的目標(biāo)。當(dāng)然我同意了。
接下來的一個(gè)月consultant休假,她給我了一份list,羅列了要達(dá)到的目標(biāo),然后閃人了。我則全心投入了實(shí)現(xiàn)這個(gè)框架的工作。
經(jīng)過幾個(gè)月的開發(fā),重要的是在給同事們使用后并得到了好多反饋。后我覺得是初步達(dá)到了目標(biāo)。隨后,我會(huì)謝謝在這個(gè)過程中遇到的問題,解決的方法和得到的經(jīng)驗(yàn)。