@Override public void result(Result result) { // addTestNgAttribute(RESULTS, result); String timing = result.getDuration() != null ? " : " + (Math.round(result.getDuration() / 1000000000f * 100f) / 100f) + "s" : ""; Step step; if (steps.isEmpty()) { step = new Step(null, "MISMATCH BETWEEN STEPS AND RESULTS", "", 0, null, null); } else { step = steps.pop(); } org.testng.Reporter.log( "<div class=\"result\">" + step.getKeyword() + " " + step.getName() + " (" + result.getStatus() + timing + ")</div>"); if (Result.FAILED.equals(result)) { ITestResult tr = org.testng.Reporter.getCurrentTestResult(); tr.setThrowable(result.getError()); tr.setStatus(ITestResult.FAILURE); failureCount.incrementAndGet(); } else if (Result.SKIPPED.equals(result)) { ITestResult tr = org.testng.Reporter.getCurrentTestResult(); tr.setThrowable(result.getError()); tr.setStatus(ITestResult.SKIP); skipCount.incrementAndGet(); } else if (Result.UNDEFINED.equals(result)) { ITestResult tr = org.testng.Reporter.getCurrentTestResult(); tr.setThrowable(result.getError()); tr.setStatus(ITestResult.FAILURE); failureCount.incrementAndGet(); } else { passCount.incrementAndGet(); } }