【TestNG快板说三】TestNG分组、捕获异常、传参

TestNG测试分组
配置@Test

可以通过@Test给多个测试类的测试用例分组,比如某个测试用例既属于smoke又属于uat,那么就可以配置如下:

    @Test(groups = {"smoke", "uat"})
    public void testDemo1() throws InterruptedException{
        System.out.print("testDemo1\n");
    }

    @Test(groups = {"smoke", "func"})
    public void testDemo2() throws InterruptedException{
        System.out.print("testDemo2\n");
    }
通过testng.xml进行测试用例的运行,运行结果如下:
  • 运行smoke类型的测试用例
testDemo1
testDemo2

===============================================
Suite1
Total tests run: 2, Failures: 0, Skips: 0
===============================================

从上面的结果可以看出,实际这里testDemo1和testDemo2都运行了。

  • 修改testng.xml,运行uat类型的测试用例
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite1" verbose="1" >
    <test name="Regression1">
        <groups>
            <run>
                <include name="uat" /> <!-- 修改这里-->
            </run>
        </groups>
        <!--<classes>-->
            <!--<class name="com.wilmar.loms.testcase.ManualOrderTest"/>-->
        <!--</classes>-->
        <classes>
            <class name="com.nitb.demo.Demo1"/>
        </classes>
    </test>
</suite>

运行结果:

testDemo1

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

从上面的结果可以看出,本次只运行了配置成uat的testDemo。

  • 执行多个类型的测试用例,包括uat和func
        <groups>
            <run>
                <include name="uat" />
                <include name="func" />
            </run>
        </groups>

把上诉testng.xml中的内容修改成如下,然后执行,运行结果:

testDemo1
testDemo2

===============================================
Suite1
Total tests run: 2, Failures: 0, Skips: 0
===============================================

从输出结果看,运行了分别属于uat组的testDemo1和属于func组的testDemo2。

TestNG捕获异常

如果测试用例期望的结果是抛出异常,可以通过@Test把异常指派给某个方法,此时测试用例对应抛出异常,结果为PASS;否则,判定为FAIL。

@Test(expectedExceptions = { ArithmeticException.class })
TestNG设置参数

在testng.xml中设置参数有两种方式:

  • 一种是通过@Parameters设置,但是它只能传字符串数据。
  • 一种是通过@DataProvider设置,它可以传复杂类型的数据。
@Parameter设置

添加测试用例:

    @Parameters({"username"})
    @Test(groups = {"smoke", "func"})
    public void testDemo3(String username) throws InterruptedException{
        System.out.print("testDemo3, " + "username=" + username);
    }

配置testng.xml,增加参数:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite1" verbose="1" >
    <test name="Regression1">
        <parameter name="username" value="testname" /> <!-- 添加参数 -->
        <groups>
            <run>
                <include name="uat" />
                <include name="func" />
            </run>
        </groups>
        <!--<classes>-->
            <!--<class name="com.wilmar.loms.testcase.ManualOrderTest"/>-->
        <!--</classes>-->
        <classes>
            <class name="com.nitb.demo.Demo1"/>
        </classes>
    </test>
</suite>

运行结果:

testDemo1
testDemo2
testDemo3, username=testname
===============================================
Suite1
Total tests run: 3, Failures: 0, Skips: 0
===============================================


Process finished with exit code 0

从输出结果看出,这里多了username=testname的输出,正好是我们期望的。

设置@DataProvider

添加测试代码:

    @DataProvider(name = "dataProvider")
    public Object[][] dataProvider() {
        return new Object[][] {{"data1"}, {"data2"}, {"data3"}};
    }

    @Test(groups = {"func"}, dataProvider = "dataProvider")
    public void  testDemo4(String data) {
        System.out.print("testDemo4, " + "data=" + "\n");
    }

这里需要注意,如果@DataProvider中不设置name,那么默认会使用注释的方法名。因为这里设置的name和方法名都叫dataProvider,所以其实设置不设置name都无所谓。

执行结果:

testDemo1
testDemo2
testDemo3, username=testname
testDemo4, data=data1
testDemo4, data=data2
testDemo4, data=data3
===============================================
Suite1
Total tests run: 6, Failures: 0, Skips: 0
===============================================


从上面可以看到,这里的testDemo被执行了三次,所以当同一个测试用例需要执行多组数据的时候,使用@DataProvider配置参数就会很简便。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值