在方法I中,从excel获取我的测试用例名称,即使用数据提供者传递给方法。我想在@beforemethod中传递该Testcase名称(在不同的类中定义,即AbstractBaseclass,Method类正在扩展此AbstractBaseClass),我已经启动了扩展区报告。我想通过testcasename开始我的报告。
有没有办法将testcase名称作为参数从方法传递给@beforemethod
答案 0 :(得分:3)
这是你如何做到的。 TestNG允许您将Object[]
数组注入@BeforeMethod
带注释的方法。当TestNG看到一个对象数组时,它本身会注入即将传递给数据驱动的@Test
方法的参数。请参阅this TestNG wiki页面,详细了解TestNG作为本机注入的一部分所允许的内容。
以下是基类的外观:
import org.testng.annotations.BeforeMethod;
public class AbstractBaseClass {
@BeforeMethod
public void beforeMethod(Object[] parameters) {
//Here we are assuming that the testname will always be the first parameter
//in the 1D array that gets sent for every iteration of @Test method
if (parameters != null && parameters.length >= 1) {
String testname = parameters[0].toString();
System.out.println("Test name obtained in beforeMethod() " + testname);
}
}
}
以下是您的测试类的外观
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class TestClass extends AbstractBaseClass {
@Test(dataProvider = "getData")
public void testMethod(String testname, int count) {
Assert.assertNotNull(testname);
Assert.assertTrue(count > 0);
}
@DataProvider
public Object[][] getData() {
return new Object[][]{
{"LoginTestCase", 100},
{"ComposeMailTestcase", 200}
};
}
}
通过这种方式,您可以在基类本身中获取测试名称,即使它是通过数据提供程序提供的。
一如既往,请确保您使用 TestNG 6.11 (截至2017年7月20日是TestNG的最新发布版本)