24 | 测试的基本规则和流程(下)
24 | 测试的基本规则和流程(下)
讲述:黄洲君
时长10:35大小6.05M
知识扩展
问题 1:怎样解释功能测试的测试结果?
问题 2:怎样解释性能测试的测试结果?
总结
思考题
赞 12
提建议
精选留言(20)
- HF2020-05-10老师,go如何写出可测试的代码,有什么规范吗?
作者回复: 网上有不少相关的文章。我说3点基本的吧: 1. 隐藏不该暴露的。测试代码相当于使用你程序的一方,不要让它能够影响甚至破坏你的程序。 2. 暴露出来的API应该对使用者友好。换句话会所,如果在写测试代码的时候,你发现API调用起来不那么顺畅,那么就需要考虑程序的API是否得当了。 3. 保持API在风格上的一致性。风格一致的程序有助于使用方快速运用和理解程序。 这3点是基本的原则了,其他的细节上的东西说到底都是为了做到这3点的。测试代码就是对生产代码的前期验证。
16 - Louis2018-11-23老师讲的很棒! 终于补到这里了! 很多东西都是从编程语言本质的角度去解析。很棒!11
- willmeng2019-04-14请问,如何修改默认测试时间上限呢?
作者回复: 我不太清楚你说的“默认测试时间”是指什么。 如果是性能测试的话,可以在执行 go test 命令时追加 -benchtime 标记。这实际上是下一篇文章的思考题。 另外,-timeout 标记可用于设定当次测试运行的总时长,一旦超过这个时长就panic。 具体用法可以参考:https://golang.org/cmd/go/#hdr-Testing_flags 。
7 - 象牙塔下的渣渣2018-10-11老师,能不能把每节课后面的思考题给出答案啊?另外,你这个专栏上的内容在您的那本《Go并发编程》上有嘛?
作者回复: 这个专栏是完全重写的,几乎跟书上的东西没有重叠。答案的话我赶完稿子后面再补吧。现在补精力跟不上。
6 - 给力2020-03-24有个疑问: 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 查看说明。
共 2 条评论5 - 左氧佛沙星人2019-04-13我用编辑器运行的时候,报错: # 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 文件中的功能测试函数。
共 3 条评论4 - 疯琴2020-01-15结果讲解很清楚👍 cpu那里还不明白,我的笔记本2核超线程,显示-4,我设置-cpu参数为20、100、1000都能跑,也更快,可是这有什么意义呢?通常是不是不设置这个参数就好?
作者回复: 肯定是都能跑的。这个参数主要是为了模拟多核CPU执行程序。这样可以测试并发程序在各种计算环境中的执行情况,包括功能正确性和性能。
3 - 海盗船长2020-01-15go1.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)
2 - benying2019-06-06打卡,2019006061
- jxs12112021-12-19修改b.N的值是由go运行时控制的吗,并不需要我们关注吧
作者回复: 设置b.N是为了多次(N次)执行同一个被测函数,以便获得它的性能量化指标。一般情况下,你可以不去手动设置,但是应该知道它是做什么的。
- moonfox2021-07-09问题:是否测试总时间一定会超过1秒? 答: 因为要找到1秒内最大可执行次数,而在这之前肯定要进行多次尝试,所以测试总时间应该总是会超过1秒的。 不知道这样理解是否正确呀
作者回复: 当你用 b.N 做循环的时候,这个时间一般都会大于 1 秒的。但注意,这是对于单个测试函数而言的,不是测试总时间。
- moonfox2021-07-09“最后再看这个执行次数的右边,2314 ns/op表明单次执行GetPrimes函数的平均耗时为2314纳秒。这其实就是通过将最后一次执行测试函数时的执行时间,除以(被测函数的)执行次数而得出的。” 根据文章所说, 500000是最后一次运行时的执行的次数,那可以倒推最后一次的运行时间 为 (2314 * 500000.0 ) / 1000 ^ 3 = 1.157秒,这个时间已经超过了默认时间上限1秒,与文章中说执行的次数是取最后一次不超过1秒的执行次数 相矛盾,对这点不是很理解展开
作者回复: 文中还有一句话:“当某次执行的时间大于或等于上限时,我们就说这是命令此次对该测试函数的最后一次执行。”
共 2 条评论 - 传说中的成大大2020-03-27这两节的课程内容 我都不好总结 我唯一的感受就是 花了三篇文章来讲测试 说明 go语言的测试确实很重要
- 张sir2020-02-29我怎么把t.Log的内容打印出来呢
作者回复: 运行命令 go test -v
- 手指饼干2019-10-08请问这里的500000,是最后一次执行测试函数时,被测函数的执行次数?还是整个测试周期,被测函数的执行次数?
作者回复: 文章里写了: 当某次执行的时间大于或等于上限时,我们就说这是命令此次对该测试函数的最后一次执行。这时的b.N的值就会被包含在测试结果中,也就是上述测试结果中的500000。 2.本地无改动文件的跑了几遍都是显示时间的,没有那种显示cache的go test结果
- xumc2019-03-07老师咨询个问题,本地go test的缓存能push到Git 的远程用来跑CI/CD吗
作者回复: 不能,即使能也不应该这么做啊。
- Caesar2019-01-23请问老师,假如我测试的时候要跳过某些包中的源码文件,该怎么写go test命令。网上搜了一圈也没找到。
作者回复: 跳过测试函数的话,你可以看一下 -run 这个标记。如果要跳过某个包不指定那个包不就得了。
- 虢國技醬2019-01-22打卡
- A 凡2018-10-24之前一直就没有用心去了解测试命令中各个参数的含义,都是通过ide直接运行了,这里学到了