自動測試之關鍵字驅動測試模式初探

發表于:2012-12-28來源:淘測試作者:雷藏點擊數: 標簽:關鍵字驅動
自動測試之關鍵字驅動測試模式初探。曾經在“我看測試”這篇文章中論述過,“測試效率的提高關鍵是測試手段的改進”。尤其在軟件測試領域,沒有千遍一律的測試方法,別人都說好的商業工具拿到你產品線來卻未必合適。

  曾經在“我看測試”這篇文章中論述過,“測試效率的提高關鍵是測試手段的改進”。尤其在軟件測試領域,沒有千遍一律的測試方法,別人都說好的商業工具拿到你產品線來卻未必合適。沒有最好只有更好,如何才能產出符合淘寶框架的特色測試工具呢?之前在入淘寶之初,對淘寶架構、測試工具不甚熟悉的情況下,提出過《基于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

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97