51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 2898|回复: 2
打印 上一主题 下一主题

[转贴] TestNG参数化测试详解

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2017-10-12 15:53:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 云菲儿 于 2017-10-12 15:56 编辑

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

即可解决问题
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2017-10-13 10:43:56 | 只看该作者
测试数据最好不要放到代码中,维护不方便。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-5-2 10:16 , Processed in 0.063595 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表