1. 概述

  1. 简介 package 元素

    1. packages
    2. package
    3. exclude
    4. include

2. 背景

  1. 准备

    1. 自动生成了 testng.xml 文件
    2. 已经基本了解了 testng.xml 的结构
  2. 问题

    1. 如何约束测试范围

      1. 假设我有很多的测试用例

        1. 我想一次执行所有
        2. 或者一次执行一部分

3. 环境

  1. ide

    1. idea

      1. 2018.2
  2. 配置文件

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

    1. com.test01.Test1
    2. com.test02.Test2
    3. com.test03.Test3
  4. 约定

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

4. 场景

1. 场景1: 我想执行所有测试类

  1. 概述

    1. 执行所有测试类
  2. 配置文件

     <suite name="All Test Suite">
    <test verbose="2" preserve-order="true" name="test 1">
    <packages>
    <package name="com.test01" />
    <package name="com.test02" />
    <package name="com.test03" />
    </packages>
    </test>
    </suite>
  3. 解释

    1. packages

      1. 概述

        1. 包的根元素
      2. 本质

        1. 就是个 容器类元素

          1. 告诉 testng, 这下面都是 package
          2. 感觉这么设计, 可能是为了效率吧
            1. package, class, group 执行的机制有不同
            2. 来回切换损失性能
            3. 所以尽量集中到一起
      3. 注意

        1. 一个 test 只能有一个

          1. 多了会报错
    2. package

      1. 概述

        1. 包元素
      2. 本质

        1. 指定需要执行的包
      3. 属性

        1. name

          1. 测试类的名字
      4. 其他

        1. 使用

          1. 需要几个包, 直接写几个包就行了

2. 场景2: 要执行的包有点多, 我能不能偷个懒

  1. 概述

    1. 执行所有测试类
    2. 想偷懒
  2. 配置文件

     <suite name="All Test Suite">
    <test verbose="2" preserve-order="true" name="test 1">
    <packages>
    <package name="com.*" />
    </packages>
    </test>
    </suite>
  3. 解释

    1. package

      1. 概述

        1. 这里使用了 正则
      2. com.*

        1. 正则

          1. 用 正则 匹配了 包名
        2. 注意
          1. testng 没有 通配符

            1. 没有 wildcard

3. 场景3: 要执行的包有点多, 但我又不想执行所有的包

  1. 概述

    1. 执行大部分测试
    2. 但有那么些类, 我又不想执行
  2. 配置文件

     <suite name="All Test Suite">
    <test verbose="2" preserve-order="true" name="test 1">
    <packages>
    <package name="com.*" >
    <exclude name="com.test03" />
    </package>
    </packages>
    </test>
    </suite>
  3. 解释

    1. exclude

      1. 概述

        1. 黑名单机制

          1. 名单里的 包, 不会再执行

4. 场景4: 要执行的包有点多, 但我又不想执行所有的包

  1. 概述

    1. 执行少部分测试

      1. 好像和上次又有那么点不同
  2. 配置文件

     <suite name="All Test Suite">
    <test verbose="2" preserve-order="true" name="test 1">
    <packages>
    <package name="com.*" >
    <include name="com.test03" />
    </package>
    </packages>
    </test>
    </suite>
  3. 解释

    1. include

      1. 概述

        1. 白名单机制

          1. 只会执行 白名单里 的包
        2. 正则
      2. include 和 exclude 都支持正则
      3. testng 不支持通配符
        1. wildcard
    2. 其他
      1. 在同一个 package 下, 最好不要和 exclude 混用
      2. include 和 exclude 都是支持正则的

5. 一些问题

  1. 概述

    1. 想到的一些问题

1. 问题1: 一个类同时出现在多个 package标签 里, 执行几次

  1. 场景

    1. 同一个 包
    2. 出现在了 多个 package 元素里
  2. 结果

    1. 包里的测试方法, 只执行一次

2. 问题2: 连续两次 include 相同内容

  1. 场景

    1. 同一个类, include 两次
  2. 结果

    1. 包里的测试方法, 只执行一次

3. 问题3: 连续两次 exclude 相同内容

  1. 场景

    1. 同一个类, exclude 两次
  2. 结果

    1. 包里方法不执行
    2. 测试正常执行

4. 问题4: 先 include 再 exclude

  1. 场景

    1. 同一个包, 先 include 再 exclude
  2. 结果

    1. 包被 exclude
    2. 用例正常执行

5. 问题5: 先 exclude 再 include

  1. 场景

    1. 同一个包, 先 exclude 再 include
  2. 结果

    1. 包被 exclude

      1. 感觉是 exclude 后, 无法再 include 回来
    2. 用例正常执行

6. 结论

  1. 相同操作, 多次执行

    1. 只算执行一次
  2. include 和 exclude 同时存在
    1. exclude 优先级高
  3. 实战建议
    1. 先想清楚, 自己需要什么样的范围

      1. 感觉可以作为注释写在配置里
    2. 先 include, 再 exclude
      1. 简化逻辑, 增强可读性
      2. 只对同一个包 做最多一次 include 和 一次 exclude

ps

  1. 文档和参考

    1. 文档

      1. 官方文档

        1. 老实说就一个页面
        2. 从头拉到尾
          1. 东西是都讲了, 但是只能当个字典来查

            1. 你需要有些基础才行
            2. 但是基础怎么来呢
          2. 好些东西还是没讲
    2. 书籍

      1. testng beginner's guide

        1. 书不错

          1. 13 年的
          2. 没有中文
    3. dtd

      1. testng.xml 的 dtd 文件

        1. 概述

          1. xml 的描述文件
          2. 正确性没问题
            1. 毕竟 testng 就是按照这个来解析的
          3. 注释上也相对清晰
            1. 可以和 官网 或者 参考书 形成互补
          4. 当然看起来有点麻烦
            1. 需用知道 dtd 的语法
        2. 内容

          1. 元素

            1. 元素的意义
            2. 元素的属性
            3. 元素的子元素

最新文章

  1. MySQL Database on Azure新功能
  2. ubuntu12.04 gitlab搭建
  3. 替换CENTOS自带的yum源为网易163镜像源
  4. mysql中profile的使用
  5. Leetcode 21 Merge Two Sorted Lists 链表
  6. SDRAM 学习(三)之command
  7. 【Matlab】随机游走产生图像效果
  8. Java设计模式(学习整理)---单例模式
  9. window7下statsvn统计代码量
  10. JS正则表达式大全【转】
  11. Cocos2d-x 游戏存档
  12. NYoj289苹果(0-1背包)
  13. 运维面试题之linux基础
  14. js 获取get参数
  15. ubuntu下VS code如何调试C++代码
  16. Java-Method类常用方法详解
  17. 「CodeForces - 717E」Paint it really, really dark gray (dfs)
  18. 最近使用Navicat for MySQl访问远程mysql数据库,出现报错,显示“2003- Can&#39;t connect MySQL Server on &#39;localhost&#39;(10038)“。
  19. Single Number leetcode java
  20. hdu 2289 要二分的杯子

热门文章

  1. 【你不知道的javaScript 上卷 笔记6】javaScript中的对象相关内容
  2. linux 6.9 补丁修补漏洞
  3. 备份Sql Server中的某些表
  4. RN开发-windows环境搭建
  5. 从零DIY机械键盘/主控方案
  6. vm virtualbox 里的ubuntu挂载windows的文件夹
  7. [ C++ ] 常用位运算技巧
  8. 栈的简单应用之中缀表达式转后缀表达式(C语言实现逆波兰式)
  9. java.awt.Font
  10. unity的一些特殊目录