在 testNG ITestListener 中获取测试方法的注释
Posted
技术标签:
【中文标题】在 testNG ITestListener 中获取测试方法的注释【英文标题】:get Annotation of test method in testNG ITestListener 【发布时间】:2013-04-24 10:42:23 【问题描述】:我正在尝试将 TestLink 与 TestNG 集成 方法如下
1>使用 onTestFailure 和 onTestSuccess 编写 ITestListner
2> 获取变量中失败/成功的方法的注释(如 testName,相当于 testlink 中的测试名称)
3>使用可用 API 与 TestLink 建立连接并更新测试用例。
但是我很难在 ITestListner 中找到方法注释值,并且要求仅在 ITestListner 中获取注释值,以便可以在 Test_link 中更新正确的测试用例
有人可以帮我如何在 ITestListner 中获取测试方法注释值或任何其他我可以将 testlink 更新与 TestNG 集成的方法
【问题讨论】:
【参考方案1】:您好,感谢 niharika 的帮助 ,首先你在解释使用 TestNG 时是正确的,但是我们正在使用 TestNG for Selenium,并且已经有大约 1000 个测试用例编写在测试方法中,我们必须忍受它
我想出了一些解决方案,我们仍然可以使用两个侦听器获取测试方法的 testName 这只是解决方法我不确定这是否是最好的方法,但截至目前解决我的目的
package com.automation.testng.listner;
import org.testng.*;
public class MyIInvokeMethodListner_TestName_TestLink implements IInvokedMethodListener
public static String testName;
public void afterInvocation(IInvokedMethod arg0, ITestResult arg1)
// TODO Auto-generated method stub
public void beforeInvocation(IInvokedMethod m, ITestResult tr)
// TODO Auto-generated method stub
//This give the Annotation Test object
org.testng.annotations.Test t=m.getTestMethod().getMethod().getAnnotation(org.testng.annotations.Test.class);
MyIInvokeMethodListner_TestName_TestLink.testName = t.testName().toString();
MyITestListner 如下所示
package com.automation.testng.listner;
import org.testng.*;
public class MyITestListner_TestLink extends TestListenerAdapter
/*IAnnotationTransformer at;
public Listner_1()
this.at = new Annotation_listner();
*/
@Override
public void onTestFailure(ITestResult tr)
System.out.println("Hurray !I am being inboked from Test listner");
MyIInvokeMethodListner_TestName_TestLink a = new MyIInvokeMethodListner_TestName_TestLink();
System.out.println(MyIInvokeMethodListner_TestName_TestLink.testName);
public void onTestSuccess(ITestResult tr)
MyIInvokeMethodListner_TestName_TestLink a = new MyIInvokeMethodListner_TestName_TestLink();
System.out.println(MyIInvokeMethodListner_TestName_TestLink.testName);
基本上我们获取方法,然后使用测试注释类设置可在 MyITestListner 中使用的静态变量
【讨论】:
【参考方案2】: ITestListener 是在<test>
标记之后使用的那个。要获取方法名和注解细节,需要实现IInvokedMethodListener
,并在该接口的after/before方法中,使用method.getTestMethod().getMethodName()
之类的东西来获取正在执行的方法名。
如果你在方法级别添加testName,我认为你做错了,因为testng的帮助提到了这个“这个测试类应该放在的测试的名称。如果@Test不是,这个属性被忽略在班级层面。”
如果您确实在班级级别指定了@Test,那么您可以按以下方式获取它:
method.getTestMethod().getTestClass().getTestName()
【讨论】:
但是在使用 IInvokedMethodListener 之后,我也无法获得像 @Test(testName = "TestCaseID") 这样的测试方法的注释值,我想获得 testName 值,即变量中的 TestCaseID 对不起,如果我是 TestNG 的新手,让您感到困惑,我想您仍然没有得到我的问题,可以说我有一个类,它有 4 个测试方法和 @Test(testName = "TestCaseID ") 注释(这是唯一的测试方法)并且我想在 ITestListner 中获取注释,有一个 IAnnotationTransformer 列表器可以选择获取它的注释值,但我想要特定方法的注释通过/失败 不应在方法级别使用 testName。如果您在方法级别使用它,您将无法通过代码获取它,因为 testName 并不意味着在方法级别使用。仅当您在班级级别拥有 @Test 时, testName 才有意义。例如。如果类 A 有 4 个测试,从 test1 到 test4(),那么除了在每个方法级别进行注释之外,您还可以对类进行注释,即 \@Test \n public void classA..test1() 到 test4()..。现在在这个“@Test”注释中,testName 是有意义的。但不是在方法级别的“@Test”。 一些我如何使用注释类(测试)将在站点不允许新用户发布问题的解决方案时立即发布解决方案:org.testng.annotations.Test t = m。 getTestMethod().getMethod().getAnnotation(org.testng.annotations.Test.class); 嗯..很高兴这对你有用。似乎 getMethod 已被弃用..您可以尝试使用 method.getTestMethod().getConstructorOrMethod().getMethod().getAnnotation(org.testng.annotations.Test.class)【参考方案3】:有点难看,您可能希望将这些部分包装在代码中的空检查中,但这是您从 ITestResult 获取注释中指定的 testName 的方式:
iTestResult.getMethod().getConstructorOrMethod().getMethod().getAnnotation(Test.class).testName()
【讨论】:
以上是关于在 testNG ITestListener 中获取测试方法的注释的主要内容,如果未能解决你的问题,请参考以下文章