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. 可以配置使用任意支持的浏览器进行测试;
- 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当成万能的锤子,到处钉钉子。
    小小菜鸟一枚
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号