Selenium - 如果发生灾难性错误,优雅地中止测试 - 但生成测试报告
Selenium - abort the tests gracefully if a catastrophic error occurs - but generate test report
我已经查看了关于此主题的现有 questions/answers,但没有看到任何与我的问题相关的内容。
首先,我的测试自动化使用两个侦听器 - TestListener
和 CustomReportListener
- 以及带有 Selenium Webdriver 的 TestNG 框架 测试网站。
问题是:如果在其中一项测试中检测到临界条件,我如何终止其余测试(即测试套件的其余部分) - 但仍生成邮寄给测试人员的测试报告?
运行 进入关键问题的测试将被标记为失败,但其余(理想情况下)将被标记为已跳过。
终止测试最简单的方法是使用System.exit(1)
。我试过了,但它终止了测试过程——因此,没有创建测试报告。
您可以使用 TestListener
跳过剩余的测试。
在你的测试方法中,如果临界条件已经发生,那么你必须在 ITestContext
对象中设置一个属性:
@Test
public void testCase(ITestContext ctx) {
//.....rest of the code....
if(/*the critical condition*/) {
ctx.setAttribute("criticalFailure", true);
}
// or if you are expecting an exception to identify the critical issue..
try {
// code which you expect may throw the critical exception
} catch (YourExpectedException e) {
ctx.setAttribute("criticalFailure", true);
}
}
现在在您的侦听器中,检查是否设置了此属性。
public class TestListener implements ITestListener {
@Override
public void onTestStart(ITestResult result) {
// Note that you should not use result.getAttribute because
// in the test method, we have set the attribute in the test context.
// (ITestResult is not available in test methods)
Object isCritical = result.getTestContext().getAttribute("criticalFailure");
if (isCritical != null && (boolean) isCritical) {
throw new SkipException("Critical error occurred");
}
}
}
如果您将所有失败都视为严重错误,那就容易多了。您不必更改测试方法中的任何内容。唯一的变化是在您的测试侦听器中。
public class TestListener implements ITestListener {
@Override
public void onTestFailure(ITestResult result) {
result.setAttribute("failed", true);
}
@Override
public void onTestStart(ITestResult result) {
Object failed = result.getAttribute("failed");
if (failed != null && (boolean) failed) {
throw new SkipException("Critical error occurred");
}
}
}
我已经查看了关于此主题的现有 questions/answers,但没有看到任何与我的问题相关的内容。
首先,我的测试自动化使用两个侦听器 - TestListener
和 CustomReportListener
- 以及带有 Selenium Webdriver 的 TestNG 框架 测试网站。
问题是:如果在其中一项测试中检测到临界条件,我如何终止其余测试(即测试套件的其余部分) - 但仍生成邮寄给测试人员的测试报告?
运行 进入关键问题的测试将被标记为失败,但其余(理想情况下)将被标记为已跳过。
终止测试最简单的方法是使用System.exit(1)
。我试过了,但它终止了测试过程——因此,没有创建测试报告。
您可以使用 TestListener
跳过剩余的测试。
在你的测试方法中,如果临界条件已经发生,那么你必须在 ITestContext
对象中设置一个属性:
@Test
public void testCase(ITestContext ctx) {
//.....rest of the code....
if(/*the critical condition*/) {
ctx.setAttribute("criticalFailure", true);
}
// or if you are expecting an exception to identify the critical issue..
try {
// code which you expect may throw the critical exception
} catch (YourExpectedException e) {
ctx.setAttribute("criticalFailure", true);
}
}
现在在您的侦听器中,检查是否设置了此属性。
public class TestListener implements ITestListener {
@Override
public void onTestStart(ITestResult result) {
// Note that you should not use result.getAttribute because
// in the test method, we have set the attribute in the test context.
// (ITestResult is not available in test methods)
Object isCritical = result.getTestContext().getAttribute("criticalFailure");
if (isCritical != null && (boolean) isCritical) {
throw new SkipException("Critical error occurred");
}
}
}
如果您将所有失败都视为严重错误,那就容易多了。您不必更改测试方法中的任何内容。唯一的变化是在您的测试侦听器中。
public class TestListener implements ITestListener {
@Override
public void onTestFailure(ITestResult result) {
result.setAttribute("failed", true);
}
@Override
public void onTestStart(ITestResult result) {
Object failed = result.getAttribute("failed");
if (failed != null && (boolean) failed) {
throw new SkipException("Critical error occurred");
}
}
}