WebDriver + TestNG 应用

简单的测试开始

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. 1. 可以配置使用任意支持的浏览器进行测试;
  2. 2. 配置所有Google的URL;
  3. 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当成万能的锤子,到处钉钉子。

posted @ 2015-03-12 00:37  princessd8251  阅读(156)  评论(0)    收藏  举报