前兩天跟老闆出去作pre-sales. 主要是去賣咱們的自動化測試服務,工具用的是HP UFT。作過自動化的人應該知道,UFT在自動化測試領域已經算是最好的工具之一了。客戶是個有技術背景的人,因此不那麼好忽悠。咱們準備了一大堆自動化測試優勢的幻燈片,他倒好,上來直接問,大家的工具的缺陷有哪些。而後我就開始巴拉巴拉地跟他說有哪些缺點,一發不可收拾的是,每解釋完一個問題,他就會有更多問題。最後口乾舌燥也沒能所有解釋清楚,除了感嘆一聲錢不那麼好賺,只能怪本身不能用英語流利地吹牛逼吧。安全
其中有一個問題,我回來之後又想了好久。當時他指着我作的POC(Prove of Concept)腳本,問道:」既然record & playback能夠作一個腳本,那麼爲何還須要自動化測試框架呢?」 簡而言之就是,我憑什麼要多花錢買大家的框架?我當時第一反應是,什麼?你在逗我嗎?自動化測試沒框架怎麼作? 固然個人回答官方的很,主要是從維護,可重用性,易用性地角度去跟他解釋了一遍,他彷佛也不是很滿意。服務器
回頭我想了想,到底爲何咱們須要自動化測試框架呢?越想越以爲委屈,由於我想問問各位開發,大家作項目的時候爲何要用框架呢?那自動化的本質不就是寫程序去測程序嘛,既然開發須要框架,那麼自動化測試爲何不要呢。框架
牢騷歸牢騷。認真地查了些資料。工具
什麼是框架?測試
框架(Framework)是整個或部分系統的可重用設計,表現爲一組抽象構件及構件實例間交互的方法;另外一種定義認爲,框架是可被應用開發者定製的應用骨架。前者是從應用方面然後者是從目的方面給出的定義。能夠說,一個框架是一個可複用的設計構件,它規定了應用的體系結構,闡明瞭整個設計、協做構件之間的依賴關係、責任分配和控制流程,表現爲一組抽象類以及其實例之間協做的方法,它爲構件複用提供了上下文(Context)關係。所以構件庫的大規模重用也須要框架。其實目前爲止,框架尚未統必定義,我比較喜歡Ralph Johnson所給出的定義:插件
一個框架是一個可複用設計,它是由一組抽象類及其實例間協做關係來表達的 【Johnson 98】。這個定義是從框架內涵的角度來定義框架的,固然也能夠從框架用途的角度來給出框架的定義:一個框架是在一個給定的問題領域內,一個應用程序的一部分設計與實現【Bosch 97】。設計
爲何要用框架?htm
又是一個理所固然的問題。由於軟件系統發展到今天已經很複雜了,特別是服務器端軟件,涉及到的知識,內容,問題太多。在某些方面使用別人成熟的框架,就至關於讓別人幫你完成一些基礎工做,你只須要集中精力完成系統的業務邏輯設計。並且框架通常是成熟,穩健的,他能夠處理系統不少細節問題,好比,事物處理,安全性,數據流控制等問題。還有框架通常都通過不少人使用,因此結構很好,因此擴展性也很好,並且它是不斷升級的,你能夠直接享受別人升級代碼帶來的好處。對象
爲何要搭建自動化測試框架?開發
從前我覺得,自動化測試最重要的事情是找對象(Find Test Object)。如今我明白了一個道理,沒有框架的自動化測試是找不到對象的,即便找到了也不會幸福的。就跟現實中,沒有車沒有房的人是很難找到對象的一個道理。
自動化測試的開發,一般是由自動化測試的需求決定的。這個需求主要包括:
還有不少測試需求,我沒辦法一一列舉出來,多數需求咱們均可以在測試框架裏去定製。如今能夠回答上面那個問題了,record & playback是不會幸福的,你須要自動化測試框架。
請慎重考慮是否須要自動化測試(成本投入高,風險大)
自動化測試是個很傲嬌的東西,它很挑項目。首先項目週期要長,可是需求不會頻繁變動;其次系統中多數對象要能夠被識別,而且不存在大量第三方插件。並且你要清楚,你不能期望自動化測試去幫你發現新的bug,自動化測試自己是不具有想象力的(相對於手工測試)。它的優點在於反覆迭代,它的價值產出在於長期的迴歸測試,以保證被測產品長期穩定地版本更新。
關於自動化測試的切入點,一般要在完整的系統測試以後纔算具有引入自動化測試的基本條件。
目前我所作的自動化測試成功案例,無一不具有良好的管理和優良的測試框架。兩者缺一,自動化測試必然成爲大坑。
最後,填坑這種事兒,收費但是很貴的~