我们定义了一个testng结果侦听器,可帮助我们将testng.xml中定义的每个测试用例的测试结果发送到一个内部工具,如下所示:
public class TestResultsListener implements ITestListener, ISuiteListener {
@Override
public void onFinish(ISuite suite){
// some code to send the final suite result to internal tools
}
@Override
public void onTestSuccess(ITestResult iTestResult) {
this.sendResult(iTestResult,"PASS");Result
}
private void sendStatus(ITestResult iTestResult, String status){
// Set test case information
......
jsonArr.add(testResult);
}
}
然后我们将此侦听器集成到其他项目的testng xml文件中,例如:
<listeners>
<listener class-name="com.qa.test.listener.TestesultsListener" />
</listeners>
它按设计工作:测试套件完成后,测试结果将上传到内部工具。
现在我们有一个要求,即在一个项目中,testng.xml中的一个测试用例与内部工具中的3个测试用例相关,这意味着对于testng.xml中的一个测试用例,我们需要在内部工具中更新3个测试用例。我们如何更新当前的testng侦听器以实现此目的?
非常感谢。
答案 0 :(得分:2)
您可以使用相应的内部测试工具ID列表来注释每个测试:
这里我假设您有2个testng测试:一个与内部测试IT-1相关,另一个与内部测试IT-2,IT-3和IT-4相关:
geom_col
注释的定义如下:
@Listeners(MyTestListener.class)
public class TestA {
@Test
@InternalTool(ids = "IT-1")
public void test1() {
System.out.println("test1");
fail();
}
@Test
@InternalTool(ids = {"IT-2", "IT-3", "IT-4"})
public void test2() {
System.out.println("test2");
}
}
您的听众只需弄清楚成功/失败测试中存在哪些批注:
@Retention(RetentionPolicy.RUNTIME)
public @interface InternalTool {
String[] ids();
}
产生以下输出:
public class MyTestListener extends TestListenerAdapter implements ITestListener {
@Override
public void onTestSuccess(ITestResult tr) {
super.onTestSuccess(tr);
updateInternalTool(tr, true);
}
@Override
public void onTestFailure(ITestResult tr) {
super.onTestFailure(tr);
updateInternalTool(tr, false);
}
private void updateInternalTool(ITestResult tr, boolean success) {
InternalTool annotation = tr.getMethod().getConstructorOrMethod().getMethod().getAnnotation(InternalTool.class);
for (String id : annotation.ids()) {
System.out.println(String.format("Test with id [%s] is [%s]", id, success ? "successful" : "failed"));
}
}
}
您还可以将此机制扩展到Suite侦听器。
免责声明:该行
test1
Test with id [IT-1] is [failed]
test2
Test with id [IT-2] is [successful]
Test with id [IT-3] is [successful]
Test with id [IT-4] is [successful]
并非防弹(空指针异常的高风险)。应该更健壮。