前言

目前测试领域最常用的两个 XUnit 框架,一个是 testng 另一个就是 Junit5,个人更喜欢 Testng 一点,因为组织用力更加细致和灵活,而 Junit5 在传参上更加多样,各有优点吧

Parameters

使用方式

我们用 testng 集合 surefire 插件,surefire 插件会指定 testng.xml 的位置,然后再 testng.xml 中写上

<parameter name="name"  value="zhanghua"/>  

这个标签可以放在 suite 中,也可以放在 test 中,其作用范围就是,如果放在 suite 中 test 外,所有的 test 都能识别到这个参数,如果放在 test 中,test 中是能识别的,如果 suite 中和 test 中有两个同名的参数,则 test 中的有高优先级

然后我们在测试类中这样写

class DemoTest {
	@Test
	@Parameters({"name"})
	public void testFun(@Optional("zhanghua") String str) {
		// todo: xxx
	}
}

注意使用上@Parameters注解,注解中指定的名字要和 xml 中参数的名字对应,然后参数可以传到改测试方法中,Optional 注解表示如果找不到这个参数就是用默认的值

实际项目

对于实际项目我们可以考虑使用这个方式来做数据驱动,比如说要结合 jenkins 做数据驱动,我们可以将 jenkins 构建 job 然后传参到 pom.xml,然后通过 surefire 插件,再传参至 testng.xml 中,然后利用@Parameters注解传参到某个特定的测试方法中

DataProvider

使用方式

在具体的测试类中写

public class Demo {
    @DateProvider(name = "xxx")
    public Object[][] fun() {
        return new Object[][] {
            {"参数列表1", 0, 1},
            {"参数列表2", 2, 3}
        };
    }
    
    @Test(dataProvider = "xxx")
    public void funTest(String param1, int param2, int param3) {
        
    }
}

这种方式不用结合 testng.xml 即可传参,注意@DataProvider的名字和后面@Test中指定哪个 DataProvider 要对应起来

实际项目

一般在多场景测试用可能会使用上 DataProvider,比如一个场景,依据不同的输入会产生多种情况,这个时候可以使用 DataProvider,具体的参数值可以不直接写在 Test 类中,可以封装进 Data 类中,然后再 Test 中去调用 Data 中的数据即可