TestNG系列-第五章 测试方法、测试类和测试分组(续2)-参数

在这部分,介绍5.6节的参数


6 参数

测试方法是可以有参数的。可以使用@Parameters注解指定任意参数。
在testng中有两种设定参数的方法:使用testng.xml配置和代码中设置

6.1 使用testng.xml配置参数

如果使用简单的值作为参数,可以在testng.xml使用如下方法指定:
@Parameters({ "first-name" })
@Test
public void testSingleString(String firstName) {
  System.out.println("Invoked testString " + firstName);
  assert "Cedric".equals(firstName);
}

在这段代码中 first-name参数值可以从xml中获取,testng.xml定义如下:
<suite name="My suite">
  <parameter name="first-name"  value="Cedric"/>
  <test name="Simple example">

同样的方法可以用在注解@before、@After和Factory:
@Parameters({ "datasource", "jdbcDriver" })
@BeforeMethod
public void beforeTest(String ds, String driver) {
  m_dataSource = ...;                              // look up the value of datasource
  m_jdbcDriver = driver;
}

在这个方法中,参数ds和driver的值分别从datasource和jdbcDriver中获取。

参数也可以被声明为可选,使用注解@Opational。
@Parameters("db")
@Test
public void testNonExistentParameter(@Optional("mysql") String db) { ... }

如果db参数在testng.xml中未找到,则使用注解Optional中指定的值mysql。

参数@parameter可以在如下位置:
  • 在任何声明了@test、@Before/After和@factory注解方法上
  • 最多一个构造方法上,在这个用例中,TestNG会调用这个特殊的构造方法并使用Testng.xml的值初始化参数。
注:xml中的参数殊顺序和Java中参数顺序是一样的。

6.2 使用DataPrivater的Parameter

在testng.xml中指定参数可能是足够满足需求。比如当需要传复杂参数,或者参数来源与java代码(复杂对象,对象来源于property文件或者数据库等)。DataPrivater会返回一个二维的object数组( an array of array of objects).如:
//This method will provide data to any test method that declares that its Data Provider
//is named "test1"
@DataProvider(name = "test1")
public Object[][] createData1() {
 return new Object[][] {
   { "Cedric", new Integer(36) },
   { "Anne", new Integer(37)},
 };
}
 
//This test method declares that its data should be supplied by the Data Provider
//named "test1"
@Test(dataProvider = "test1")
public void verifyData1(String n1, Integer n2) {
 System.out.println(n1 + " " + n2);
}


这个结果会输出:
Cedric 36
Anne 37

@Test的方法使用属性dataProvider指定了数据提供者,名称必须和在对应@DataProvider(name=。。。)中指定的name一致。

默认情况下,会在当前类or这个类的基类中寻找数据提供者。当我们想要使用不同类中Data provider时,该方法需要是静态的或者类自带一个无参数的构造方法,并且使用@Test的属性指定 dataProviderClass。如:
public class StaticProvider {
  @DataProvider(name = "create")
  public static Object[][] createData() {
    return new Object[][] {
      new Object[] { new Integer(42) }
    };
  }
}
 
public class MyTest {
  @Test(dataProvider = "create", dataProviderClass = StaticProvider.class)
  public void test(Integer n) {
    // ...
  }
}

dataProvider支持注入(injection)。TestNG使用测试上下文(context)来进行注入。Data Provider可以返回如下两种类型:
  • object[][]。第一维大小表示测试方法会调用dataprovider的次数。第二维大小包含的object数组和测试方法中的参数相对应。
  • Iterator<Object[]>.和object[][]唯一不同的是迭代器可以延迟创建数据。TestNG调用迭代器然后测试方法一个一个的调用迭代器的返回值。如:
@DataProvider(name = "test1")
<span style="white-space:pre">	</span>public Iterator<Object[]> createData() {
  <span style="white-space:pre">	</span>return new MyIterator(DATA);
<span style="white-space:pre">	</span>}



如果在@DataProvider方法中使用java.lang.reflect.Method作为第一个参数,TestNG会将当前测试方法作为第一个参数值。这种情况使用场景是当几个测试方法使用相同的DataProvider而你想要根据不同的测试方法返回不通值的情况。比如:
@DataProvider(name = "dp")
public Object[][] createData(Method m) {
  System.out.println(m.getName());  // print test method name
  return new Object[][] { new Object[] { "Cedric" }};
}
 
@Test(dataProvider = "dp")
public void test1(String s) {
}
 
@Test(dataProvider = "dp")
public void test2(String s) {
}

上面的结果展示:
test1
test2

data provider也能够并行运行
@DataProvider(parallel = true)

并发运行的data provider通过xml共享相同的线程池,大小默认是10.也可以自己设置
<suite name="Suite1" data-provider-thread-count="20" >

6.3 报告中参数

用于方法中调用的参数在html中的展示:


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值