無為

          無為則可為,無為則至深!

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            190 Posts :: 291 Stories :: 258 Comments :: 0 Trackbacks
          國內大部分公司還依靠QA組的MM看著測試用例文檔來手工測試,如果錢人有限,又想改變現狀,最實在的建議是先編寫直接訪問數據庫的商業層UnitTest和基于Selenium的集成測試這兩種實用性最高的測試。

          ???在徐昊指導下,SpringSide2.0 已經全面應用Selenium。

          ???Selenium 能被選為最好集成測試、回歸測試方案的原因,是因為:

          ?? 1.Selenium IDE ,一個FireFox plugin,能自動記錄用戶的操作,生成測試腳本。

          ? ?2. 生成的測試腳本可以用Selenium Core手工執行,也能基于Selenium RC放入Java,C#,Ruby的單元測試用例中自動運行。

          ?? 3. 測試用例調用實際的瀏覽器(如IE、FireFox)來執行測試。和有些開源方案自行實現Web解釋引擎相比,實際的瀏覽器能模擬更多用戶交互和JS語法,順便還可以測試各瀏覽器兼容性。

          ?? 4. 測試腳本語法非常簡單,見后。
          ??

          1. 使用Selenium IDE生成腳本

          ?????? Selenium IDE 是一個Firefox1.5插件,下載后用Firefox將其打開。

          ?????? 工具->Selenium IDE,點擊紅色的recorder按鈕開始錄制,在網站中亂點時可以即時看到每個動作的腳本。

          ?????? 切換Format:顯示 HTML,Java,C#,Ruby 語法的腳本。 option里還可以設定Java里Selenium變量的名稱,如user。

          2.測試用例與測試腳本

          ???測試用例在Selenium IDE生成->Copy Paste的流程下非常的容易。

          public?class?UserManagerTest?extends?TestCase
          {
          ????
          private?Selenium?user;

          ????
          public?void?setUp()?throws?Exception?{
          ???????user
          =?new?DefaultSelenium("localhost",?SeleniumServer.DEFAULT_PORT,?"*iexplore",?"http://localhost:8080");
          ???????user.start();
          }
          protected?void?tearDown()?throws?Exception?{
          ????????user.stop();
          }

          public?void?testUserEdit()?{
          ????user.open(
          "/helloworld");
          ????user.click(
          "//a\[contains(@href,?'user.do?id=0')\]");
          ????user.waitForPageToLoad(
          "3000");
          ????user.type(
          "user.name",?"calvin");
          ????user.click(
          "save");
          ????user.waitForPageToLoad(
          "3000");
          ????assertTrue(user.isTextPresent(
          "calvin"));
          }


          ?? 留意setUp中的"*iexplore"參數,設定使用IE作為測試瀏覽器;如果設為"*firefox",就會在PATH中查找*firefox.exe。

          ???注意,Selenium使用IE時的Proxy機制比較特殊,如果你同時在本機ADSL modem撥號上網,要先斷網。

          ???腳本中按徐昊的指導,使用user 作為Selenium的變量名,使用例更加易讀。

          ?? Selenium提供了非常豐富的用戶交互函數,但Selenium RC里并沒有為Java單列一個函數參考手冊,需要閱讀公共的Selenium Refrences,再使用同名對應的java函數。

          ???所有函數都是一個locator參數,將操作付諸某個頁面上的對象。支持ID,DOM語法,XPath語法,CSS selector語法等,詳見參考手冊。

          ???如果不會寫,最好的老師還是Selenium IDE 。比如那句點擊 <a href="user.do?id=0" />修改</a>,就是用IDE得到user.click("http://a[contains(@href, 'user.do?id=0')]")的XPath語句。

          3.Ant的運行腳本

          ??? SpringSide的Ant測試腳本比較有特點的一個地方是使用了ant 的<parallel> 并行容器節點,一邊同時打開tomcat 和selenium server,一邊等待兩者打開后執行JUnit,最后關閉tomcat。
          ???如果不使用并行節點,而是用spawn=true屬性后臺啟動tomcat,屏幕里就看不到tomcat信息,如果測試意外終止的話,就不能靠關閉窗口來tomcat,很不方便。

          <parallel>
          ????
          <antcall?target="tomcat.start"/>
          ????
          <antcall?target="selenium.server.start"/>
          ????
          <sequential>
          ????????
          <waitfor?maxwait="10"?maxwaitunit="minute"?checkevery="1"?checkeveryunit="second">
          ????????????
          <http?url=http://localhost:8080/>
          ????????
          </waitfor>
          ????????
          <waitfor?maxwait="10"?maxwaitunit="minute"?checkevery="1"?checkeveryunit="second">
          ????????????
          <socket?server="localhost"?port="4444"/>
          ???????
          </waitfor>
          ???????
          <junit./>
          ???????
          <antcall?target="tomcat.stop"/>
          ????
          </sequential>
          </parallel>

          4.SpringSide 中的FunctionalTestCase基類

          SpringSide中抽象了一個FunctionalTestCase基類,抽取了setUp() ,tearDown()函數中selenium server 開閉操作。

          其中瀏覽器類型默認為"*iexplore", 基本url默認為http://localhost:8080

          用戶可以在selenium.properties 中重新設定selenium.explorer 和selenium.baseurl 變量。



          凡是有該標志的文章,都是該blog博主Caoer(草兒)原創,凡是索引、收藏
          、轉載請注明來處和原文作者。非常感謝。

          posted on 2006-09-07 14:56 草兒 閱讀(1315) 評論(0)  編輯  收藏 所屬分類: Java編程經驗談
          主站蜘蛛池模板: 宿松县| 丁青县| 陇南市| 留坝县| 洪湖市| 丰县| 嘉禾县| 定远县| 临颍县| 香港| 新巴尔虎左旗| 哈尔滨市| 云阳县| 交城县| 武汉市| 兴义市| 泽州县| 长岭县| 菏泽市| 文登市| 新乡县| 余姚市| 湘潭县| 吉首市| 紫金县| 万州区| 那曲县| 荥经县| 彭州市| 海盐县| 澎湖县| 西充县| 富裕县| 方山县| 靖西县| 庆安县| 井研县| 托里县| 灵璧县| 六枝特区| 张家口市|