Java - Test - TestNG: testng.xml 元素 class

1. 概述

  1. class 相关的元素
    1. classes
    2. class
    3. methods
    4. exclude
    5. include

2. 背景

  1. 准备

    1. 了解了 package 及其子元素
  2. 问题

    1. 我只想测某几个特定的类
    2. 我还想对 类 的方法做过滤

3. 环境

  1. ide

    1. idea
      1. 2018.2
  2. 配置文件

    1. testng.xml
  3. 测试包结构

    1. com.test01.Test1
      1. method101
      2. method102
    2. com.test02.Test2
      1. method201
      2. method202
    3. com.test03.Test3
      1. method301
      2. method302
  4. 约定

    1. 配置文件, 我只截取 suite 以下的部分

4. 场景

1. 场景1: 执行某些类

  1. 概述

    1. 执行某些测试类
      1. 当然, 这个使用 package 配合 include 也能实现
  2. 配置文件

    <test name="Timed Test">
        <classes>
            <class name="com.test01.Test1"/>
            <class name="com.test02.Test2"/>
            <class name="com.test03.Test3"/>
        </classes>
    </test>
    
  3. 解释

    1. classes

      1. 概述

        1. 类的根元素
      2. 本质

        1. 容器元素
          1. 本身没什么属性
          2. 作为 class 元素的父元素
      3. 注意

        1. 一个 test 里只能有一个
          1. 多了会报错
    2. class

      1. 概述

        1. 类元素
      2. 本质

        1. 测试类信息
      3. 属性

        1. name
          1. 类名称
        2. 其他
          1. 后面还有, 后面再说
  4. 疑问

    1. 问题1: 我想一次测好多 class
      1. 方案1
        1. 使用 package
      2. 方案2
        1. 用一个个的 class 元素
        2. class 的 name 属性不支持正则
          1. 所以...
          2. 感觉有点小不合理
          3. 好了, 我们说下一个问题

2. 场景2: 我想执行测试类里的某些特定方法

  1. 概述

    1. 执行某些测试类
    2. 精确指定 方法
  2. 配置文件

    <test name="Timed Test">
        <classes>
            <class name="com.test01.Test1">
                <methods>
                    <include name="method.*"/>
                    <exclude name="method.*2"/>
                </methods>
            </class>
        </classes>
    </test>
    
  3. 解释

    1. methods

      1. 概述

        1. 方法的根元素
        2. 但并没有 方法子元素
      2. 本质

        1. 一个容器
    2. include & exclude

      1. 概述
        1. 这个在 package 里说过, 就不说了
        2. 他们当然支持正则

5. 问题

1. 问题1: 一个类同时出现在 多个class元素里

  1. 场景

    1. 同一个 类
    2. 在 class 出现多次
  2. 结果

    1. 只执行一次

2. 问题2: 方法 include 与 exclude

  1. 场景

    1. 同一个 方法
    2. 被 include 和 exclude 多次操控
  2. 结果

    1. 同 package
      1. 相同操作, 最多执行一次
      2. include 和 exclude 都有的时候, exclude 优先级高

3. 问题3: class 与 package 冲突

  1. 场景

    1. 类被 package exclude 了
    2. 类被 classes 包含了
  2. 结果

    1. 先 package 后 class

      1. 正常执行
    2. 先 classes 后 packages

      1. 会出问题
        1. packages 必须在 classes 前面
        2. 这些元素, 一个 test 只能有一个
    3. 如果同时 include

      1. 正常执行
      2. 不会重复

6. 结论

  1. 一个 suite 里, 可以有 多个 test
  2. 一个 test 里, 只能有一个 groups, packages, classes
    1. 而且得有顺序
  3. groups, packages, classes 里
    1. 元素的 include 和 exclude 还是很好判断的
    2. 但是跨元素的话
      1. 前面元素的 exclude 可能会失效
      2. 多个元素的 include 不会导致测试多次执行

ps

  1. 这个跨元素的一些矛盾操作, 感觉需要考虑一下
    1. 跨 test 还没考虑过呢
posted @ 2019-11-11 17:55  轩辕拾銉  阅读(647)  评论(2编辑  收藏  举报