qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          QTP將死——開源測(cè)試登上舞臺(tái)

            QTP作為測(cè)試自動(dòng)化的主流,已經(jīng)很長(zhǎng)時(shí)間了:以前的主流測(cè)試是window GUI應(yīng)用,和普通WEB應(yīng)用;沒有那些復(fù)雜的其他環(huán)境,如flex silverlight wpf 手機(jī)等。

            以前良好協(xié)作的自動(dòng)化用例管理平臺(tái),是TD(qc),能夠?qū)崿F(xiàn)用例與自動(dòng)化關(guān)聯(lián)。

            以至于:QC/QTP甚至成了自動(dòng)化測(cè)試招聘的標(biāo)準(zhǔn)……現(xiàn)在呢?

            隨著WEB2.0+,移動(dòng)互聯(lián)網(wǎng)的興起,QTP/QC還能勝任嗎?

            數(shù)年之前,EJB也是標(biāo)準(zhǔn),但是EJB造成了一些招致IT人員反感的問題:開發(fā)調(diào)試維護(hù)困難,方案太重與應(yīng)用服務(wù)器緊密綁定(昂貴)性能低下……

            我們回過頭來(lái)看看,QTP/QC也不是與這個(gè)很類似嗎?

            QTP成也對(duì)象倉(cāng)庫(kù)敗也對(duì)象倉(cāng)庫(kù),錄制的東西不比手寫,手寫的是自己的孩子自己認(rèn)識(shí),可維護(hù)性強(qiáng);

            QTP如果你不與QC關(guān)聯(lián),很難關(guān)聯(lián)用例與需求QTP實(shí)際運(yùn)行性能低下,特別是插件(先不考慮插件的價(jià)格)QTP做測(cè)試,必須有框架……這里不想討論LR。

            如果我們不用QTP/QC,開源世界里能否有東西勝任呢?

            答案是肯定的。回頭看看EJB:Hibernate取代了EntityBeanSpring成了粘合劑這二者聯(lián)手將java世界的標(biāo)準(zhǔn),送進(jìn)了博物館。

            那么QTP/QC中,開源世界的對(duì)位應(yīng)該是哪些呢?

            我認(rèn)為:QTP的取代者,會(huì)是webdriver,webdriver就像hibernate的地位;當(dāng)然,你也可以不用webdriver,就你可以不用hibernate而用myBatis/dbutil等取代一樣,你也可以用watir/htmlunit/seleniumRC/webaii/white/sikuli/bromine等任何來(lái)代替webdriver的地位;就跟你想在寫原生sql一樣,你也可以寫(win32ole)win32api, linux xdotool來(lái)完成自動(dòng)化。

            Hibernate這頭熊是如何被喚醒的?我們來(lái)回憶一下,當(dāng)時(shí)hibernate的問題是sessionfactory獲取datasource,依賴jndi查找,而Spring用了依賴注入解決了這個(gè)問題;Sring成了真正意義上的企業(yè)級(jí)粘合劑,更關(guān)鍵的是spring所帶來(lái)的一種務(wù)實(shí)的思想。

            那誰(shuí)來(lái)把QTP從QC上解耦,并能提供良好的用例組織和管理呢?

            答案就是BDD目前的事實(shí)標(biāo)準(zhǔn):Cucumber!!

            引用維基百科:行為驅(qū)動(dòng)開發(fā)(縮寫B(tài)DD)是一種敏捷軟件開發(fā)的技術(shù),它鼓勵(lì)軟件項(xiàng)目中的開發(fā)者、QA和非技術(shù)人員或商業(yè)參與者之間的協(xié)作。BDD最初是由Dan North在2003年命名[1],它包括驗(yàn)收測(cè)試和客戶測(cè)試驅(qū)動(dòng)等的極限編程的實(shí)踐,作為對(duì)測(cè)試驅(qū)動(dòng)開發(fā)的回應(yīng)。在過去數(shù)年里,它得到了很大的發(fā)展[2]。

            2009年,在倫敦發(fā)表的“敏捷規(guī)格,BDD和極限測(cè)試交流”[3]中,Dan North對(duì)BDD給出了如下定義:BDD是第二代的、由外及內(nèi)的、基于拉(pull)的、多方利益相關(guān)者的(stakeholder)、多種可擴(kuò)展的、高自動(dòng)化的敏捷方法。它描述了一個(gè)交互循環(huán),可以具有帶有良好定義的輸出(即工作中交付的結(jié)果):已測(cè)試過的軟件。

            BDD的重點(diǎn)是通過與利益相關(guān)者的討論取得對(duì)預(yù)期的軟件行為的清醒認(rèn)識(shí)。它通過用自然語(yǔ)言書寫非程序員可讀的測(cè)試用例擴(kuò)展了測(cè)試驅(qū)動(dòng)開發(fā)方法。行為驅(qū)動(dòng)開發(fā)人員使用混合了領(lǐng)域中統(tǒng)一的語(yǔ)言的母語(yǔ)語(yǔ)言來(lái)描述他們的代碼的目的。這讓開發(fā)著得以把精力集中在代碼應(yīng)該怎么寫,而不是技術(shù)細(xì)節(jié)上,而且也最大程度的減少了將代碼編寫者的技術(shù)語(yǔ)言與商業(yè)客戶、用戶、利益相關(guān)者、項(xiàng)目管理者等的領(lǐng)域語(yǔ)言之間來(lái)回翻譯的代價(jià)。

            Dan North創(chuàng)造了首個(gè)BDD框架:JBehave[1];之后是Ruby語(yǔ)言的基于故事的RBehave[4],后來(lái)被納入了RSpec項(xiàng)目[5]。他還與大衛(wèi)赫利姆斯基、Aslak Hellesy及其他人開發(fā)了RSpec,并一起編寫了《The RSpec BookBehaviour Driven Development with RSpecCucumberand Friends》。RSpec中第一個(gè)基于故事的框架,后來(lái)被主要由Aslak Hellesy開發(fā)的Cucumber取代。

            這一大段話,頭都要暈掉了吧。OK,我們來(lái)看一個(gè)典型的BDD用例(用戶故事):

            你可以認(rèn)為,這就是兩個(gè)測(cè)試用例!那他與普通的測(cè)試用例有什么不同呢?

            用戶故事關(guān)聯(lián)了需求,是包含了需求的用例故事貫穿整個(gè)軟件生命周期,直到驗(yàn)收故事是軟件的商業(yè)價(jià)值,是最“有效文檔”OK了!那如何把故事跟自動(dòng)化關(guān)聯(lián)起來(lái)呢?BDD框架提供了最簡(jiǎn)單最直接的方式:正則關(guān)聯(lián)。

            BDD就是如此神奇!他提供了最簡(jiǎn)單的方式,就向膠水融合一樣可以把任意代碼與用戶故事關(guān)聯(lián)起來(lái)且不限于:?jiǎn)卧獪y(cè)試,集成測(cè)試,UI自動(dòng)化,接口驗(yàn)證,安全等。

            BDD框架,普遍自帶數(shù)據(jù)驅(qū)動(dòng),關(guān)鍵字驅(qū)動(dòng),參數(shù)化。

            一個(gè)典型的ui automation例子(點(diǎn)擊圖片查看大圖):

            運(yùn)行結(jié)果:

            說(shuō)幾點(diǎn):

            ● BDD,只是一種思想,一種輕量級(jí)測(cè)試實(shí)踐;BDD注重有效文檔,注重用戶故事的拆分細(xì)化 。

            ● story可以使得黑盒與自動(dòng)化人員分離;只要story控制的好,可以招廉價(jià)開發(fā)來(lái)實(shí)現(xiàn)自動(dòng)化

            ● 就跟你可以用google guice, picocontainer替換spring一樣,BDD框架可以自由選擇,因?yàn)槎际翘峁┫嗤L(fēng)格的功能

            ● 比如py里可以用lettuce,.net上有cuke4nuke,groovy有easyb, spock,sikuli也支持BDD等

            ● VBS受限于語(yǔ)言表達(dá)力,就別想BDD了。

            ● 如果你的企業(yè)愿意花幾十萬(wàn)(不是為了只賣最貴),還不如只花幾萬(wàn)來(lái)投在人力建設(shè)上,通過開源測(cè)試來(lái)提升團(tuán)隊(duì), 企業(yè)里沒有什么比人才更可貴的了。

            ● BDD對(duì)粘合自動(dòng)化或者框架的唯一要求,支持代碼編寫并啟動(dòng),比如selenium watir等,而依賴特定GUI的不見得適合。

            ● 你不見得需要想開發(fā)QTP框架樣重復(fù)造輪子,合理的使用開源社區(qū)現(xiàn)有輪子即可。

            ● BDD可以與bromine/robotium一起,測(cè)試iphone/android

            ● BDD工具完全可以與CI整合,方式多種多樣。

            目前情況下,BDD缺少一個(gè)GUI界面的故事管理工具,你可以自己開發(fā)一個(gè),或者買商業(yè)的,不過更多的人選擇把story帖在墻上。

            隨著cucumber-jvm的火熱,到了該是BDD成為測(cè)試主流的時(shí)候了,畢竟BDD只是一種思想,一種表現(xiàn)形式,不是一種具體的思路,也不強(qiáng)制你購(gòu)買某個(gè)廠商的工具(當(dāng)然thoughtworks也有BDD工具twist);現(xiàn)在企業(yè)都講究整合,作為廣大發(fā)展中測(cè)試人員,特別是在成長(zhǎng)中公司的測(cè)試人員,拿起你的斧頭,把該砍的都砍掉,做輕量級(jí)測(cè)試吧!你會(huì)找到自己的樂趣的。

            常用BDD框架:JBehave rspec cucumber cuke4nuke spock等等常見支持與BDD粘合的工具:watir selenium celerity white UIA3.0 robotium bromine(iphone) webaii soapui(core)等

            常見與BDD一起使用的編程語(yǔ)言:ruby python groovy node.js java c# erlang lua,就是沒有VBSwebdriver,自動(dòng)化(特指測(cè)試自動(dòng)化)領(lǐng)域的hibernate;cucumber,自動(dòng)化領(lǐng)域的spring。當(dāng)冬眠的熊遇上春天……

            讓廣大自動(dòng)化人員在開源世界中熱起來(lái)吧!





          posted on 2012-11-05 10:11 順其自然EVO 閱讀(1549) 評(píng)論(2)  編輯  收藏 所屬分類: selenium and watir webdrivers 自動(dòng)化測(cè)試學(xué)習(xí)

          評(píng)論

          # re: QTP將死——開源測(cè)試登上舞臺(tái) 2014-08-09 21:23 qtper

          寫JAVA的孩子總是那么自以為是啊!  回復(fù)  更多評(píng)論   

          # re: QTP將死——開源測(cè)試登上舞臺(tái)[未登錄] 2014-08-09 22:15 seven

          @qtper
          還寫java 你真人才,bdd什么語(yǔ)言寫不了,你覺得自以為是可以不看,用你的qtp吧  回復(fù)  更多評(píng)論   

          <2012年11月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 普兰店市| 礼泉县| 井冈山市| 宁南县| 班戈县| 织金县| 巴青县| 怀柔区| 新宁县| 西藏| 丰台区| 珲春市| 孟津县| 洛扎县| 定日县| 绥德县| 永仁县| 布拖县| 兴国县| 邳州市| 西安市| 北海市| 偏关县| 嵩明县| 章丘市| 称多县| 扬中市| 顺义区| 崇义县| 恭城| 安阳县| 枣强县| 漳州市| 宣威市| 垣曲县| 逊克县| 靖江市| 仙游县| 宁海县| 亳州市| 孝感市|