• testNG官方文档翻译-5 测试方法,测试类和测试组


    5.1 - 测试方法
    测试方法是被 @Test注解的方法。这些方法的返回值会被忽略,除非在testng.xml中将allow-return-values设置为true。

    <suite allow-return-values="true">
    or
    <test allow-return-values="true">
    

    5.2 - 测试组
    使用TestNG可以执行一些复杂的测试组。这意味着你不仅可以声明一些测试方法属于某个组,还可以定义一些组属于另一个组。然后TestNG将会被触发执行,并且执行被包含的组排除被排除的组。这个特点让我们能方便的分割你的测试方法,并且可以在不再次编译的前提下连续执行两个不同的测试组。
    组是在testng.xml文件中定义的,它可以被放置在test或者suite标签下。被定义在suite标签下的组将会作用于所有的test。需要注意的是组在这些标签下是累加的,如果你在suite中定义了一个组“a”在test中定义了一个组“b”,那么“a”和“b”都会被包含。
    比如,一般一个suite中至少会有两类test:

    • Check-in tests:这些测试需在你每次提交新代码之前执行。它们通常需要快速执行,用来确保软件基本功能未被破坏。
    • Functional tests:这些测试需要覆盖你的软件中的所有功能并且至少要一天执行一次,而在理想情况下应该不间断连续执行。

    通常,check-in 测试是functional测试的子集。在TestNG中,使用测试组可以很直观的定义上述需求。例如,你可以将你的整个测试类声明为属于“functest”这个组,另外将一部分测试方法声明为属于“checkintest”组:

    public class Test1 {
      @Test(groups = { "functest", "checkintest" })
      public void testMethod1() {
      }
     
      @Test(groups = {"functest", "checkintest"} )
      public void testMethod2() {
      }
     
      @Test(groups = { "functest" })
      public void testMethod3() {
      }
    }
    

    用以下方法触发TestNG

    <test name="Test1">
      <groups>
        <run>
          <include name="functest"/>
        </run>
      </groups>
      <classes>
        <class name="example1.Test1"/>
      </classes>
    </test>
    
    

    将会执行类中的所有方法,但是如果用checkintest组触发它,将只会执行方法testMethod1()和testMethod2()。
    下面是另一个使用了正则表达式例子。假设部分测试方法不能在Linux上运行,你的测试类如下所示:

    @Test
    public class Test1 {
      @Test(groups = { "windows.checkintest" })
      public void testWindowsOnly() {
      }
     
      @Test(groups = {"linux.checkintest"} )
      public void testLinuxOnly() {
      }
     
      @Test(groups = { "windows.functest" )
      public void testWindowsToo() {
      }
    }
    

    你可以使用以下testng.xml文件运行仅在Windows上可行的方法:

    <test name="Test1">
      <groups>
        <run>
          <include name="windows.*"/>
        </run>
      </groups>
     
      <classes>
        <class name="example1.Test1"/>
      </classes>
    </test>
    

    注意:TestNG用的是正则表达式,而不是wildmats。注意这两者的不同(比如“任意字符”是通过“.*“匹配的,而不是”*“)。
    方法组:
    你也可以单独的包含或排出一些方法(通过方法名):

    <test name="Test1">
      <classes>
        <class name="example1.Test1">
          <methods>
            <include name=".*enabledTestMethod.*"/>
            <exclude name=".*brokenTestMethod.*"/>
          </methods>
         </class>
      </classes>
    </test>
    

    这样你就可以方便的在不再次编译的情况下停用一个测试方法,但是我不建议这样使用。因为如果你开始重构你的java代码,上述方法可能会使你的测试框架被破坏。(在标签中被使用的正则表达式可能不误再匹配你的测试方法)。

    5.3 组中组
    组中也可以包含其他组。这些组被称为“MetaGroups”。比如,你也许想要定义一个包含“checkintest”组和“functest”组的“all”组。“functest”组将包含组“windows”和“linux”但“checkintest”组仅包含组”windows“,这些属性将会这样定义:

    <test name="Regression1">
      <groups>
        <define name="functest">
          <include name="windows"/>
          <include name="linux"/>
        </define>
      
        <define name="all">
          <include name="functest"/>
          <include name="checkintest"/>
        </define>
      
        <run>
          <include name="all"/>
        </run>
      </groups>
      
      <classes>
        <class name="test.sample.Test1"/>
      </classes>
    </test>
    

    5.4 排除组
    TestNG可以包含组,也可以排除它们。
    例如,一次临时更改经常可能导致部分方法执行失败,但你又没有时间立即修复问题。然而,你又想要干净的运行functional 测试,所以你需要停用这些失败方法,但仍保留在那里,因为你以后会再次运行。
    解决这个问题的一个简单方式是创建一个“broken”组,将这些失败方法包含在该组中。比如在下面这个例子中,我知道testMethod2()这个方法现在是失败的所以我将它停用:

    @Test(groups = {"checkintest", "broken"} )
    public void testMethod2() {
    }
    

    我需要做的就是在run中排除这个组:

    <test name="Simple example">
      <groups>
        <run>
          <include name="checkintest"/>
          <exclude name="broken"/>
        </run>
      </groups>
      
      <classes>
        <class name="example1.Test1"/>
      </classes>
    </test>
    

    这样,我将能得到一个干净的测试,同时能够保持对失败的需要以后修复的测试方法的追踪。
    注意:你也可以简单的在 @Test和 @Before/After注解的方法上使用“enabled”属性来停用单个测试方法。

    5.5 部分组
    你可以在类级别定义组,然后在方法级别添加别的组:

    @Test(groups = { "checkin-test" })
    public class All {
     
      @Test(groups = { "func-test" )
      public void method1() { ... }
     
      public void method2() { ... }
    }
    

    在上面的类中,method2()是定义在类级别的 组“checkin-test”的一部分,而method1()同时属于组“checkin-test”和“func-test”。

    5.6 参数
    测试方法并非必须是非参数的。你可以在每一个测试方法上使用任意数量的参数,TestNG使用 @Parameters注解正确传递参数。
    有两种方法来设置参数:用testng.xml文件或者以编程方式。
    5.6.1 来自testng.xml的参数

  • 相关阅读:
    Namenode主节点停止报错 Error: flush failed for required journal
    IntelliJ IDEA2018.3 最新破解方法
    idea 中解决maven 包冲突的问题(maven helper)
    java中的守护线程
    synchronized锁住的是代码还是对象
    maven package,clean,install,compile命令
    设计模式——装饰者模式
    设计模式——观察者模式
    com.alibaba.fastjson.JSON对类对象的序列化与反序列化
    java8 Stream使用案例
  • 原文地址:https://www.cnblogs.com/suntingme/p/6582343.html
Copyright © 2020-2023  润新知