Java自动化测试框架-10 - TestNG之测试结果篇

1.-测试结果

1.1-成功,失败和断言

测试被认为是成功的,若是它不引起任何异常完成,仍是它扔的预期异常(请参阅文档expectedExceptions属性上找到的@Test注释)。html

您的测试方法一般由可能引起异常的调用或各类断言(使用Java“ assert”关键字)组成。“断言”失败将触发AssertionErrorException,这反过来会将方法标记为失败(若是未看到断言错误,请记住在JVM上使用-ea)。java

这是一个示例测试方法:框架

/**
 * @author 北京-宏哥
 * 
 * Java自动化测试框架-10 - TestNG之 测试结果篇
 *
 * 2019年11月9日
 */
@Test
public void verifyLastName() {
  assert "Beust".equals(m_lastName) : "Expected name Beust, for" + m_lastName;
}

TestNG还包括JUnit的Assert类,该类使您能够对复杂对象执行断言:ide

/**
 * @author 北京-宏哥
 * 
 * Java自动化测试框架-10 - TestNG之 测试结果篇
 *
 * 2019年11月9日
 */
import static org.testng.AssertJUnit.*;
//...
@Test
public void verify() {
  assertEquals("Beust", m_lastName);
}

请注意,上面的代码使用静态导入,以便可以使用 assertEquals方法而没必要在其类以前添加前缀。测试

1.2-记录和结果

测试运行的结果在启动SuiteRunner时指定的目录中的index.html文件中建立。该文件指向包含整个测试运行结果的各类其余HTML和文本文件。ui

使用TestNG与监听器和报告器生成本身的报告很是容易:this

侦听器实现org.testng.ITestListener接口,并在测试开始,经过,失败等时实时通知。spa

报告程序实现org.testng.IReporter接口,并在TestNG已运行全部套件时收到通知。IReporter实例接收描述整个测试运行的对象列表。命令行

例如,若是要生成测试运行的PDF报告,则无需实时通知测试运行,所以您应该使用IReporter。若是您想编写测试的实时报告,例如带有进度条的GUI或在每次测试被调用时显示点(“。”)的文本报告程序(以下所述),则ITestListener是您的最好的选择。code

1.2.1-记录侦听器

这是一个显示“。”的侦听器。对于每一个经过的测试,对于每一个失败,都为“ F”,对于每一个跳过均为“ S”:

/**
 * @author 北京-宏哥
 * 
 * Java自动化测试框架-10 - TestNG之 测试结果篇
 *
 * 2019年11月9日
 */
public class DotTestListener extends TestListenerAdapter {
  private int m_count = 0;
 
  @Override
  public void onTestFailure(ITestResult tr) {
    log("F");
  }
 
  @Override
  public void onTestSkipped(ITestResult tr) {
    log("S");
  }
 
  @Override
  public void onTestSuccess(ITestResult tr) {
    log(".");
  }
 
  private void log(String string) {
    System.out.print(string);
    if (++m_count % 40 == 0) {
      System.out.println("");
    }
  }
}

在此示例中,我选择扩展TestListenerAdapter,该方法使用空方法实现ITestListener,所以我没必要从我不感兴趣的接口中覆盖其余方法。您能够根据须要直接实现该接口。

这是我调用TestNG来使用此新侦听器的方法:

java -classpath testng.jar;%CLASSPATH% org.testng.TestNG -listener org.testng.reporters.DotTestListener test\testng.xml

和输出:

........................................
........................................
........................................
........................................
........................................
.........................
===============================================
TestNG JDK 1.5
Total tests run: 226, Failures: 0, Skips: 0
===============================================

请注意,当您使用-listener时,TestNG将自动肯定您要使用的侦听器的类型。

1.2.2-记录记者

该org.testng.IReporter接口只有一个方法:

public void generateReport(List<ISuite> suites, String outputDirectory)

当全部套件都已运行时,TestNG将调用此方法,您能够检查其参数以访问刚刚完成的运行中的全部信息。

1.2.3-JUnitReports

TestNG包含一个侦听器,该侦听器获取TestNG结果并输出一个XML文件,而后能够将其馈送到JUnitReport。 这是一个示例,以及建立此报告的ant任务:

<target name="reports">
  <junitreport todir="test-report">
    <fileset dir="test-output">
      <include name="*/*.xml"/>
    </fileset>
  
    <report format="noframes"  todir="test-report"/>
  </junitreport>
</target>

注意:JDK 1.5和JUnitReports当前不兼容,没法使用框架版本,所以您须要指定“ noframes”才能使其正常工做。

1.2.4-Reporter API

若是须要记录应在生成的HTML报告中显示的消息,则能够使用org.testng.Reporter类:

Reporter.log (“已呼叫M3” );

     

1.2.5-XML报告

TestNG提供了一个XML报告程序,用于捕获JUnit报告中不提供的TestNG特定信息。当用户的测试环境须要使用JUnit格式没法提供的具备TestNG特定数据的XML结果时,此功能特别有用。记者能够经过使用命令行注入TestNG的-reporter。

这是一个示例用法:-reporter org.testng.reporters.XMLReporter:generateTestResultAttributes = true,generateGroupsAttribute = true。

下表详细介绍了能够传递的全部选项。确保使用:

: -将报告者名称与其属性分开

= -分隔属性的键/值对

, -分隔多个键/值对

如下是此类报告器的输出示例:

<testng-results>
  <suite name="Suite1">
    <groups>
      <group name="group1">
        <method signature="com.test.TestOne.test2()" name="test2" class="com.test.TestOne"/>
        <method signature="com.test.TestOne.test1()" name="test1" class="com.test.TestOne"/>
      </group>
      <group name="group2">
        <method signature="com.test.TestOne.test2()" name="test2" class="com.test.TestOne"/>
      </group>
    </groups>
    <test name="test1">
      <class name="com.test.TestOne">
        <test-method status="FAIL" signature="test1()" name="test1" duration-ms="0"
              started-at="2007-05-28T12:14:37Z" description="someDescription2"
              finished-at="2007-05-28T12:14:37Z">
          <exception class="java.lang.AssertionError">
            <short-stacktrace>
              <![CDATA[
                java.lang.AssertionError
                ... Removed 22 stack frames
              ]]>
            </short-stacktrace>
          </exception>
        </test-method>
        <test-method status="PASS" signature="test2()" name="test2" duration-ms="0"
              started-at="2007-05-28T12:14:37Z" description="someDescription1"
              finished-at="2007-05-28T12:14:37Z">
        </test-method>
        <test-method status="PASS" signature="setUp()" name="setUp" is-config="true" duration-ms="15"
              started-at="2007-05-28T12:14:37Z" finished-at="2007-05-28T12:14:37Z">
        </test-method>
      </class>
    </test>
  </suite>
</testng-results>

该报告程序与其余默认侦听器一块儿注入,所以默认状况下您能够得到这种类型的输出。侦听器提供了一些属性,能够对报告器进行调整以知足您的需求。下表包含这些属性的列表,并附有简短说明:

Property Comment Default value
outputDirectory String indicating the directory where should the XML files be output. The TestNG output directory
timestampFormat Specifies the format of date fields that are generated by this reporter yyyy-MM-dd'T'HH:mm:ss'Z'
fileFragmentationLevel An integer having the values 1, 2 or 3, indicating the way that the XML files are generated:
   1 - will generate all the results in one file.
   2 - each suite is generated in a separate XML file that is linked to the main file.
   3 - same as 2 plus separate files for test-cases that are referenced from the suite files.
1
splitClassAndPackageNames This boolean specifies the way that class names are generated for the <class> element. For example, you will get <class class="com.test.MyTest"> for false and <class class="MyTest" package="com.test"> for true. false
generateGroupsAttribute A boolean indicating if a groups attribute should be generated for the <test-method> element. This feature aims at providing a straight-forward method of retrieving the groups that include a test method without having to surf through the <group> elements. false
generateTestResultAttributes A boolean indicating if an <attributes> tag should be generated for each <test-method> element, containing the test result attributes (See ITestResult.setAttribute() about setting test result attributes). Each attribute toString() representation will be written in a <attribute name="[attribute name]"> tag. false
stackTraceOutputMethod Specifies the type of stack trace that is to be generated for exceptions and has the following values:
   0 - no stacktrace (just Exception class and message).
   1 - a short version of the stack trace keeping just a few lines from the top
   2 - the complete stacktrace with all the inner exceptions
   3 - both short and long stacktrace
2
generateDependsOnMethods Use this attribute to enable/disable the generation of a depends-on-methods attribute for the <test-method> element. true
generateDependsOnGroups Enable/disable the generation of a depends-on-groups attribute for the <test-method> element. true

为了配置此报告程序,能够在命令行中使用-reporter选项,也能够将Ant 任务与嵌套的<reporter>元素一块儿使用。对于其中的每一个,您都必须指定org.testng.reporters.XMLReporter类。请注意,您没法配置内置报告器,由于该报告器仅使用默认设置。若是只须要

带有自定义设置的XML报告,则必须使用两种方法之一手动添加它并禁用默认侦听器。

1.2.6-TestNG退出代码

当TestNG完成执行时,它将退出并返回代码。

能够检查此返回码以了解故障的性质(若是有的话)。

下表总结了TestNG当前使用的不一样退出代码。

FailedWithinSuccess Skipped Failed Status Code Remarks
No No No 0 Passed tests
No No Yes 1 Failed tests
No Yes No 2 Skipped tests
No Yes Yes 3 Skipped/Failed tests
Yes No No 4 FailedWithinSuccess tests
Yes No Yes 5 FailedWithinSuccess/Failed tests
Yes Yes No 6 FailedWithinSuccess/Skipped tests
Yes Yes Yes 7 FailedWithinSuccess/Skipped/Failed tests

2.-小结

  好了,今天关于TestNG之测试结果,就分享到这里。

相关文章
相关标签/搜索