java testng 优化_java – 如何优化testng和seleniums测试

您可以结合使用IRetryAnalyzer,Listener和自定义记者来完成您所需要的工作.

IRetryAnalyzer:

public class RetryAnalyzer implements IRetryAnalyzer {

private int count = 0;

// this number is actually twice the number

// of retry attempts will allow due to the retry

// method being called twice for each retry

private int maxCount = 6;

protected Logger log;

private static Logger testbaseLog;

static {

PropertyConfigurator.configure("test-config/log4j.properties");

testbaseLog = Logger.getLogger("testbase.testng");

}

public RetryAnalyzer()

{

testbaseLog.trace( " ModeledRetryAnalyzer constructor " + this.getClass().getName() );

log = Logger.getLogger("transcript.test");

}

@Override

public boolean retry(ITestResult result) {

testbaseLog.trace("running retry logic for '"

+ result.getName()

+ "' on class " + this.getClass().getName() );

if(count < maxCount) {

count++;

return true;

}

return false;

}

}

RetryListener:

public class RetryTestListener extends TestListenerAdapter {

private int count = 0;

private int maxCount = 3;

@Override

public void onTestFailure(ITestResult result) {

Logger log = Logger.getLogger("transcript.test");

Reporter.setCurrentTestResult(result);

if(result.getMethod().getRetryAnalyzer().retry(result)) {

count++;

result.setStatus(ITestResult.SKIP);

log.warn("Error in " + result.getName() + " with status "

+ result.getStatus()+ " Retrying " + count + " of 3 times");

log.info("Setting test run attempt status to Skipped");

}

else

{

count = 0;

log.error("Retry limit exceeded for " + result.getName());

}

Reporter.setCurrentTestResult(null);

}

@Override

public void onTestSuccess(ITestResult result)

{

count = 0;

}

但是,TestNG中似乎存在一个错误,实际上导致某些测试结果被报告为跳过和失败.为了防止这种情况,我建议您覆盖您想要使用的任何Reporter,并包括如下所示的方法:

private IResultMap removeIncorrectlyFailedTests(ITestContext test)

{

List failsToRemove = new ArrayList();

IResultMap returnValue = test.getFailedTests();

for(ITestResult result : test.getFailedTests().getAllResults())

{

long failedResultTime = result.getEndMillis();

for(ITestResult resultToCheck : test.getSkippedTests().getAllResults())

{

if(failedResultTime == resultToCheck.getEndMillis())

{

failsToRemove.add(resultToCheck.getMethod());

break;

}

}

for(ITestResult resultToCheck : test.getPassedTests().getAllResults())

{

if(failedResultTime == resultToCheck.getEndMillis())

{

failsToRemove.add(resultToCheck.getMethod());

break;

}

}

}

for(ITestNGMethod method : failsToRemove)

{

returnValue.removeResult(method);

}

return returnValue;

}

完成所有这些操作后,您可以使用.addListener添加报告器,并在@Test注释中指定retryAnalyzer.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值