Go语言工程实践之测试 | 青训营笔记

63 阅读2分钟
对于大工程而言,一定要有相应的测试过程,为了避免系统上线时,出现各种事故,测试是系统上线非常重要的一环。

测试类型

(1)回归测试 (2)集成测试 (3)单元测试 覆盖率逐步变大,成本逐步降低

3.1 单元测试

对测试单元进行输入,获得输出,与期望进行校对。测试单元包含函数,模块等等。 单元测试,可以保证质量、提升效率

3.1.1 规则

(1)测试文件以_test.go结尾 (2)函数以TestXxx(*testing.T)为命名 (3)初始化逻辑放到TestMain中

3.1.2 例子

大概就是一个输出字符串的函数,output:Jerry,expect:Tom 那么就可以在测试函数中,对两者判断,输出error信息

image.png

3.1.4 assert包

和C++ 的assert感觉差不多

3.1.5 覆盖率

用来评价测试水准 例子:测试成绩函数,大概意思就是把所有可能结果都输出,保证测试的完备性 在实际项目中,一般覆盖率:50% ~ 60%,对于金融类一般要求80%以上 对于测试的分支应该全面覆盖

3.2 单元测试 依赖

幂等:每次重复运行一个单元测试时,结果一定 稳定:单元测试可以在任何时间,任何函数独立运行

3.3 单元测试 文件处理

函数对文件进行读入,替换特定字符串。 需要对这个函数进行测试,但是如果测试文件被删除,就会出现问题。

3.4 单元测试 Mock

对函数进行打桩测试,不依赖本地文件,解决了上述问题。

3.5 基准测试

测试一段程序运行时的性能和CPU的损耗,对热点代码的测试。方法类似于单元测试 例子:随机选择服务器执行函数 基准测试:命名规则:BenchmarkXxx(b *testing.B){}

执行完后,可以看到每次执行CPU的耗时。

3.5.3基准测试 优化

fastrand 代替 rand,在随机场景下

小结:单元测试、Mock测试、基准测试

4 项目实践

开发一个社区话题页面。仅实现一个本地web服务

4.2 需求用例

用户:TopicPage : Topic 和 PostList

4.4 分层结构

image.png 三层:数据层、逻辑层、视图层

4.5 组件工具

Gin高性能go web框架 Go Mod

4.6 index 索引 查询

内容有点难懂,后续再补课吧

4.7 service

要保证服务器的稳定性和可用性,以及并行处理

4.8 控制层

需要构建view业务对象、处理业务错误码

4.9 route层

初始化数据索引、初始化引擎配置、构建路由、启动服务

4.10 运行与测试

总结:后续会pull下代码来看看。