如何从 @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
中做同样的事情。
我想从 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
中做同样的事情。