我使用dataProvider执行TestNG测试。 所以我通过@BeforeMethod设置了testName,并重写了getTestName()。
到目前为止,这可行,但似乎TestNG在开始时调用了测试的getTestName 在它开始之前。在配置期间抛出异常时会发生这种情况,因此@BeforeMethod不会被执行,因此我的测试名称为null。
无论如何都要调用原始方法,如果我没有覆盖它就会被调用:D因为我实现了一个接口,所以不要从另一个类扩展我不能使用super.getTestName()
。 / p>
任何解决这个问题的方法都可能是?
@Test(groups = {TestGroups.READY}, description = "check help on each tab")
public class HelpTest extends TestControl implements ITest {
// overriding to return my individual testname, but is null at the beginning
@Override
public String getTestName() {
return TestControl.getCurrentTestName();
}
@DataProvider(name = "tabs")
public Iterator<Object[]> tabs() {
Set<Object[]> list = new LinkedHashSet<Object[]>();
for (Tab tab : Tab.values()) {
list.add(new Object[]{tab});
}
return list.iterator();
}
// before the test below starts, i set my individual testname
@BeforeMethod
public void setTestName(Method method, Object[] testData) {
TestControl.setCurrentTestName(method.getName() + "_" + StringUtils.capitalize(testData[0].toString().toLowerCase()));
}
// executing the test with the given data provider
@Test(dataProvider = "tabs")
public void testHelpSites(Tab tab) throws Exception {
TestActions.goTab(tab).callHelp(tab).checkHelp();
}
}
答案 0 :(得分:0)
我想我弄清楚了,我还通过AbstractWebDriverEventListener
和ITestListener
使用了TestReporter,并在其onTestStart(ITestResult result)
上调用了测试的名称,这是{之前调用的来源} {1}}致电。
我通过检查@BeforeMethod
是否为null来解决它,如果它实现result.getName()
则调用测试getTestName()
,如果它是null,我使用ITest
中的原始名称。不漂亮,但很少见:D
答案 1 :(得分:0)
我可以使用ITestNGMethod testng类来解决这个问题。
ITestNGMethod method = result.getMethod(); //结果是ITestResult对象 method.getMethodName(); //这将返回方法名称。
My complete method here:
@Override
public void onTestSuccess(ITestResult result) {
ITestNGMethod method = result.getMethod();
String message = "Test Execution is Successful:"+method.getMethodName();
}
希望这有帮助