TestNG是一套開源測試框架,是從Junit繼承而來,TestNG意爲test next generation,其參數化測試很是適用於以數據爲驅動測試用例的自動化css
下面開始介紹testNG兩種參數化的方法(以測試百度頁面標題爲例)web
將須要的數值寫在testng.xml文件<parameter></parameter>標籤對中導入參數,這種方法適用於URL、數據庫鏈接串等做爲參數傳入程序代碼中chrome
<?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>
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範圍的值優先。eclipse
使用這個註解的方法能夠用來作數據驅動,能夠用來直接獲取Excel,xml中的大量數據,避免了不一樣測試數據帶來自動化測試代碼的重複ide
其返回值必須爲Object[][]二維數組,或Iterator<Object[]>迭代器。測試
@Test來經過屬性「dataProvider」來肯定使用什麼方法做爲數據驅動,dataProvider的屬性值就是@DataProvider註解的「name」屬性ui
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
便可解決問題