我有一个黄瓜场景,该步骤使用assertEquals
。我的结果报告显示了最终用户友好的堆栈跟踪。我怎么能压制它
Scenario: Add two numbers
Given I have two inputs "3" and "2"
When I add them
Then the output should be "15"
答案 0 :(得分:1)
您在观察默认XML输出时(假设您没有输出到JSON或文本,但您没有说过)来自Junit测试显示失败步骤的堆栈跟踪。这实际上不是黄瓜的东西。 CucumberOptions
在这里不会帮助你。
你可以:
希望能满足您的需求。
答案 1 :(得分:1)
我的 Cucumber-Selenium-Java 项目也遇到了同样的问题。在黄瓜报告中,它生成了大约 40 行堆栈跟踪。因此,它影响了报告的外观。最终用户/客户对此并不关心。因为他/她无法真正弄清楚这个堆栈跟踪的实际用途。所以,我想出了以下想法/方法。这有点棘手,但值得。
开始前的一些注意事项:
您需要创建一个通用方法来处理所有异常,并在所有必需的类中重用此方法。例如:我将该方法命名为“processException”并将其放在“ReusableMethod”类中。
请注意,我在下面的方法(第 8 行)中使用了包名“page”,因为我所有的测试类都放在这个包中。在您的情况下,您需要根据需要更新包名称。此外,我只为两个异常编写了自定义案例:NoSuchElementException 和 AssertionError。您可能需要根据需要编写更多案例。
public void processException(Throwable e) throws Exception {
StackTraceElement[] arr = e.getStackTrace();
String className = "";
String methodName = "";
int lineNumber = 0;
for (int i = 0; i < arr.length; i++) {
String localClassName = arr[i].getClassName();
if (localClassName.startsWith("page")) {
className = localClassName;
methodName = arr[i].getMethodName();
lineNumber = arr[i].getLineNumber();
break;
}
}
String cause = "";
try {
cause = e.getCause().toString();
} catch (NullPointerException e1) {
cause = e.getMessage();
}
StackTraceElement st = new StackTraceElement(className, methodName, "Line", lineNumber);
StackTraceElement[] sArr = { st };
if (e.getClass().getName().contains("NoSuchElementException")) {
String processedCause = cause.substring(cause.indexOf("Unable to locate"), cause.indexOf("(Session info: "))
.replaceAll("\\n", "");
Exception ex = new Exception("org.openqa.selenium.NoSuchElementException: " + processedCause);
ex.setStackTrace(sArr);
throw ex;
} else if (e.getClass().getName().contains("AssertionError")) {
AssertionError ae = new AssertionError(cause);
ae.setStackTrace(sArr);
throw ae;
} else {
Exception ex = new Exception(e.getClass() + ": " + cause);
ex.setStackTrace(sArr);
throw ex;
}
}
下面是示例方法,用于展示上述方法在测试类方法中的用法。我们通过使用类引用来调用上面创建的方法,在我的例子中是“reuseMethod”。我们将捕获的 Throwable 引用“e”传递给 catch 块中的上述方法:
public void user_Navigates_To_Home_Page() throws Exception {
try {
//Certain lines of code as per your tests
//element.click();
} catch (Throwable e) {
reuseMethod.processException(e);
}
}
以下是 NoSuchElementException 实现的几个截图:
在实施此方法之前:
实施此方法后: