首页 > 其他分享 >(转)Go test 详解

(转)Go test 详解

时间:2023-01-08 18:11:33浏览次数:48  
标签:测试 testing test 详解 go Go out

原文:https://www.jianshu.com/p/b28595a281ec

Go test 的测试用例形式

测试用例有四种形式:

  • TestXxxx(t *testing.T) // 基本测试用例
  • BenchmarkXxxx(b *testing.B) // 压力测试的测试用例
  • Example_Xxx() // 测试控制台输出的例子
  • TestMain(m *testing.M) // 测试Main函数

Go test 有两种运行模式:

1、本地目录模式,在没有包参数(例如 go testgo test -v)调用时发生。在此模式下,go test 编译当前目录中找到的包和测试,然后运行测试二进制文件。在这种模式下,caching 是禁用的。在包测试完成后,go test 打印一个概要行,显示测试状态、包名和运行时间。

2、包列表模式,在使用显示包参数调用 go test 时发生(例如 go test mathgo test ./... 甚至是 go test .)。在此模式下,go 测试编译并测试在命令上列出的每个包。如果一个包测试通过,go test 只打印最终的 ok 总结行。如果一个包测试失败,go test 将输出完整的测试输出。如果使用 -bench-v 标志,则 go test 会输出完整的输出,甚至是通过包测试,以显示所请求的基准测试结果或详细日志记录。

go test 的变量有哪些?

  • test.short : 一个快速测试的标记,在测试用例中可以使用 testing.Short() 来绕开一些测试
  • test.outputdir : 输出目录
  • test.coverprofile : 测试覆盖率参数,指定输出文件
  • test.run : 指定正则来运行某个/某些测试用例
  • test.memprofile : 内存分析参数,指定输出文件
  • test.memprofilerate : 内存分析参数,内存分析的抽样率
  • test.cpuprofile : cpu分析输出参数,为空则不做cpu分析
  • test.blockprofile : 阻塞事件的分析参数,指定输出文件
  • test.blockprofilerate : 阻塞事件的分析参数,指定抽样频率
  • test.timeout : 超时时间
  • test.cpu : 指定cpu数量
  • test.parallel : 指定运行测试用例的并行数

Go test flag

  • -args
  • -c
  • -exec xprog
  • -i
  • -o file
  • -bench regexp
  • -benchtime t
  • -count n
  • -cover
  • -covermode set,count,atomic
  • -coverpkg pkg1,pkg2,pkg3
  • -cpu 1,2,4
  • -list regexp
  • -parallel n
  • -run regexp
  • -short
  • -timeout d
  • -v
  • -benchmem
  • -blockprofile block.out
  • -blockprofilerate n
  • -coverprofile cover.out
  • -cpuprofile cpu.out
  • -memprofile mem.out
  • -memprofilerate n
  • -mutexprofile mutex.out
  • -mutexprofilefraction n
  • -outputdir directory
  • -trace trace.out

更多中文文档:

什么是单元测试?

单元测试,是一种测试我们的代码逻辑有没有问题,有没有按照我们所期望的来运行,通过它来保证我们的代码质量。

顾名思义,单元测试,大多都是对某一个函数方法进行的测试,以让我们的测试粒度最细。

如何编写单元测试?

go test

可以测试 func TestXxx(*testing.T)

子测试

如何跳过一些测试

https://stackoverflow.com/questions/24030059/skip-some-tests-with-go-test

什么是基准测试?

基准测试,是一种测试代码执行性能的方式,你可以将多种代码实现进行比对。

基准测试主要是通过测试 CPU (go test -bench . -test.cpuprofile) 和内存 (go test -bench . --benchmem) 的分配,来展示被测试代码的性能,进而找到性能更优的解决方案。

如何编写基准测试?

func BenchmarkXXX(b *testing.B) {    }

什么是 HTTP 测试?

顾名思义,就是测试 web http 协议的测试。

如何编写 HTTP 测试?

Go 标准库为我们提供了一个 httptest 的库,通过它就能够轻松的完成 HTTP 的测试。

什么是测试覆盖率?

由单元测试的代码,触发运行到的被测试代码的代码行数占所有代码行数的比例,被称为测试覆盖率,代码覆盖率不一定完全精准,但是可以作为参考,可以帮我们测量和我们预计的覆盖率之间的差距。

go test 工具就为我们提供了一个度量测试覆盖率的能力。

go test -v -coverprofile=c.out

再通过 go tool 来将 c.out 转换成 html 格式的测试覆盖率报告。

go tool cover -html=c.out -o=tag.html

其他更多,可以参考:测试

# 生成指定 package 的测试覆盖率(fib.out 后面不带参数的,默认是命令所在目录)
$ go test -v -covermode=count -coverprofile fib.out
# 查看汇总的 fib 测试覆盖率
$ go tool cover -func=fib.out
# 生成 html
$ go tool cover -html=fib.out -o fib.html

VSCode Go Test Coverage 插件

Go Coverage Viewer is the simplest way to view your code coverage results right inside the editor

测试比较工具

  • benchcmp
  • benchviz

第三方测试库

参考资料

  1. Go 单元测试,基准测试,http 测试
  2. Go 测试,go test 工具的具体指令 flag
  3. 测试、性能测试以及代码示例的编写
  4. visualizing-go-benchmarks-with-benchviz
  5. advanced-testing-with-go / YouTube 视频
  6. Testing Techniques / YouTube 视频

标签:测试,testing,test,详解,go,Go,out
From: https://www.cnblogs.com/liujiacai/p/17035024.html

相关文章

  • docker实战: vue+java+uniapp部署到阿里云服务器详解(此文没有使用宝塔面板部署),附带各种
    一、部署前准备工具以及注意事项:项目来源:https://gitee.com/ZhongBangKeJi/crmeb_java?_from=gitee_search官方部署文档:https://doc.crmeb.com/java/crmeb_java1.ide:ide......
  • synchronized详解
    一、synchronized使用1、synchronized的作用synchronized的作用主要有三:(1)、原子性:所谓原子性就是指一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素......
  • Python接口自动化系列- python+unittest+ddt参数化7
    一、ddt说明一般进行接口测试时,每个接口的传参都不止一种情况,一般会考虑正向、逆向等多种组合。所以在测试一个接口时通常会编写多条case,而这些case除了传参不同外,其实并......
  • AtCoder Beginner Contest 284
    AtCoderBeginnerContest284https://atcoder.jp/contests/abc284被D卡了,感觉十分的弱智。GEx看不懂题解(A-SequenceofStrings#include<bits/stdc++.h>usingn......
  • AtCoder Beginner Contest 284 C - Count Connected Components DFS的应用
    TimeLimit:2sec/MemoryLimit:1024MBScore: 300300 pointsProblemStatementYouaregivenasimpleundirectedgraphwith NN verticesnumbered 11 ......
  • STM32 - 时钟系统详解
    0.前言0.1什么是时钟时钟是由电路产生的具有周期性的脉冲信号,相当于单片机的心脏,给单片机提桶一个统一的信号要想使用单片机的外设必须开启相应的时钟,0.2时钟对单......
  • go语言基础
    1.变量的三种格式(1)标准格式:var变量名类型(2)批量格式:var(变量名类型,变量名类型。。。。。)(3)简短格式:变量名:=表达式(有缺陷,类似于python中的变量规则)注意:简短格式只......
  • 原神私服替换模型(3Dmigoto)教程
    本期教程教大家如何修改原神私服角色模型​首先下载3Dmigoto​第一次打开需要设置游戏路径​打开之后搜索loader点下一个​会跳转到这个地方,然后在我标蓝的地方输入你的游戏......
  • Django views.py 增,删,改
    fromdjangoimportformsfromdjango.shortcutsimportrender,redirectfromapp01importmodels#Createyourviewshere.defdepart_list(request):  """......
  • 2023年谷歌SEO购买外链必定指南,Google购买反向链接攻略
    本文由光算创作,分享本年最新的谷歌外链购买指南,涵盖了很多干货。本文有可能会被修改和剽窃,我们佛系对待这种行为吧。我们得出的一个大数据模型可以看到,就算你的外贸网站能持......