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
即可解决问题