TestNG參數化測試詳解


TestNG是一套開源測試框架,是從Junit繼承而來,TestNG意為test next generation,其參數化測試非常適用於以數據為驅動測試用例的自動化

下面開始介紹testNG兩種參數化的方法(以測試百度頁面標題為例)

1、@parameters注解

  將需要的數值寫在testng.xml文件<parameter></parameter>標簽對中導入參數,這種方法適用於URL、數據庫連接串等作為參數傳入程序代碼中

  testng.xml代碼:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" > 
<suite name="suite1"> 
    <test name="test1">
     <!--parameter標簽中寫要傳入的參數  -->
    <parameter name="URL" value="https://www.baidu.com"></parameter>
    <parameter name="PORT" value="443"></parameter>
    <classes> 
            <class name="baidu.ParametersTest" />
    </classes> 
    </test> 
</suite>

  Java代碼: 

public class ParametersTest {
    WebDriver driver;
    //使用@Parameters注解引入testng.xml標簽中的參數
    @Parameters({"URL","PORT"})
    @BeforeMethod
    //按引入參數順序導入到需要該參數的方法中
    public void setup(String URL,String PORT)
    {
        System.setProperty("webdriver.chrome.driver","D:\\program\\jdk-8u101\\bin\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        //在方法中使用導入方法的參數
        driver.get(URL+":"+PORT);
    }

    @Test
    public void title_test01() 
    {
      String str = driver.getTitle();
      Assert.assertEquals(str, "百度一下,你就知道");
    }
    
    @AfterMethod
    public void testend() throws InterruptedException
    {
        Thread.sleep(2000);
        driver.quit();
    }
}

 

  運行結果:

  

  注意:testng.xml中的<parameter>標簽對也可以寫在suite標簽對中,區別如下:

  在Suite范圍內定義某個參數的值,對所有的Test都有效。

  在Test范圍內定義某個參數的值,只是針對該Test有效。

  如果同時在Suite和Test中定義某個參數,Test范圍的值優先。

2、@DataProvider注解

  使用這個注解的方法可以用來做數據驅動,可以用來直接獲取Excel,xml中的大量數據,避免了不同測試數據帶來自動化測試代碼的重復

  其返回值必須為Object[][]二維數組,或Iterator<Object[]>迭代器

  @Test來通過屬性“dataProvider”來確定使用什么方法作為數據驅動,dataProvider的屬性值就是@DataProvider注解的“name”屬性

  Java代碼:

public class BaiduTest {
    WebDriver driver;
    //返回Object[][]的數據驅動
    @DataProvider(name="data01")
    public Object[][] getdata()
    {
        return new Object[][]{{"!","!_百度搜索"},{"?","?_百度搜索"}};
    }
    @DataProvider(name="data02")
    //返回Iterator<Object[]>的數據驅動
    public Iterator<Object[]> getdata2()
    {
        Set<Object[]> set = new HashSet<Object[]>();
        set.add(new String[]{"!","!_百度搜索"});
        set.add(new String[]{"?","?_百度搜索"});
        return set.iterator();
    }    
    @Parameters({"URL","PORT"})
    @BeforeMethod
    public void Setup(String URL,String PORT)
    {
        System.setProperty("webdriver.chrome.driver","D:\\program\\jdk-8u101\\bin\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.get(URL+":"+PORT);
    }
    //dataProvider屬性值為"data02",則使用返回Iterator<Object[]>作為@Test的數據輸入
    @Test(dataProvider="data02")
    public void title_test02(String a,String b) throws InterruptedException 
    {
      driver.findElement(By.cssSelector("#kw")).sendKeys(a);
      driver.findElement(By.cssSelector("#su")).click();
      Thread.sleep(1000);
      String str = driver.getTitle();
      Assert.assertEquals(str, b);
    }
    @AfterMethod
    public void testend() throws InterruptedException
    {
        Thread.sleep(2000);
        driver.quit();
    }
}

  運行結果:

   

 

 

注:

TestNG  eclipse中顯示中文亂碼解決方案:

在eclipse.ini文件中加入一行

-Dfile.encoding=UTF-8

即可解決問題

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM