测试工具

  1. 概述

    1. 使用 idea 自带的 code coverage 工具
  2. 背景

    1. 了解 白盒测试用例设计 和 测试覆盖率 之后, 大概就需要 实践 了
    2. 实践的话, 还是需要 工具 来检验效果
  3. 工具选取

    1. 选项
      1. JaCoCo
      2. IDEA Code Coverage
    2. 结果
      1. 两个都想试试

        1. 先看看 IDEA CC, 这个比较简单
        2. JaCoCo 感觉更加复杂
          1. 指标
          2. 使用的场景都更加复杂
      2. 先讲 IDEA Code Coverage

        1. 简单
        2. Idea 自带, 集成方便

1. 准备

  1. 理论基础

    1. 白盒测试用例设计
    2. 测试覆盖率
  2. 环境

    1. os
      1. win 10
    2. ide
      1. idea 2018.2
    3. 组件
      1. java
        1. jdk8
      2. testng
        1. 6.14.3
      3. maven
        1. 3.6.0
  3. 代码

    1. maven architecture
      1. quickstart
  4. 其他

    1. idea 插件

      1. coverage
        1. 这个一定要有
        2. 有了, 一定要打开
        3. idea 添加插件, 我就不讲了
    2. testng 的配置文件

      1. 这个我也不细讲了
        1. 自动生成配置文件的插件, 我之前讲过
        2. 配置文件里一些主要的配置, 我也讲过

2. 触发

  1. 概述

    1. 通过 执行测试, 触发 Coverage 插件
  2. 步骤

    1. 执行测试
      1. 进入某个测试类
        1. 比如 maven 工程自带的 AppTest 类
      2. 执行测试
        1. 在 类 中右键
        2. 选择 'Run Apptest with Coverage'
      3. 当然, 执行方式有很多
        1. 方法
        2. 配置文件
  3. 结果

    1. 测试执行完毕
    2. 默认在 idea 右边, 弹出一个 coverage 的插件
  4. 问题

    1. 如果没有出现怎么办
      1. 这个需要确认这些东西
        1. 插件是否下载
        2. 插件是否激活
        3. coverage 视图是否激活
          1. File > Settings > Build, Execution, Deployment > Coverage
            1. Active coverage view 选项
              1. 记得打钩

3. Coverage 视图简单介绍

  1. 概述

    1. 简单说下视图里的内容
      1. 其实没啥好说的, 操作两下, 就明白了
  2. 标签

    1. 标题

      1. 你执行 测试, 所对应的 Configuration
        1. 这意味着, 你又可以有地方调参数了...
    2. 左边一列的操作

      1. 向上
      2. 平铺展示
      3. coverage 视图焦点, 控制代码展示窗口
      4. 代码展示窗口, 控制 coverage 视图焦点,
      5. 生成报告
        1. 选择 文件路径, 生成报告
        2. 报告内容, 并不会很多
        3. 自己看看, 就明白了了
      6. 关闭视图
    3. 表格内容

      1. 元素

        1. 包或者文件
      2. class, %

        1. 类覆盖率
      3. method, %

        1. 方法覆盖率
      4. line, %

        1. 行覆盖率
    4. 表格交互

      1. 单击包
        1. 进入 包内, 并展示包内覆盖率
      2. 单击类
        1. 代码会跳转的类, 并且会聚焦到没有覆盖的位置

4. 代码区域

  1. 概述

    1. 执行 带覆盖率的测试 后, 代码区域也会发生变化
    2. 我这边默认是的 coverage 模式是 simpling
      1. 所以我先按照这个讲...
  2. 代码窗口

    1. 侧边栏
      1. 色块

        1. 红色
          1. 没有覆盖
        2. 绿色
          1. 覆盖至少一次
        3. 黄色
          1. 条件覆盖不充分
        4. 鼠标点击颜色
          1. 会出现 浮动的小窗
          2. 没啥前端背景, 所以这些东西准确叫啥, 真的让我很为难
      2. 浮动小窗

        1. 顶部控件
          1. 上下
            1. 在色块之间上下移动
          2. 灰色文件夹
            1. 暂时不可用, 后来再讲
          3. 字节码展示
            1. 开启新的小窗口, 展示 字节码
              1. 高端功能暂时用不了
          4. 颜色设置
            1. 这个暂时用不了
              1. 默认颜色挺好的
          5. 红叉
            1. 这个不是退出标签
            2. 这个是清楚这一轮的覆盖率数据
              1. 点的时候请注意
            3. 退出的话, 直接鼠标在别处点一下, 就行了

5. Project 区域

  1. 概述

    1. Project 区域的覆盖率展示
  2. 惊喜

    1. 眼睑的同学, 已经有了新的发现
      1. Project 栏里的包树形图, 右侧已经出现了一些关于 覆盖率的信息
        1. package
          1. 类覆盖率
          2. 行覆盖率
        2. class
          1. 方法覆盖率
          2. 行覆盖率
  3. 疑问

    1. 问题1: 我不想要这东西, 有办法吗?
      1. 当然有啦
        1. 路径
          1. ctrl + alt + f6
          2. Analyze > show coverage data
        2. 操作
          1. 勾选你想要显示 覆盖率的路径
          2. 然后确定

6. configuraion 配置

  1. 概述

    1. 覆盖率这个东西, 也是可以配置的
  2. 路径

    1. 打开 run configuration
    2. 找到你执行测试的那个 configuration
    3. 切换到 coverage tab
  3. 选项说明

    1. choose coverage runner
      1. 现在用 idea
      2. 讲 jacoco 的时候, 应该要换的
    2. sampling & tracing
      1. 模式
        1. 针对 idea 的选项
        2. 其他 runner, 只有 sampling
      2. sampling
        1. 简单模式
          1. 就是上面讲的东西
      3. tracing
        1. 追踪模式
          1. 概述
            1. 会对 判定 做更细致的追踪
          2. 变化
            1. 后面会描述
    3. packages and classes to record coverage data
      1. 概述

        1. 追踪覆盖率的类
      2. 建议

        1. 最好勾选一下
          1. 如果默认的话, 所有的包都会出现在 coverage 那个窗口里
            1. 虽然没 覆盖率, 但是看着好烦的...
  4. tracing 模式的变化

    1. 概述

      1. tracing 模式有所增强
    2. 增强内容

      1. 对 if 的判断, 有了增强
        1. 会统计 if 里 各个条件 真假执行次数
    3. 具体表现

      1. 单击 左侧的色块
        1. if 条件那行, 会有更加明确的信息
    4. 选项: track per test coverage

      1. 概述

        1. 追踪测试方法
      2. 回顾

        1. 之前色块的小弹窗里, 有个不可执行的灰色文件夹, 还记得吗?
      3. 勾选之后

        1. 单击那个 灰色文件夹
          1. 有新弹窗出现
          2. 内容是 执行这个代码的 测试方法
        2. 感觉是个 很不错的功能
  5. 问题

    1. 尝试配置修改中, 我有过多次执行同一个 configuration
      1. 执行完后, 会有一个弹窗
        1. 看得我一脸懵逼
          1. 这玩意是什么鬼, 能设置吗?o
      2. 当然能啦

7. settings 配置

  1. 概述

    1. settings 里的配置
  2. 路径

    1. 开始提到过的一个路径
      1. File > Settings > Build, Execution, Deployment > Coverage
  3. 配置

    1. when new coverage is gathered

      1. 概述

        1. 配置 新的覆盖率 是否聚合
      2. 选项

        1. active coverage view

          1. 概述

            1. 展示 coverage 窗口
          2. 作用

            1. 执行 run test with coverage 时, 展示 coverage 窗口
          3. 这次一定要先讲下面这个...

            1. 首先要窗口出现, 才能出发后面的东西吧
        2. 一个 radio

          1. 选项

            1. show options before applying coverage to the editor
              1. 已经弹出 coverage 视图后, 再次执行, 会弹出一个 选项框
                1. 询问的选项, 就是下面三种
            2. do not apply collected coverage
              1. 丢弃 这次的 代码覆盖率结果
            3. replace active suites with the new one
              1. 丢弃 上次的 代码覆盖率结果
              2. 将 这次的 代码覆盖率结果, 填充到 coverage 窗口
            4. add to the active suites
              1. 保留 上次的 代码覆盖率结果
              2. 将 这次的 代码覆盖率结果, 叠加到 coverage 窗口
          2. 问题

            1. 大部分时候都好用, 但是碰到过几次失灵的情况
              1. 直接用了 选项3
              2. 问题需要我 确认
    2. java coverage

      1. 选项

        1. 不统计 普通类 的默认构造函数
          1. 统计也没啥意义
        2. 不统计 工具类 的私有构造函数
          1. 工具类不需要实例化
            1. 所以通常做一个 私有构造, 防止有开发把这个类实例化
      2. 解释

        1. 这来选项我就翻译一下, 意义就不解释了, 大家应该都懂

ps

  1. ref

    1. Code coverage
      1. 官方文档
        1. 就这一个吧, 其他的基本是自己边尝试边整理
  2. 后续

    1. jacoco
      1. ide
      2. maven
      3. jenkins
  3. 为啥不直接讲 jacoco

    1. jacoco 其实有点复杂
      1. 数据
      2. 配置
    2. idea 简单好理解
    3. 两者有些东西, 本质上是相通的
      1. 理解了简单的 idea, 后面依葫芦画瓢, 学习曲线会更加平滑
  4. 遗漏

    1. 生成的结果报表
      1. 这个不太难, 基本都能看懂
尽量尝试解释清楚; 自己校对能力有限, 如果有错误欢迎指出
原文地址:https://www.cnblogs.com/xy14/p/11920993.html