专栏首页测试工程师成长之道TestNG参数化测试-@DataProvider

TestNG参数化测试-@DataProvider

参数化@DataProvider

欲将沉醉换悲凉,清歌莫断肠。这混乱的尘世,究竟充斥了多少绝望和悲伤。你想去做一个勇敢的男子,为爱,为信仰,轰轰烈烈的奋斗一场。

上期TestNG使用xml方式传递, 广大粉友私信我, 再出一期简介两者的应用场景.应粉友的要求,本期分享@DataProvider 方式在TestNG中传递参数.

那就还是使用上期的项目示例:

一. 使用@DataProvider 传递 int 参数.

1.创建java类:TestParameterDataProvider1

public class TestParameterDataProvider1 {
    @Test(dataProvider = "provideNumbers")
    public void test1(int actual, int expected){
        Assert.assertEquals(actual+10,expected);
    }

    @DataProvider(name="provideNumbers")
    public Object[][] provideData(){

        return new Object[][]{{10,20},{100,110},{200,210}};
    }
}

2.配置testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPEsuiteSYSTEM"http://testng.org/testng-1.0.dtd">
<suite name="test-parameter" verbose="1">
    <test name="example1" preserve-order="true">
        <classes>
            <class name="TestParameterDataProvider1"/>
        </classes>
    </test>

    <!--<test name="example2">-->
        <!--<groups>-->
            <!--<run>-->
                <!--<include name="groupA"/>-->
                <!--<exclude name="groupB"/>-->
            <!--</run>-->
        <!--</groups>-->
        <!--<classes>-->
            <!--<class name="TestParameterDataProvider2"/>-->
        <!--</classes>-->
    <!--</test>-->
    <test name="example3" preserve-order="true">
        <classes>
            <class name="TestParameterDataProvider3"/>
        </classes>
    </test>
</suite>

3. 运行看下结果

/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/bin/java

actual==>10

expected==>20

actual==>100

expected==>110

actual==>200

expected==>210

===============================================

test-parameter

Total tests run: 3, Failures: 0, Skips: 0

===============================================

Process finished with exit code 0

二. 使用@DataProvider 传递 ITestContext 对象

1.创建java类:TestParameterDataProvider2

public class TestParameterDataProvider2 {

    @Test(dataProvider = "dataProvider", groups = {"groupA"})
    public void test1(int number) {
        Assert.assertEquals(number, 1);
    }

    @Test(dataProvider = "dataProvider", groups = {"groupB"})
    public void test2(int number) {
        Assert.assertEquals(number, 2);
    }

    @DataProvider(name = "dataProvider")
    public Object[][] provideData(ITestContext context) {
        Object[][] result = null;

        for (String group : context.getIncludedGroups()) {

            System.out.println("group==>>" + group);

            if ("groupA".equals(group)) {
                result = new Object[][] {{1}};
                System.out.println("===groupA===");

            }else if ("groupB".equals(group)){
                result=new Object[][]{{2}};
                System.out.println("===groupB===");
            }
        }

        if (result == null) {
            result = new Object[][] {{3}};
            System.out.println("===什么都不是===");
        }
        return result;

    }
    
}

2.配置testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPEsuiteSYSTEM"http://testng.org/testng-1.0.dtd">
<suite name="test-parameter" verbose="1">
    <test name="example2">
        <groups>
            <run>
                <include name="groupA"/>
                <exclude name="groupB"/>
            </run>
        </groups>
        <classes>
            <class name="TestParameterDataProvider2"/>
        </classes>
    </test>
</suite>

3. 运行看下结果

/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/bin/java

group==>>groupA

===groupA===

===============================================

test-parameter

Total tests run: 1, Failures: 0, Skips: 0

===============================================

Process finished with exit code 0

三.使用@DataProvider 传递 Method

1.创建java类:TestParameterDataProvider3

public class TestParameterDataProvider3 {
    @Test(dataProvider = "dataProvider")
    public void test1(int actual, int expected){

        Assert.assertEquals(actual,expected);
        System.out.println("actual="+actual+"  expected="+ expected);
    }

    @Test(dataProvider = "dataProvider")
    public void test2(String actual, String expected){
        Assert.assertEquals(actual,expected);
        System.out.println("actual="+actual+"  expected="+ expected);
    }

    @DataProvider(name = "dataProvider")
    public Object[][] provideData(Method method){
        Object[][]result=null;
        if (method.getName().equals("test1")) {
            result = new Object[][] {
                    { 1, 1 }, { 200, 200 }
            };
        } else if (method.getName().equals("test2")) {
                   
            result = new Object[][] {
                    { "实际结果1", "实际结果1" },
                    { "实际结果2", "实际结果2" }
            };
        }
        System.out.println("result="+result);
        return result;
    }

2.配置testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPEsuiteSYSTEM"http://testng.org/testng-1.0.dtd">
<suite name="test-parameter" verbose="1">
    <test name="example3" preserve-order="true">
        <classes>
            <class name="TestParameterDataProvider3"/>
        </classes>
    </test>

</suite>

3. 运行看下结果

/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/bin/java

actual=1 expected=1

actual=200 expected=200

result=[[Ljava.lang.Object;@623f5254

actual=实际结果1 expected=实际结果1

actual=实际结果2 expected=实际结果2

===============================================

test-parameter

Total tests run: 4, Failures: 0, Skips: 0

===============================================

Process finished with exit code 0

今天分享就到这里, 方式还有很多, 大家根据个人使用场景,合适的才是最好的.

本文分享自微信公众号 - 测试工程师成长之道(louiezhou001),作者:Louiezhou

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringMVC 之MockMVC注释 详解

    所谓的Mock测试,就像servletAPI中的HttpServletRequest对象是Tomcat容器生成的。我们无法手动的new出来,于是就有了所谓的Mo...

    louiezhou001
  • 统计代码测试覆盖率-Python

    衡量Unit Test(单元测试)是否充分, 覆盖率是一个必要指标, 是检验单元测试的重要依据, 这里针对python unittest 的单元测试覆盖率cov...

    louiezhou001
  • JMeter接口测试-断言

    一个http请求发出,怎么判断执行的是否正确呢? 通过检查服务器响应数据,是否符合预期的数据, 如果是,任务成功, 如果否, 任务失败. Jmeter断言有多...

    louiezhou001
  • 心理医生妈妈是怎样育儿的?

    用户1756920
  • Basemap系列教程:绘制子图及小地图

    使用 matplotlib 中的 subplots 可以在同一个 figure 中绘制多个地图。有几种方法可以实现这种图形的绘制,而且根据所绘图形的复杂性来选择...

    bugsuse
  • flex+php截图Demo

    一、直接将byteArray转为bitmap通过loader(flash.display.Loader)显示在舞台上;

    meteoric
  • 手把手教你估算深度神经网络的最优学习率(附代码&教程)

    来源:机器之心 作者:Pavel Surmenok 学习率(learning rate)是调整深度神经网络最重要的超参数之一,本文作者Pavel Surmen...

    数据派THU
  • 人类最伟大的两大理论是什么?

    改变思维方式是人类最难的,认知的过程也是复杂多变的。宏观理论与微观理论带来了人类思想与思维的大变革,提升了人类认知科学的发展。无论是科学还是经济这两大理论都帮助...

    机器思维研究院
  • 从销售到 AI 算法工程师 | 转行人工智能 (含面经&裁员幸存指南)

    我是土生土长的农村人,小时候经常和小鱼小虾打交道,上大学的时候就选择了农学专业,想着毕业之后回老家搞养殖种植。

    叶锦鲤
  • NIPS2018 | 腾讯AI Lab入选20篇论文,含2篇Spotlight

    ? 被誉为神经计算和机器学习领域两大顶级会议之一的NIPS于近日揭晓收录论文名单,此次为第32届会议,将于 12 月 3 日至 8 日在加拿大蒙特利尔举办。 ...

    腾讯技术工程官方号

扫码关注云+社区

领取腾讯云代金券