曾經在“我看測試”這篇文章中論述過,“測試效率的提高關鍵是測試手段的改進”。尤其在軟件測試領域,沒有千遍一律的測試方法,別人都說好的商業工具拿到你產品線來卻未必合適。沒有最好只有更好,如何才能產出符合淘寶框架的特色測試工具呢?之前在入淘寶之初,對淘寶架構、測試工具不甚熟悉的情況下,提出過《基于TTCN-3的Web應用自動化測試框架》一文,但卻與淘寶現有的測試工具不相符合。隨著對淘寶環境逐漸熟悉,一直都在思考改進測試的方法,這種方法一定要以現在使用的ITEST為基礎,在經過不斷地實踐摸索以后,結合自己的經驗,提出以下測試理論,望大家參詳。
一、概念提出
在闡述我的觀點之前,先來看看下面的例子。
在ITEST中,訂購一個套餐的用例代碼如下所示:
/*****************************************代碼分割線*****************************************/
public class PlanSubTest extends BaseCase{
final static String NICK= "leizang_test";
final static String PASS_WORD= "taobao1234";
@BeforeClass
public static void login(){
command.login(LOGIN_URL, NICK, PASS_WORD);
}
@AfterClass
public static void loginOut(){
command.loginOut();
}
@Before
public void cleanDB(){
String nick= NICK;
command.dbExecute(
"DELETE FROM upp_sub_plan WHERE nick= '"+ nick+ "'",
"DELETE FROM upp_biz_order WHERE nick = '"+ nick+ "'",
"DELETE FROM upp_prod_subscription WHERE nick = '"+ nick+ "'");
}
@Test
public void test_planSub_雷藏_case01(){
logTestName();
//構造入參
SubOption subOption= new SubOption(getPlanSubUrl(827L), CycleEnum.HALF_YEAR, false);
//從頁面訂購
command.doSub(subOption);
//結果校驗
Command.checkSubResult(subOption,
TableEnum.UPP_BIZ_ORDER,
TableEnum.UPP_SUB_PLAN,
TableEnum.UPP_PROD_SUBSCRIPTION);
}
}
/*****************************************代碼分割線*****************************************/
好了,雖然例子比較簡單,但足以說明問題。
“command”是在“BaseCase”中生成的一個靜態的“遙控器”(姑且這么理解):
“protected static ActionCommand command= new ActionCommandImpl(); “
它就像我們的電視遙控器,空調遙控器一樣,一旦你擁有了它,你就可以發出遙控器所支持的各種指令。所以,下面就理所當然地發出了各種“登錄”,“退出”,“清除數據庫“,“訂購”,“校驗”等各種指令,而代碼就會依照我們發出的指令去執行,這就是所謂“關鍵字驅動測試”理念。
二、測試建模
試想一下,現在呈現在你面前的是一個萬能機器人,而操控這個機器人的“遙控器“就在你手中,你按下”做飯“鍵,它會去做飯,你按下”洗衣“鍵,它會遵照你的命令去洗衣服。但是”巧婦難為無米之炊“,更何況是個沒有生命的機器人。你在發出”做飯“指令之前,需要事先給它準備好”米“和”水“,這樣它才會按照你預期的要求去做。當它完成任務的時候你需要去檢查看看它完成的如何,飯做熟了沒有。按照這種思路,我們對”指揮機器人做飯“的任務進行分解:
<!--[if !supportLists]-->1) <!--[endif]-->準備米和水
<!--[if !supportLists]-->2) <!--[endif]-->發出做飯指令
<!--[if !supportLists]-->3) <!--[endif]-->檢查飯做好了沒有
當你把這些跟上面的測試代碼聯系起來思考的時候,你會發現這一切是驚人的相似。在你對套餐訂購進行測試的時候,你需要做如下幾件事情:
<!--[if !supportLists]-->1) <!--[endif]-->準備相關數據
<!--[if !supportLists]-->2) <!--[endif]-->發出訂購指令
<!--[if !supportLists]-->3) <!--[endif]-->校驗訂購結果
我們在編寫測試用例的時候,如果能夠方便地準備“入參“、”預期“,然后發出指令,代碼就能自動地完成測試工作那該多好啊!
那如何才能實現我們這一套方便、智能系統呢?
聰明的你可能已經發現,要想達成愿望,關鍵在于解決以下三個難點:
<!--[if !supportLists]-->1) <!--[endif]-->相關數據準備方便(用戶關心)
<!--[if !supportLists]-->2) <!--[endif]-->要有一個好的遙控器(用戶不關心,制造商的事情)
<!--[if !supportLists]-->3) <!--[endif]-->要有一個能正確完成指令的機器人(用戶不關心,制造商的事情)
這里存在對應關系:
用戶 ——>自動化用例編寫者
制造商——>測試框架搭建人員
我們先來解決制造商的兩個困擾。
<!--[if !supportLists]-->1、 <!--[endif]-->制造商困擾之一——遙控器問題
遙控器就是一個各種指令的集合。在這里涉及一個問題,“如何劃分指令的粒度?”
原文轉自:http://www.anti-gravitydesign.com