我们定义了一个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侦听器来实现这一点呢?
多谢.
您可以使用相应的内部测试工具ID列表来注释您的每个测试:
这里我假设您有2个testng测试:一个与内部测试IT-1相关,另一个与内部测试IT-2、IT-3和IT-4相关:
@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"));
}
}
}
产生以下输出:
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]
您还可以将此机制扩展到套件侦听器。
免责声明:行InternalTool注释=tr.getMethod().getConstructororMethod().getMethod().getAnnotation(InternalTool.Class);
不是防弹(空指针异常的高风险)。应该更健壮。
我试图在更新整数值时激发事件,但失败了。下面是我使用的代码: 我是不是漏掉了什么?
方法正在传递,这太好了,但是为什么的结果会出现在库测试结果中,我不明白。我怎么才能避免呢? 我在这里列出了和的完整代码。
我目前正在为一个包含大量模块的大项目创建TestNG测试用例。现有的大多数单元测试实际上都是集成测试,因为它们非常依赖于/opt文件夹中的配置文件以及正在运行的数据库和消息队列。 为了使事情进一步复杂化,测试用例使用配置位于resources/meta-inf/services/org.TestNG.itestnglistener文件中的TestNG侦听器。这个文件中的侦听器触发所有测试用例(正如
有人知道这是否可能使log4j上的侦听器从命名方法/类捕获每个日志?最后是将检索到的日志添加到JPanel中。 谢谢!
我有一个自定义视图,我可以在其中画线,我也可以选择线的宽度。我还有一个统计数据,在另一个片段中,我应该显示每一个笔画画了多少行。 所以我想创建一个自定义的监听器,它应该对不同的笔划宽度做出反应。每当笔划发生变化时,统计数据应显示所选笔划的新计数。。。 我用界面尝试了一下,但我真的不知道如何前进。我该怎么做?
而且,如果从Eclipse运行这样的测试,即使测试被移除,当套件完成时,失败仍然会打印在日志中。 关于RetryAnalyzer:我根本不考虑使用RetryAnalyzer的良好/最佳实践,但如果您发现自己处于需要解决问题的情况下,例如,您继承了一个依赖RetryAnalyzer的测试套件,您可能会发现这很有用。