TestNG BeforeClass 和 AfterMethod 等效方法用于 TestNG 侦听器
TestNG BeforeClass and AfterMethod equivalent methods for TestNG listener
采用以下 base class methods testSetup() and getStatusAndAnnotation()
并将它们放入 TestNG 侦听器。我可以找到 @BeforeClass
等价于 onBeforeClass(ITestClass, IMethodInstance)
。但是,@AfterMethod
的等价物是什么?
我的目标是将 ITestResult 作为参数传递给该方法,因为我会将测试结果保存到其中。下面的代码显示我正在获取测试的注释和状态,然后将其推送到 testrail 云。我尝试使用:
@Override
public void afterInvocation(IInvokedMethod, ITestResult) {
..
}
没有帮助,给了
java.lang.NoSuchMethodException: client.test.reporting.listeners.TestRailListener.test_getVersion()
at java.lang.Class.getMethod(Class.java:1670)
这里Java:1670是
throw new NoSuchMethodException(getName() + "." + name + argumentTypesToString(parameterTypes));
**@BeforeClass
public static void testSetup() throws InterruptedException, IOException, APIException {
initTestRail();
}
@AfterMethod
public void getStatusAndAnnotation(ITestResult result) throws NoSuchMethodException, IOException, APIException {
HashMap<Object, Object> map = new HashMap<>();
Method m = getClass().getMethod(result.getName());
TestCase annotation = m.getAnnotation(TestCase.class);
try {
map.put("testRailCaseId",annotation.testRailCaseId());
}catch (NullPointerException e){}
if (result.isSuccess()) {
map.put("result", 1);
} else {
map.put("result", 5);
}
if(annotation.testRailDeployEnable() && !map.get("testRailCaseId").equals(null) && !map.get("testRailCaseId").toString().isEmpty())
{
TestRailIntegration.addTestResult(map);
}
else System.out.println("Deploying result was canceled, because test has annotation \"testRailDeployEnable: false\" or \"testRailCaseId\" has no value");
}**
执行每个方法后,无论状态如何 (PASS/FAIL/SKIP),我想执行此 getStatusAndAnnotation...() 但它给出了以上 exception/error。
我认为你可以实现 org.testng.ITestListener
,但不是单一的方法 afterInvocation()
它有几个取决于结果的方法:onTestSuccess()
、onTestFailure()
、onTestSkipped()
, 等等。每个方法都传递给 ITestResult
对象,其中还包含正在执行的方法:
@Override
public void onTestSuccess(ITestResult iTestResult) {
Method method = iTestResult.getMethod().getConstructorOrMethod().getMethod();
Annotation[] annotations = method.getDeclaredAnnotations();
...
}
采用以下 base class methods testSetup() and getStatusAndAnnotation()
并将它们放入 TestNG 侦听器。我可以找到 @BeforeClass
等价于 onBeforeClass(ITestClass, IMethodInstance)
。但是,@AfterMethod
的等价物是什么?
我的目标是将 ITestResult 作为参数传递给该方法,因为我会将测试结果保存到其中。下面的代码显示我正在获取测试的注释和状态,然后将其推送到 testrail 云。我尝试使用:
@Override
public void afterInvocation(IInvokedMethod, ITestResult) {
..
}
没有帮助,给了
java.lang.NoSuchMethodException: client.test.reporting.listeners.TestRailListener.test_getVersion()
at java.lang.Class.getMethod(Class.java:1670)
这里Java:1670是
throw new NoSuchMethodException(getName() + "." + name + argumentTypesToString(parameterTypes));
**@BeforeClass
public static void testSetup() throws InterruptedException, IOException, APIException {
initTestRail();
}
@AfterMethod
public void getStatusAndAnnotation(ITestResult result) throws NoSuchMethodException, IOException, APIException {
HashMap<Object, Object> map = new HashMap<>();
Method m = getClass().getMethod(result.getName());
TestCase annotation = m.getAnnotation(TestCase.class);
try {
map.put("testRailCaseId",annotation.testRailCaseId());
}catch (NullPointerException e){}
if (result.isSuccess()) {
map.put("result", 1);
} else {
map.put("result", 5);
}
if(annotation.testRailDeployEnable() && !map.get("testRailCaseId").equals(null) && !map.get("testRailCaseId").toString().isEmpty())
{
TestRailIntegration.addTestResult(map);
}
else System.out.println("Deploying result was canceled, because test has annotation \"testRailDeployEnable: false\" or \"testRailCaseId\" has no value");
}**
执行每个方法后,无论状态如何 (PASS/FAIL/SKIP),我想执行此 getStatusAndAnnotation...() 但它给出了以上 exception/error。
我认为你可以实现 org.testng.ITestListener
,但不是单一的方法 afterInvocation()
它有几个取决于结果的方法:onTestSuccess()
、onTestFailure()
、onTestSkipped()
, 等等。每个方法都传递给 ITestResult
对象,其中还包含正在执行的方法:
@Override
public void onTestSuccess(ITestResult iTestResult) {
Method method = iTestResult.getMethod().getConstructorOrMethod().getMethod();
Annotation[] annotations = method.getDeclaredAnnotations();
...
}