qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          WebDriver + TestNG應用

          Selenium 2 最大的更新就是集成了WebDriver。這兩者是什么關系呢?如果你搜索WebDriver,第一條結果是Selenium。其實WebDriver和Selenium可以說是在實現UI Automation的競爭對手。Selenium是運行在JavaScript的sandbox里面,所以很容易就支持不同的瀏覽器;而WebDriver則是直接操作瀏覽器本身,更接近用戶的真實操作,但正因為如此,所以WebDriver在多瀏覽器/操作系統的支持上就要落后于Selenium。不過從Selenium 2開始,這兩個項目合并了,可以繼續用原來的Selenium,也可以考慮遷移到WebDriver。我個人認為WebDriver應該是以后的大趨勢,還是值得遷移的。至于你信不信,我反正是信了。
            作為一個輕量級的UI Automation框架,需要寫一些驅動它的代碼,大部分人會選擇JUnit,因為JUnit是單元測試的事實標準;但是我會用TestNG。這些UI Automation的東西,它們本身不是單元測試,而且也沒有太多單元測試的風格。
            從一段簡單的測試開始
          public class GoogleTest  {
          @Test
          public void search(ITestContext context) {
          WebDriver driver = new FirefoxDriver();
          driver.get("http://www.google.com");
          WebElement element = driver.findElement(By.name("q"));
          element.sendKeys("magus");
          element.submit();
          Assert.assertTrue(driver.getTitle().contains("magus"), "Something wrong with title");
          }
          }
            TestNG應用了Java的Annotations,只需要在測試方法上面打上@Test就可以標示出search是一個測試方法。用TestNG運行測試還需要一個testng.xml的文件,文件名其實可以隨便起,沒有關系的。
          <suite name="Magus demo" verbose="2">
          <test name="Search function">
          <classes>
          <class name="test.GoogleTest">
          <methods>
          <include name="search" />
          </methods>
          </class>
          </classes>
          </test>
          </suite>
            我想讓測試更加靈活,1. 可以配置使用任意支持的瀏覽器進行測試;2. 配置所有Google的URL;3. 配置搜索的關鍵字。修改后的代碼:
          public class GoogleTest  {
          WebDriver driver;
          @Parameters({"browser"})
          @BeforeTest
          public void setupBrowser(String browser){
          if (browser.equals("firefox")){
          driver = new FirefoxDriver();
          } else {
          driver = new ChromeDriver();
          }
          }
          @Parameters({ "url", "keyword" })
          @Test
          public void search(String url, String keyword, ITestContext context) {        driver.get(url);
          WebElement element = driver.findElement(By.name("q"));
          element.sendKeys(keyword);
          element.submit();
          Assert.assertTrue(driver.getTitle().contains(keyword), "Something wrong with title");        }
          }
           testng.xml
          <suite name="Magus demo" verbose="2">
          <parameter name="browser" value="firefox" />
          <parameter name="url" value="http://www.google.com" />
          <parameter name="keyword" value="magus" />
          <test name="Search function" preserve-order="true">
          <classes>
          <class name="test.GoogleTest">
          <methods>
          <include name="setupBrowser" />
          <include name="search" />
          </methods>
          </class>
          </classes>
          </test>
          </suite>
            利用TestNG的@Parameters標簽,讓測試方法從testng.xml里面讀取參數,實現參數化。在testng.xml的配置中,test節點需要增加一個屬性的配置: preserve-order=”true”。這個preserve-order默認是false,在節點下面的所有方法的執行順序是無序的。把它設為true以后就能保證在節點下的方法是按照順序執行的。TestNG的這個功能可以方便我們在testng.xml里面拼裝測試。假設我們有很多獨立的測試方法,例如
            navigateCategory
            addComment
            addFriend
            login
            logout
            就可以在testng.xml里面拼出不同的測試,例如
          <test name="Add friend" preserve-order="true">
          <classes>
          <class name="test.GoogleTest">
          <methods>
          <include name="login" />
          <include name="addFriend" />
          <include name="logout" />
          </methods>
          </class>
          </classes>
          </test>
          <test name="Add comment to category" preserve-order="true">
          <classes>
          <class name="test.GoogleTest">
          <methods>                <include name="login" />
          <include name="navigateCategory" />
          <include name="addComment" />
          <include name="logout" />
          </methods>
          </class>
          </classes>
          </test>
            TestNG比JUnit更加適合做一些非單元測試的事情,不是說JUnit不好,而是不能把JUnit當成萬能的錘子,到處釘釘子。WebDriver的API比Selenium的更加簡潔,會是以后的大趨勢。

          posted on 2014-09-19 13:14 順其自然EVO 閱讀(323) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄selenium and watir webdrivers 自動化測試學習

          <2014年9月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 安义县| 温州市| 静海县| 卢湾区| 许昌县| 萨嘎县| 汨罗市| 边坝县| 尤溪县| 临沧市| 新疆| 海门市| 大邑县| 日土县| 万源市| 镇雄县| 岑巩县| 苗栗市| 迭部县| 富源县| 盐津县| 修水县| 宁城县| 印江| 永寿县| 仙居县| 西城区| 个旧市| 北票市| 旅游| 济源市| 奈曼旗| 来安县| 濮阳市| 武清区| 微博| 永清县| 涟水县| 乌拉特后旗| 富裕县| 襄樊市|