【问题标题】:How to continue test execution after assertion failed?断言失败后如何继续测试执行?
【发布时间】:2015-12-18 02:42:52
【问题描述】:

我知道这个问题是重复的。但我正在寻找昨天的结果。我对此没有任何解决方案.. 我正在使用 Selenium Webdriver 2.47.1 和 TestNG 进行自动化。在我的自动化脚本中,我有 12 组测试并且我正在使用 TestNG Assert 方法来比较预期结果和实际结果。我的代码格式如下...

@Test(priority = 6)
public void TestingeNote1() {
   cd.switchTo().frame("RTop");
   cd.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
   String TesteNote1 = cd.findElement(By.xpath("//table/tbody/tr[2]/td[5]")).getText();
   StringBuffer object1 = new StringBuffer(TesteNote1);
   String ActeNote1 = object1.substring(108);
   String ExpeNote1 = ex.getExcelValue(scenarioName, 75, 4);
   try {
       Assert.assertEquals(ExpeNote1, ActeNote1);
       ex.setExcelValue(scenarioName, 75, 8, "PASSED");
   }
   catch(Exception e) {
         ex.setExcelValue(scenarioName, 75, 8, "FAILED");
   }
   cd.switchTo().defaultContent();
}

一旦断言失败,测试脚本的执行就会停止。我也想在断言失败后继续执行。我也使用了 Verify(),它只是给出了通过的验证结果。但是上面的测试结果是失败的。

【问题讨论】:

  • 您在尝试断言时遇到了什么错误?

标签: selenium selenium-webdriver testng assertions


【解决方案1】:

我建议使用 try/finally 块。

。 . .

    try {
     //use IF condition to match Strings (ExpeNote1, ActeNote1)are equal 
     ex.setExcelValue(scenarioName, 75, 8, "PASSED");
     }
     catch(Exception e)
     {  ex.setExcelValue(scenarioName, 75, 8, "FAILED");}
     finally {  cd.switchTo().defaultContent();}

【讨论】:

  • 我也尝试过 try/finally 块。在断言失败后,测试本身就停止了。它没有继续执行..
  • 它对我有用。非常感谢.. 使用上述代码时未执行 catch 块。 Excel 未更新特定测试的失败测试结果
  • 如果你的问题是匹配 2 个字符串,那么只要使用 IF 条件就可以解决你的问题。
  • 在使用上面的代码时,我得到了 Eclipse 输出为Tests run: 12, Failures: 1, Skips: 0。这正是我真正需要的。但在这种情况下,excel 没有更新任何值..
  • 阅读一些博客我得出结论,断言(硬)将失败在任何测试方法中,该特定测试方法的剩余执行将被中止。现在如果你想继续执行剩余的测试部分,即使断言失败并且你想在testng结果报告中报告断言失败,那么你可以使用testng软断言方法。link
【解决方案2】:

使用带有适当异常捕获器的 try catch 块。例如,当您尝试捕获正常异常时,请在 catch 块中使用 exception,如果该元素不存在于 DOM 中,则使用 NoSuchElementException 等...在您的情况下,捕获您在错误中遇到的异常安慰。方法如下 -

  try {
       Assert.assertEquals(ExpeNote1, ActeNote1);
       ex.setExcelValue(scenarioName, 75, 8, "PASSED");
   }
   catch(AssertionError e) {
       ex.setExcelValue(scenarioName, 75, 8, "FAILED");
   }

您的执行停止是因为您没有捕捉到您的断言语句抛出的正确异常。我猜你得到了一个 AssertionError,如果没有替换你从上面的代码中得到的异常类型。希望这会有所帮助。

【讨论】:

  • 在使用上述代码时,Excel 更新为测试结果失败。但是 Eclipse 的输出是Tests run: 12, Failures: 0, Skips: 0。测试没有失败。只是它显示测试通过
  • 是的,它不会显示为失败,因为您正在捕获异常。如果您仍然希望它失败,那么您可以自己抛出一个新异常并且不要在 catch() 块中捕获它,因为您需要执行 catch 块。
【解决方案3】:

使用软断言。即使一个断言失败,它也会继续测试。

SoftAssert softAssert = new SoftAssert();
String ActualErrorMEssage = firstNameerrorXpath.getText;
String ActualErrorMEssage2 = secondNameNameerrorXpath.getText;
softAssert.assertEquals(ActualErrorMEssage,ExpectedErrorMEssage);
softAssert.assertEquals(ActualErrorMEssage2,ExpectedErrorMEssage);
softAssert.assertAll();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 2010-12-15
    • 2011-06-11
    • 2020-04-08
    相关资源
    最近更新 更多