24 | 测试的基本规则和流程(下)
该思维导图由 AI 生成,仅供参考
知识扩展
问题 1:怎样解释功能测试的测试结果?
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了Go语言中程序测试的重要性以及`go test`命令的基本规则和主要流程。作者详细解释了功能测试和性能测试的测试结果及其解读方法,包括测试成功和测试失败的情况。对于性能测试,文章重点讨论了`go test`命令的标记`-bench`和`-run`的使用,以及性能测试结果中的各项指标的含义和解读方式。此外,还介绍了如何在测试函数中指定预期的打印内容。总的来说,本文通过具体的测试命令和结果,帮助读者了解了功能测试和性能测试的测试结果及其解读方法,为读者提供了实用的测试规则和流程知识。文章内容深入浅出,适合读者快速了解Go语言程序测试的基本规则和流程。
《Go 语言核心 36 讲》,新⼈⾸单¥59
全部留言(20)
- 最新
- 精选
- HF老师,go如何写出可测试的代码,有什么规范吗?
作者回复: 网上有不少相关的文章。我说3点基本的吧: 1. 隐藏不该暴露的。测试代码相当于使用你程序的一方,不要让它能够影响甚至破坏你的程序。 2. 暴露出来的API应该对使用者友好。换句话会所,如果在写测试代码的时候,你发现API调用起来不那么顺畅,那么就需要考虑程序的API是否得当了。 3. 保持API在风格上的一致性。风格一致的程序有助于使用方快速运用和理解程序。 这3点是基本的原则了,其他的细节上的东西说到底都是为了做到这3点的。测试代码就是对生产代码的前期验证。
2020-05-1018 - willmeng请问,如何修改默认测试时间上限呢?
作者回复: 我不太清楚你说的“默认测试时间”是指什么。 如果是性能测试的话,可以在执行 go test 命令时追加 -benchtime 标记。这实际上是下一篇文章的思考题。 另外,-timeout 标记可用于设定当次测试运行的总时长,一旦超过这个时长就panic。 具体用法可以参考:https://golang.org/cmd/go/#hdr-Testing_flags 。
2019-04-147 - 象牙塔下的渣渣老师,能不能把每节课后面的思考题给出答案啊?另外,你这个专栏上的内容在您的那本《Go并发编程》上有嘛?
作者回复: 这个专栏是完全重写的,几乎跟书上的东西没有重叠。答案的话我赶完稿子后面再补吧。现在补精力跟不上。
2018-10-116 - 给力有个疑问: go test 的相关参数 可以用go help test去看。 但是这里面并没有其他参数比如(-cpu 是最大用几核 -bench 是基准测试参数 -run功能测试参数),有没有help命令找出对应每个参数的含义,我用的时候只需要help一下就能找到对应的参数使用。
作者回复: 你敲 go help test 并回车之后会发现最后有两段话: The test binary also accepts flags that control execution of the test; these flags are also accessible by 'go test'. See 'go help testflag' for details. For more about build flags, see 'go help build'. For more about specifying packages, see 'go help packages'. 第一段的意思是,一些更详细的参数说明需要敲 go help testflag 查看。第二段的意思是,go test 也支持 go build 的一些参数,那些参数需要敲 go help build 查看,另外怎么指定代码包需要敲 go help packages 查看说明。
2020-03-2425 - 左氧佛沙星人我用编辑器运行的时候,报错: # command-line-arguments [command-line-arguments.test] ./demo52_test.go:10:19: undefined: hello ./demo52_test.go:20:18: undefined: hello ./demo52_test.go:38:11: undefined: introduce 老师能帮忙解答一下吗?
作者回复: 初学的时候最好用命令行运行。 两种解决方案: 1. 在当前代码包下运行 go test 命令。这样可以执行当前代码包下的所有功能测试函数。 2. 在当前代码包下运行 go test demo52_test.go demo52.go 命令。这样只会执行 demo52_test.go 文件中的功能测试函数。
2019-04-1334 - 疯琴结果讲解很清楚👍 cpu那里还不明白,我的笔记本2核超线程,显示-4,我设置-cpu参数为20、100、1000都能跑,也更快,可是这有什么意义呢?通常是不是不设置这个参数就好?
作者回复: 肯定是都能跑的。这个参数主要是为了模拟多核CPU执行程序。这样可以测试并发程序在各种计算环境中的执行情况,包括功能正确性和性能。
2020-01-153 - 海盗船长go1.12.5 使用go test,多次测试相同的成功测试代码,并没有cached
作者回复: 我的测试结果如下: q2 git:(master) ✗ go test puzzlers/article20/q2 ok puzzlers/article20/q2 1.369s ➜ q2 git:(master) ✗ go test puzzlers/article20/q2 ok puzzlers/article20/q2 (cached) ➜ q2 git:(master) ✗ go test puzzlers/article20/q2 ok puzzlers/article20/q2 (cached)
2020-01-152 - jxs1211修改b.N的值是由go运行时控制的吗,并不需要我们关注吧
作者回复: 设置b.N是为了多次(N次)执行同一个被测函数,以便获得它的性能量化指标。一般情况下,你可以不去手动设置,但是应该知道它是做什么的。
2021-12-19 - moonfox问题:是否测试总时间一定会超过1秒? 答: 因为要找到1秒内最大可执行次数,而在这之前肯定要进行多次尝试,所以测试总时间应该总是会超过1秒的。 不知道这样理解是否正确呀
作者回复: 当你用 b.N 做循环的时候,这个时间一般都会大于 1 秒的。但注意,这是对于单个测试函数而言的,不是测试总时间。
2021-07-09 - moonfox“最后再看这个执行次数的右边,2314 ns/op表明单次执行GetPrimes函数的平均耗时为2314纳秒。这其实就是通过将最后一次执行测试函数时的执行时间,除以(被测函数的)执行次数而得出的。” 根据文章所说, 500000是最后一次运行时的执行的次数,那可以倒推最后一次的运行时间 为 (2314 * 500000.0 ) / 1000 ^ 3 = 1.157秒,这个时间已经超过了默认时间上限1秒,与文章中说执行的次数是取最后一次不超过1秒的执行次数 相矛盾,对这点不是很理解
作者回复: 文中还有一句话:“当某次执行的时间大于或等于上限时,我们就说这是命令此次对该测试函数的最后一次执行。”
2021-07-092