Sky's blog

          我和我追逐的夢

          常用鏈接

          統計

          其他鏈接

          友情鏈接

          最新評論

          TestNG官方文檔中文版(7)-方法依賴和工廠

          5.6 - Dependent methods

          有些時候,你需要你的測試方法按照一個特定的順序被調用。這非常有用,比如:
              * 在運行更多測試方法前確認特定數量的測試方法調用完成并且成功
              * 初始化測試并希望這個初始化方法也作為測試方法(被標記為@Before/After的方法將不作為最終報告的一部分)

          為了做到這點,需要使用@Test注解的dependsOnMethods屬性或者dependsOnGroups屬性。
          有兩種依賴:
              * 強依賴。在運行你的測試方法前所有依賴方法必須運行并且成功。哪怕有一個依賴方法失敗,測試方法都不會被調用,在報告中將被標記為SKIP。
              * 軟依賴。測試方法在依賴方法運行后總是會被運行,即使某些依賴方法失敗。對于只想確認測試方法是按照特定順序運行,而測試方法并不真正依賴其他方法是否成功的情況,非常有用。軟依賴通過在@Test注解中增加"alwaysRun=true"來實現。

          這里有一個強依賴的例子:

          @Test
          public void serverStartedOk() {}

          @Test(dependsOnMethods 
          = { "serverStartedOk" })
          public void method1() {}


          在這個例子中,method1()被申明依賴于方法serverStartedOk(),這保證serverStartedOk() 方法將總是首先被調用。
          也可以讓方法依賴于完整的測試組:

          @Test(groups = { "init" })
          public void serverStartedOk() {}

          @Test(groups 
          = { "init" })
          public void initEnvironment() {}

          @Test(dependsOnGroups 
          = { "init.* })
          public void method1() {}


          在這里例子中,method1()被申明依賴于任何匹配正則表達式"init.*"的組,這保證了方法serverStartedOk()和initEnvironment()總是在method1()前被調用。

          注意:前面說明說,在測試運行期間,屬于同一個組的方法的調用順序并不保證相同。如果一個方法的依賴失敗了,而且是強依賴(默認alwaysRun=false),這個方法將不被標記為FAIL而是SKIP。被跳過的方法在最終的報告中報告(在HTML中用紅和綠之外的其他顏色),這很重要,因為被跳過的方法并不一定是失敗。

          dependsOnGroups和dependsOnMethods都接受正則表達式作為參數。對于dependsOnMethods, 如果你依賴的方法巧合有多個重載的版本,所有裝載的方法都將被調用。如果你只想調用重載的方法中的一個,請使用dependsOnGroups。

          有關方法依賴的更高級的例子,請參考本文檔,將使用繼承來提供一個優雅的解決方案來處理多重依賴的問題。

          5.7 - Factories

          工廠類容許你動態創建測試案例。例如,想象你需要創建一個測試方法,訪問一個web站點上的頁面很多次,而你希望用不同的值來調用它:


          public class TestWebServer {
            @Test(parameters 
          = { "number-of-times" })
            
          public void accessPage(int numberOfTimes) {
              
          while (numberOfTimes-- > 0) {
               
          // access the web page
              }
            }
          }

          testng.xml:

          <test name="T1">
            
          <parameter name="number-of-times" value="10"/>
            
          <class name= "TestWebServer" />
          </test>

          <test name="T2">
            
          <parameter name="number-of-times" value="20"/>
            
          <class name= "TestWebServer"/>
          </test>

          <test name="T3">
            
          <parameter name="number-of-times" value="30"/>
            
          <class name= "TestWebServer"/>
          </test>

          這種方式很快就會變的難于管理,所以作為替換品,你可以使用factory:


          public class WebTestFactory {
            @Factory
            
          public Object[] createInstances() {
             Object[] result 
          = new Object[10]; 
             
          for (int i = 0; i < 10; i++) {
                result[i] 
          = new WebTest(i * 10);
              
          return result;
            }
          }


          而新的測試類是這樣:

          public class WebTest {
            
          private int m_numberOfTimes;
            
          public WebTest(int numberOfTimes) {
              m_numberOfTimes 
          = numberOfTimes;
            }

            @Test
            
          public void testServer() {
             
          for (int i = 0; i < m_numberOfTimes; i++) {
               
          // access the web page
              }
            }
          }


          testng.xml只需要引用簡單引用這個包含factory方法的類,因為測試實例將在運行時被創建。

          <class name="WebTestFactory" />

          工廠類將像@Test和@Before/After一樣接收參數,必須返回Object[]。返回的對象可以是任何類(不一定要求是和factory類一樣),并且他們甚至都不需要包含TestNG的注解(這種情況下他們將被testNG忽略)。


          posted on 2008-09-02 18:14 sky ao 閱讀(2286) 評論(1)  編輯  收藏 所屬分類: software test

          評論

          # re: TestNG官方文檔中文版(7)-方法依賴和工廠 2008-09-02 20:18 試客網

          叫好,喜歡~贊一個  回復  更多評論   

          主站蜘蛛池模板: 驻马店市| 哈尔滨市| 安乡县| 五指山市| 黔南| 罗山县| 龙泉市| 白水县| 南江县| 西宁市| 青海省| 阜康市| 虎林市| 柳州市| 儋州市| 宜兰市| 北票市| 启东市| 南昌县| 任丘市| 拜泉县| 德安县| 黄浦区| 克什克腾旗| 武冈市| 如皋市| 佛学| 夏邑县| 长汀县| 宁城县| 元阳县| 社旗县| 莫力| 青浦区| 临泽县| 新蔡县| 都安| 固阳县| 林州市| 五峰| 灌云县|