TestNG参数传递方式

发表于:2015-7-23 13:23

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:silenceer    来源:51Testing软件测试网采编

  xml文件配置:
<suite name="Parameter test Suite" verbose="1">
<!-- This parameter will be passed to every test in this suite -->
<parameter name="suite-param" value="suite level parameter" />
<test name="Parameter Test one">
<classes>
<class name="com.howtodoinjava.test.ParameterTest">
<methods>
<include name="prameterTestOne" />
</methods>
</class>
</classes>
</test>
<test name="Parameter Test two">
<!-- This parameter will be passed this test only -->
<parameter name="test-two-param" value="Test two parameter" />
<classes>
<class name="com.howtodoinjava.test.ParameterTest">
<methods>
<include name="prameterTestTwo" />
</methods>
</class>
</classes>
</test>
<test name="Parameter Test three">
<!-- Overriding suite level parameter -->
<parameter name="suite-param" value="overiding suite parameter" />
<!-- Test specific parameter -->
<parameter name="test-three-param" value="test three parameter" />
<classes>
<class name="com.howtodoinjava.test.ParameterTest">
<methods>
<include name="prameterTestThree" />
</methods>
</class>
</classes>
</test>
</suite>
  也可以使用可选参数,如果xml里没有给参数传入值,那么测试方法将会调用可选的参数值:
  public class ParameterTest
  {
  @Parameters({ "optional-value" })
  @Test
  public void optionTest(@Optional("optional value") String value) {
  System.out.println("This is: " + value);
  }
  }
  对应的xml文件配置:
<suite name="Optional test Suite" verbose="1">
<test name="Optional Test one">
<classes>
<class name="test.parameter.OptionalTest" />
</classes>
</test>
<test name="Optional Test two">
<parameter name="optional-value" value="passed from xml" />
<classes>
<class name="test.parameter.OptionalTest" />
</classes>
</test>
</suite>
  这里配置了两个test,第一个执行option方法时,由于没有在xml文件里找到option-value对应的值,所以将会输出方法中的@Optional的值;而第二个test中有设置option-value的值为passed........那么将会输出对应的值。
  结果:
  This is: optional value
  This is: passed from xml
  ===============================================
  Optional test Suite
  Total tests run: 2, Failures: 0, Skips: 0
  ===============================================
  DataProvider方式传参
  只提供了一个字符串属性:名称,供测试方法作为传递参数的annotation使用两种DataProvider,一种是返回一个二维数组对象(Object[][],第一个数组是数据集,第二个数组代表参数值),如上面的例子;另外一种DataProvider是返回一个Iterator,DataProvider可以向测试方法传递任意类型任意数目的参数,利用DataProvider提供不同的参数集合对一个测试方法进行多次调用。
  dataProvider可以进行数据驱动的测试。
  在同一个类中使用dataProvider:
  public class SameClassDataProvider
  {
  @DataProvider(name = "data-provider")
  public Object[][] dataProviderMethod() {
  return new Object[][] { { "data one" }, { "data two" } };
  }
  @Test(dataProvider = "data-provider")
  public void testMethod(String data) {
  System.out.println("Data is: " + data);
  }
  }
  结果:
  Data is: data one
  Data is: data two
  PASSED: testMethod("data one")
  PASSED: testMethod("data two")
  在不同的类中使用:
public class DataProviderClass
{
@DataProvider(name = "data-provider")
public static Object[][] dataProviderMethod()
{
return new Object[][] { { "data one" }, { "data two" } };
}
}
public class TestClass
{
@Test(dataProvider = "data-provider", dataProviderClass = DataProviderClass.class)
public void testMethod(String data)
{
System.out.println("Data is: " + data);
}
}
  结果和上面的一样,只是要注意,在使用数据集的方法中需要添加dataProviderClass的属性,指明是那个类提供数据。
22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号