TestNG参数化之@Parameters传参


通过TestNG实现参数话常用两种方式,一种是借助 @Parameters读取testng.xml中参数,一种是使用@DataProvider注解传参。

此次主要讲解XML传参,语法:在java类中定义参数名@Parameters("paraName" });在TestNG.xml中设置参数值<parameter name="paraName"  value="paraValue"/>

以下为关键代码部分,柠檬黄色标记部分是具体传参代码

1.传一个参数

testDemo.java

@Parameters({ "first-name" })
@Test
public void testSingleString(String firstName) {//对应parameters只有一个参数
  System.out.println("Invoked testString " + firstName);
}

testng.xml

<suite name="Suite" parallel="false">
  <parameter name="first-name"  value="Cedric"/>
  <test name="Simple example">
    <classes>
      <class name="**.testDemo"/>
    classes>
  test> 
suite> 

2.传多个参数

testDemo.java

@Parameters({ "userName", "password" })
@BeforeMethod
public void beforeTest(String userName, String pwd) {
    System.out.println("参数userName值为:"+userName);
    System.out.println("参数password值为:"+pwd);
}

testng.xml

<suite name="Suite" parallel="false">
  <parameter name="userName"  value="admin"/>
  <parameter name="password"  value="123456"/>
  <test name="mulParameters">
    <classes>
      <class name="**.testDemo"/>
    classes>
  test> 
suite>

3.使用默认值

testDemo.java

@Parameters("db")
@Test
public void testNonExistentParameter(@Optional("mysql") String db) { 
     System.out.println("数据库为:"+db);
}

testng.xml


<suite name="Suite" parallel="false">
  <test name="demo">
    <classes>
      <class name="**.testDemo"/>
    classes>
  test> 
suite>

打印结果   数据库为:mysql

备注:

  • 只有已使用 @Test@Before/After or @Factory 注解的方法可以使用@Parameters.
  • 参数有作用域,在 testng.xml中,参数在  或 标签下赋值. 如果有同名参数,  标签下参数优先级高.