qileilove

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

          測(cè)試即文檔:自動(dòng)化測(cè)試框架Concordion

          如果你是那種極不情愿寫(xiě)文檔的程序員,那么,你并不孤單。然而當(dāng)你的上司在檢查你的工作時(shí),他才不想看你那一堆一堆的代碼,他需要看文檔,這時(shí)的你需要的是Concordion——一個(gè)符合Specification By Example的自動(dòng)化測(cè)試框架,通過(guò)自然語(yǔ)言來(lái)描述軟件功能,即項(xiàng)目中所有成員都能看懂的而又具備測(cè)試功能的html文檔。

            (一)Concordion的工作原理

            簡(jiǎn)單的說(shuō),Concordion測(cè)試只是對(duì)JUnit的擴(kuò)展,但是它可以從你寫(xiě)好的測(cè)試文檔(html)中讀取測(cè)試數(shù)據(jù),通過(guò)傳統(tǒng)的JUnit來(lái)跑測(cè)試,并將測(cè)試結(jié)果輸出為具有紅綠標(biāo)記(表示失敗或成功)的html文檔(基于原測(cè)試文檔)。

             在上圖中,Specification即為我們寫(xiě)的html測(cè)試文檔,與普通的html文檔不同的是,我們需要在其中加入一些名為concordion 的標(biāo)簽,瀏覽器將忽略這些標(biāo)簽,但Concordion用這些標(biāo)簽來(lái)執(zhí)行測(cè)試指令,比如調(diào)用Fixture中的測(cè)試函數(shù)等。Fixture為繼承自 ConcordionTestCase(最終繼承自JUnit測(cè)試類(lèi))的測(cè)試用例,這些測(cè)試用例將調(diào)用我們自己所開(kāi)發(fā)的功能代碼。

            (二)Concordion的Hello World

            下面就通過(guò)一個(gè)簡(jiǎn)單的Hello World例子來(lái)演示Concordion。

            下載Concordion和其所依賴(lài)的包

            首先寫(xiě)一個(gè)html測(cè)試用例HelloWorld.html:

          <html xmlns:concordion=http://www.concordion.org/2007/concordion>
              <body>
                  <p>Should print:</p>
                  <p concordion:assertEquals="sayHello()">HelloWorld</p>
              </body>
          </html>

            此html文檔可以通過(guò)瀏覽器正常打開(kāi),由于瀏覽器并不知道concordion標(biāo)簽,故將其忽略:

             可以看到,以上加入的concordion標(biāo)簽的html測(cè)試文檔和普通的html文檔并無(wú)區(qū)別,同時(shí)我們也看到在concordion標(biāo)簽后有一個(gè) sayHello()函數(shù)調(diào)用,此函數(shù)從什么地方來(lái)呢——這就是Concordion的約定,要求在該html文檔的同目錄下有一個(gè)名為 HelloWorldTest.java的測(cè)試用例類(lèi)存在,并且該類(lèi)有一個(gè)測(cè)試函數(shù)名為sayHello()。約定規(guī)則為:如果html文檔名為 Foo.html,那么測(cè)試用例類(lèi)應(yīng)該為FooTest.java。此時(shí)Concordion便通過(guò)名字匹配去找名為HelloWorldTest類(lèi)的 sayHello()函數(shù)并調(diào)用之。

            我們還注意到,在concordion標(biāo)簽后有assertEquals,此時(shí)Concordion將把helloWorld()函數(shù)的輸出與之后的“HelloWorld”字符串相比,如果相等,測(cè)試成功,否則失敗。

            接下來(lái)實(shí)現(xiàn)HelloWorldTest類(lèi),在HelloWorld.html同目下創(chuàng)建HelloWorldTest.java文件:

          package com.thoughtworks.davenkin.concordion;

          import org.concordion.integration.junit3.ConcordionTestCase;

          public class HelloWorldTest extends ConcordionTestCase {

              public String sayHello()
                {
                     return new HelloWorld().sayHelloWorld();
                }
          }

            在HelloWorldTest.java文件中實(shí)例化了一個(gè)HelloWorld對(duì)象,并調(diào)用其sayHelloWorld()方法,于是寫(xiě)一個(gè)需要測(cè)試的HelloWorld類(lèi)如下:

          package com.thoughtworks.davenkin.concordion;

          public class HelloWorld
          {
               public String sayHelloWorld()
                 {
                      return "HelloWorld";
                 }
          }

            最終生成的工程目錄結(jié)構(gòu)如下:

            (三)編譯并運(yùn)行測(cè)試

            打開(kāi)終端,將目錄切換到 concordion(這是筆者為此helloworld創(chuàng)建的工程根目錄,請(qǐng)不要與上文提到的concordion混淆)下,編譯:

          javac -cp lib/*:src:test test/com/thoughtworks/davenkin/concordion/HelloWorldTest.java

            用JUnit運(yùn)行測(cè)試:

          java -cp lib/*:src:test org.junit.runner.JUnitCore com.thoughtworks.davenkin.concordion.HelloWorldTest

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

          JUnit version 4.8.2
          ./var/folders/wM/wMUC8-0FEsq-MMkTzdzYA++++TI/-Tmp-/concordion/com/thoughtworks/davenkin/concordion/HelloWorld.html
          Successes: 1, Failures: 0

          Time: 0.307

          OK (1 test)

            運(yùn)行成功,并且顯示測(cè)試輸出的html文件的全路徑名稱(chēng)(此時(shí)應(yīng)該去掉最前面的那個(gè)點(diǎn)"."):

          /var/folders/wM/wMUC8-0FEsq-MMkTzdzYA++++TI/-Tmp-/concordion/com/thoughtworks/davenkin/concordion/HelloWorld.html

            打開(kāi)該文件:

            測(cè)試運(yùn)行成功。

          posted on 2012-03-13 09:57 順其自然EVO 閱讀(2282) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2012年3月>
          26272829123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 交口县| 汾阳市| 固安县| 吴江市| 会昌县| 卢湾区| 汕尾市| 明溪县| 乌兰县| 忻州市| 揭东县| 彩票| 将乐县| 田林县| 夹江县| 宾阳县| 玉环县| 兰考县| 齐河县| 寿宁县| 多伦县| 敦化市| 漳州市| 连云港市| 永春县| 黎平县| 昌图县| 宣武区| 黑水县| 万安县| 东乡族自治县| 江北区| 天峻县| 汤原县| 揭西县| 西宁市| 顺义区| 陈巴尔虎旗| 兰坪| 鹰潭市| 杭州市|