软件测试 | 青训营笔记

15 阅读1分钟

测试

测试的重要性:关系着系统的质量,是避免事故的最后一道屏障

三种类型

  • 回归测试:测试某个功能
  • 集成测试:测试某个接口
  • 单元测试:测试单独的函数模块

单元测试

  • image.png
  • 提升效率:定位问题的效率变快

单元测试的规则

  • 所有测试文件以 _test.go 结尾
  • 测试函数 func TestXxx(xxx *testing.T)
  • 初始化逻辑放到 TestMain() 中(测试前的准备工作和测试后的资源释放等)
  • func TestTest(t *testing.T) {...}
    
  • 覆盖率:一段代码有几行被测试过(跑到过)

    func Test2(t *testing.T){
        isPass := IsBiggerThan100(120)
        assert.Equal(t, true, isPass) //一般覆盖率为50%~60%
    }
    
  • 测试分支应不重不漏、相互独立

  • 测试单元粒度得足够小,函数职责单一(单一职责原则)

依赖

image.png - 幂等:重复运行一个测试的结果与之前相同 - 稳定:单元测试能在任何时间、任何函数中运行

MOCK测试

github.com/bouk/monkey

  • 作用:模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与测试边界以外的对象隔离开(有外部依赖时需要中Mock测试测试稳定性)
  • 快速Mock函数

    • 为一个函数打桩
    • 为一个方法打桩
  • image.png

基准测试

  • 作用:测试运行时的性能和cpu的损耗
  • 使用方法类似于单元测试
  • func BenchXxx(xx *testing.B){
        ...
        b.ResetTimer()  //耗时
    }
    

项目实践

步骤

  • 需求设计(软件工程导论的内容)

    • 需求获取->需求分析->编写规约->需求验证
    • 用例分析(用例分析图)
    • 实体模型(ER图)
    • 数据流图、数据字典
    • UML图
    • 分层结构:数据层、逻辑层、视图层
  • 项目开发

  • 测试运行