zoukankan      html  css  js  c++  java
  • 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

    即可解决问题

      

  • 相关阅读:
    POJ 1019 组合计数
    POJ 3252 组合计数
    SPJ 与 Student 数据库的创建于数据插入
    POJ 1496 POJ 1850 组合计数
    Java常用类库--大数处理类
    POJ 2492 并查集应用的扩展
    POJ 3268 双向Dijkstra
    线段树(带删除节点)
    西工大10级保研机试 柱状图
    KMP专场 POJ
  • 原文地址:https://www.cnblogs.com/zitherpeng/p/6490182.html
Copyright © 2011-2022 走看看