如何从 @DataProvider 中为 @Before 中的 @Test 和 TestNG 中的 @AfterMethod 注释获取参数值

How can get argument values from @DataProvider for @Test in @Before and @AfterMethod anotation in TestNG

我想从 TestNG 中的@Test 获取参数名称及其值。这些参数由@DataProvider 提供。通常,当我想 运行 测试并行时,我可以将它存储在 class 的变量中,这不是个好主意。这是我的代码:


import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TestHomePage{

    @BeforeMethod(alwaysRun = true)
    public void setup(Method method) throws Exception {
        System.out.println("INFO ====setup===:" + method.getName());
        // how can I get parameters and value from @Test?
        //ex: sLogin="notLogin";sLike=""
    }

    @AfterMethod()
    public void tearnDown(Method method) {
        System.out.println("INFO ====tearnDown===:" + method.getName());
        // how can I get parameters and value from @Test?
    }

    @DataProvider(name = "likedata", parallel = true)
    public Object[][] likeDataprovider() throws Exception {
        return new Object[][] { { "notLogin", "" }, { "loggedIn", "notLike" }, { "loggedIn", "liked" } };
    }

    @Test(dataProvider = "likedata")
    public void verifyLikeFunction(String sLogin, String sLike, Method method) throws Exception {
        // Test
    }

}

谁能帮帮我?

谢谢。

要获取值,添加params作为@BeforeMethod

的参数
 @BeforeMethod(alwaysRun = true)
    public void setup(Method method, Object[] params) throws Exception {
        System.out.println("INFO ====setup===:" + method.getName());
        
        System.out.println("Parameter value:");
        for (Object parameter : params) {
            System.out.println(parameter);
        }      
    }

查看 Dependency Injection in TestNG 了解更多信息。

并获取参数名称,

  @BeforeMethod(alwaysRun = true)
    public void setup(Method method, Object[] params) throws Exception {
        System.out.println("Before , INFO ====setup===:" + method.getName());
       
        Parameter[] parameters= method.getParameters();
        
        System.out.println("Parameter names:");
        for (Parameter parameter : parameters) {
            System.out.println(parameter.getName());
        }     
    }

如果在编译期间包含调试信息,则可以获取参数名称。有关详细信息,请参阅 this answer

很简单, 如果您使用的是 Eclipse,请转到项目 -> 属性 -> Java 编译器 -> 检查“存储有关方法参数的信息(可通过反射使用)

我们可以在 @AfterMethod 中做同样的事情。