Java 为什么';在数据驱动测试中,每次测试后是否打印testNG断言消息?

Java 为什么';在数据驱动测试中,每次测试后是否打印testNG断言消息?,java,unit-testing,testng,testng-dataprovider,Java,Unit Testing,Testng,Testng Dataprovider,我正在运行从电子表格驱动的数据驱动测试,该电子表格被输入到TestNG测试框架。简而言之,该框架遍历outlook邮箱并查找基于主题的邮件。电子表格中的每一行都是邮件主题,它是测试的输入 String comparisonResult = GetMail.compareMails(scenarioName); Assert.assertNotNull(comparisonResult,"Mail does not exist"); 在引擎盖下,comparemails方法将作为参数传递

我正在运行从电子表格驱动的数据驱动测试,该电子表格被输入到TestNG测试框架。简而言之,该框架遍历outlook邮箱并查找基于主题的邮件。电子表格中的每一行都是邮件主题,它是测试的输入

String comparisonResult = GetMail.compareMails(scenarioName);
    Assert.assertNotNull(comparisonResult,"Mail does not exist");
在引擎盖下,
comparemails
方法将作为参数传递的邮件的主题与该方法进行比较,并在邮箱中查找该邮件

当邮件不存在时,我断言为空值,并使用断言消息“邮箱中不存在邮件”进行报告。但是,在每次测试失败后,断言消息不会显示,而是在所有测试运行结束时(即,在处理电子表格的所有行之后)报告

当断言失败时,我希望它立即在控制台上打印断言消息,并处理电子表格中的下一个测试

但是,它会在测试结束时立即打印消息,如下所示,假设有5次失败:

[name=null](com.dms.testsuite.Test)  Time elapsed: 66.905 sec  <<< FAILURE!
java.lang.AssertionError: Mail does not exist expected object to not be null
at org.testng.Assert.fail(Assert.java:94)
at org.testng.Assert.assertNotNull(Assert.java:404)
at com.dms.testsuite.Test.submitJob(Test.java:110)

[name=null](com.dms.testsuite.Test)  Time elapsed: 83.24 sec  <<< FAILURE!
java.lang.AssertionError: Mail does not exist expected object to not be null
at org.testng.Assert.fail(Assert.java:94)
at org.testng.Assert.assertNotNull(Assert.java:404)
at com.dms.testsuite.Test.submitJob(Test.java:110)

[name=null](com.dms.testsuite.Test)  Time elapsed: 51.064 sec  <<< FAILURE!
java.lang.AssertionError: Mail does not exist expected object to not be null
at org.testng.Assert.fail(Assert.java:94)
at org.testng.Assert.assertNotNull(Assert.java:404)
at com.dms.testsuite.Test.submitJob(Test.java:110)

[name=null](com.dms.testsuite.Test)  Time elapsed: 51.735 sec  <<< FAILURE!
java.lang.AssertionError: Mail does not exist expected object to not be null
at org.testng.Assert.fail(Assert.java:94)
at org.testng.Assert.assertNotNull(Assert.java:404)
at com.dms.testsuite.Test.submitJob(Test.java:110)

[name=null](com.dms.testsuite.Test)  Time elapsed: 67.177 sec  <<< FAILURE!
java.lang.AssertionError: Mail does not exist expected object to not be null
at org.testng.Assert.fail(Assert.java:94)
at org.testng.Assert.assertNotNull(Assert.java:404)
at com.dms.testsuite.Test.submitJob(Test.java:110)
编辑:添加类别代码:

public class SubmitJobTest extends BaseClass implements ITest {

  private String name;

  @BeforeSuite
  public void generateXML() {
    try {
      XMLGenerator.mapper();
    } catch (ValidityException e) {      
      e.printStackTrace();
    } catch (ParsingException e) {      
      e.printStackTrace();
    } catch (IOException e) {      
      e.printStackTrace();
    }
  }

  @Test(dataProvider = "files", dataProviderClass = FolderReader.class)
  public void submitJob(final String name) throws Exception {
    final SubmitJobEndpoint submitJobObj = new SubmitJobEndpoint();
    String submitJobId = null;
    try {
      final BaseClass obj = new BaseClass();
      obj.getPropValues();
      submitJobId = submitJobObj.submitJob(name.toString(), BaseClass.queue,
      BaseClass.config, BaseClass.type);
  System.out.println("Job Id : " + submitJobId);
  Assert.assertNotNull(submitJobId, "Job creation failed");
} catch (final InvalidKeyException e) {
  e.printStackTrace();
} catch (final NoSuchAlgorithmException e) {
  e.printStackTrace();
} catch (final ClientProtocolException e) {
  e.printStackTrace();
} catch (final URISyntaxException e) {
  e.printStackTrace();
} catch (final IOException e) {
  e.printStackTrace();
}

final JobDetailEndpoint JobDetailObj = new JobDetailEndpoint();

String status = null;

while (true) {
  Thread.sleep(15000);
  status = JobDetailObj.GetJob(submitJobId);
  if (status.equalsIgnoreCase("FINISHED")
      || status.equalsIgnoreCase("FAILED")
      || status.equalsIgnoreCase("SPOOLED")) {
    break;
  }
  System.out.println("Output :: " + status);
}

if (status.equalsIgnoreCase("SPOOLED")) {
  Assert.assertEquals(status.toUpperCase(), "SPOOLED",
      "Email creation failed");
} else {
  Assert.assertEquals(status.toUpperCase(), "FINISHED",
      "Email creation failed");

  Map<String, List<String>> Scenario = ExcelReader.excelReader();
  String scenarioName = FilenameUtils.removeExtension(name);
  Assert.assertNotNull(Scenario.get(scenarioName),
      "Test is not enabled in xls");

  if (Scenario.get(scenarioName).get(1).equalsIgnoreCase("email")) {
    Double comparisonResult = GetMail.compareMails(scenarioName);
    Assert.assertNotNull(comparisonResult,
        "GeneratedMail or BaselineMail does not exist | ");
    Assert.assertTrue((comparisonResult) == 100,
        "Generated mail content is not the same | ");
  }
}

您可以共享该类的代码吗?@juherr-已经添加了该类代码。您可以共享数据提供程序的代码吗?为什么不呢,基类也是。@juherr-已经添加了数据提供程序和基类代码,但只是想知道基类代码对您的分析有何用处?
BaseClass
经常使用配置方法并可以修改行为。您可以共享类的代码吗?@juherr-已经添加了类代码。您可以共享数据的代码吗供应商?为什么不呢?基类也是。@juherr-已经添加了数据提供程序和基类代码,但只是想知道基类代码对您的分析有何用处?
BaseClass
通常有配置方法,可以修改行为。
public class SubmitJobTest extends BaseClass implements ITest {

  private String name;

  @BeforeSuite
  public void generateXML() {
    try {
      XMLGenerator.mapper();
    } catch (ValidityException e) {      
      e.printStackTrace();
    } catch (ParsingException e) {      
      e.printStackTrace();
    } catch (IOException e) {      
      e.printStackTrace();
    }
  }

  @Test(dataProvider = "files", dataProviderClass = FolderReader.class)
  public void submitJob(final String name) throws Exception {
    final SubmitJobEndpoint submitJobObj = new SubmitJobEndpoint();
    String submitJobId = null;
    try {
      final BaseClass obj = new BaseClass();
      obj.getPropValues();
      submitJobId = submitJobObj.submitJob(name.toString(), BaseClass.queue,
      BaseClass.config, BaseClass.type);
  System.out.println("Job Id : " + submitJobId);
  Assert.assertNotNull(submitJobId, "Job creation failed");
} catch (final InvalidKeyException e) {
  e.printStackTrace();
} catch (final NoSuchAlgorithmException e) {
  e.printStackTrace();
} catch (final ClientProtocolException e) {
  e.printStackTrace();
} catch (final URISyntaxException e) {
  e.printStackTrace();
} catch (final IOException e) {
  e.printStackTrace();
}

final JobDetailEndpoint JobDetailObj = new JobDetailEndpoint();

String status = null;

while (true) {
  Thread.sleep(15000);
  status = JobDetailObj.GetJob(submitJobId);
  if (status.equalsIgnoreCase("FINISHED")
      || status.equalsIgnoreCase("FAILED")
      || status.equalsIgnoreCase("SPOOLED")) {
    break;
  }
  System.out.println("Output :: " + status);
}

if (status.equalsIgnoreCase("SPOOLED")) {
  Assert.assertEquals(status.toUpperCase(), "SPOOLED",
      "Email creation failed");
} else {
  Assert.assertEquals(status.toUpperCase(), "FINISHED",
      "Email creation failed");

  Map<String, List<String>> Scenario = ExcelReader.excelReader();
  String scenarioName = FilenameUtils.removeExtension(name);
  Assert.assertNotNull(Scenario.get(scenarioName),
      "Test is not enabled in xls");

  if (Scenario.get(scenarioName).get(1).equalsIgnoreCase("email")) {
    Double comparisonResult = GetMail.compareMails(scenarioName);
    Assert.assertNotNull(comparisonResult,
        "GeneratedMail or BaselineMail does not exist | ");
    Assert.assertTrue((comparisonResult) == 100,
        "Generated mail content is not the same | ");
  }
}
public class FolderReader {

  @DataProvider(name = "files")
  public static Object[][] GetFileNames() {
final File folder = new File("//Testing_XML_source");
final File[] listOfFiles = folder.listFiles();
final List<Object[]> list = new ArrayList<Object[]>();
for (final File file : listOfFiles) {
  if (file.getName().toString().endsWith(".xml")) {
    // System.out.println("File : " + file.getName().toString());
    list.add(new Object[] {file.getName().toString()});
  }
}
return list.toArray(new Object[list.size()][]);
  }
}
public class BaseClass {
  public static String queue;
  public static String config;
  public static String type;
  InputStream inputStream;

  public void getPropValues() throws IOException {

try {
  final Properties prop = new Properties();
  final String propFileName = "config.properties";

  inputStream = getClass().getClassLoader().getResourceAsStream(propFileName);

  if (inputStream != null) {
    prop.load(inputStream);
  } else {
    throw new FileNotFoundException(
        "property file '" + propFileName + "' not found in the classpath");
  }

  // get the property value and print it out
  BaseClass.queue = prop.getProperty("queue");
  BaseClass.config = prop.getProperty("config");
  BaseClass.type = prop.getProperty("type");

} catch (final Exception e) {
  System.out.println("Exception: " + e);
} finally {
  inputStream.close();
}
  }

}