以下是用于实现重试逻辑的类
TestRetry类:
public class TestRetry implements IRetryAnalyzer {
int counter=0;
int retryLimit=2;
@Override
public boolean retry(ITestResult result) {
if (counter < retryLimit) {
TestReporter.logStep("Retrying Test " +result.getName()+" for number of times: "+(counter+1));
counter++;
return true;
}
return false;
}
RetryListener类:
public class RetryListener implements IAnnotationTransformer {
@Override
public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) {
// TODO Auto-generated method stub
IRetryAnalyzer retry = annotation.getRetryAnalyzer();
if (retry == null) {
annotation.setRetryAnalyzer(TestRetry.class);
}
}}
样本测试:
@Listeners(RetryListener.class)
public class SampleTest {
@BeforeSuite(alwaysRun = true)
public void beforeSuite(ITestContext context) {
for (ITestNGMethod method : context.getAllTestMethods()) {
method.setRetryAnalyzer(new TestRetry());
}
}
@Test(priority=0)
public void firsttest() {
System.out.println();
TestReporter.assertEquals("Test", "Test", "pass");
}
@Test(priority=1, dependsOnMethods="firsttest")
public void secondtest() {
TestReporter.assertEquals("Test", "Test1", "fail");
}
@Test(priority=2,dependsOnMethods="secondtest")
public void thirdtest() {
TestReporter.assertEquals("Test", "Test", "pass");
}
}
当我执行上述测试时,以下是输出firsttest被执行并通过第二次测试依赖于firsttest并被执行,其失败-重试3次并再次失败第三次测试跳过,因为它依赖于第二次测试。
产量达到预期。
问:因为测试是依赖的,如果其中一个测试失败,我想先执行整个类,有办法吗?
示例:如果secondtest失败,我想再次执行整个类SampleTest。
谢谢
目前没有办法实现你的要求。
TestNG只会重试失败的测试,但不会在执行阶梯上找出所有上游依赖项并尝试运行它们(您的ask是这个通用用例的一个非常具体的变体)。
如果你仔细想想,一个依赖测试的执行仅仅是因为它的上游依赖项(它所依赖的方法)已经成功执行。那么,如果当前测试失败,为什么需要重新执行已经满足的上游依赖关系呢?这是违反直觉的。
对于您所拥有的用例,您应该只在@Test
方法中构建整个逻辑,在其中处理重试,以及在出现故障时再次调用整个链。
下面的示例应该澄清这一点
public class SampleTest {
@Test (retryAnalyzer = TestRetry.class)
public void orchestrateTest() {
firsttest();
secondtest();
thirdtest();
}
public void firsttest() {
System.out.println();
TestReporter.assertEquals("Test", "Test", "pass");
}
public void secondtest() {
TestReporter.assertEquals("Test", "Test1", "fail");
}
public void thirdtest() {
TestReporter.assertEquals("Test", "Test", "pass");
}
}
TestNG不支持您在问题中寻找的用例。
另一方面,您不能通过@Listeners
注释(在该接口的javadocs中明确调用)将IANotationTransformer
侦听器连接起来。只能通过
问题内容: 我正在编写一些重新连接逻辑,以定期尝试建立与发生故障的远程端点的连接。本质上,代码如下所示: 我已经在很多情况下使用类似于上面的代码解决了这个普遍的问题,但是我对结果不满意。是否有设计用于解决此问题的设计模式? 问题答案: 值得结帐的一个库是Sarge,它会根据已定义的计划自动执行重试。
我们使用的是spring-kafka-2.2.8.release。我有一个需要帮助的具体情况。我有4个主题topic、retryTopic、Successstopic和ErrorTopic。如果topic失败,则应该重定向到retryTopic,在那里将进行3次重试尝试。如果这些尝试失败,则必须重定向到ErrorTopic。如果在topic和retryTopic上都有sucess,则应该重定向到s
问题内容: 我正在使用Jenkins,Python,Selenium2(webdriver)和Py.test框架为网络测试创建测试用例。 到目前为止,我正在按照以下结构组织测试: 每个 类 是 测试用例 ,每个 方法是一个 测试步骤 。 当一切正常时,此设置非常有用,但是当一个步骤崩溃时,其余的“测试步骤”就会发疯。我可以借助来将故障包含在类(测试用例)中,但是我正在研究如何改进它。 我需要的是,
碰到一个问题是这样的,有个老项目,用的jquery进行发送请求,因为环境网络不稳定之类的,会有偶然性的请求失败,SSL连接失败,没有状态码,只要重新发送就能正常了。所以期望能做到如果请求响应失败,且没有状态码时,请求能否每隔半秒自动重试3次。如下代码,在重试期间fail、error、always等回调逻辑不会被触发。 试过使用 $.ajaxPrefilter 和 $.ajaxSetup 对erro
我写了500多个单元测试方法。当我发出< code>ng test命令时。它开始测试所有的500种方法。 如果任何测试用例失败,它不会停止,仍然会继续执行所有方法。所以我需要等待更多的时间来再次重新运行单元测试。 我知道我们可以通过执行来存在,然后使用命令再次重新运行单元测试。这种方式也需要太多时间。 那么,如果任何一个测试失败,是否有可能停止(不存在)单元测试?
我试图使用Axon 4.1+中的在一个2 JVM node K8集群上重播事件。虽然我将它设置为清理事件,但它只从一个节点中提取事件,而另一个节点继续运行,因为它的跟踪事件仍然是活动的。 我如何在所有JVM上同时禁用它,以便它能够正确地重播?然后启用所有这些命令,继续处理命令。 我尝试通过这段代码增加线程,这导致了另一个问题,即现有的令牌在InitialSemgmentsCount中永远不会增加,