25 | 更多的测试手法
该思维导图由 AI 生成,仅供参考
前导内容:-cpu 的功能
- 深入了解
- 翻译
- 解释
- 总结
Go语言测试高级方法详解 本文深入介绍了Go语言中测试手法的高级方法,包括`-cpu`标记的功能和使用方式,以及`-count`标记和测试函数多次执行的问题。作者详细解释了这些标记的作用和影响,以及在测试中的合理使用。此外,还介绍了`-parallel`标记对功能测试函数的最大并发执行数的设置,以及对性能测试的无效性。通过本文的阐述,读者可以深入了解Go语言中测试手法的高级方法,为他们提供了更深入的技术知识和实践经验。 在文章中,作者还详细介绍了`testing.B`类型的指针方法`StartTimer`、`StopTimer`和`ResetTimer`的用法,以及这些方法在性能测试函数中的应用。通过对计时器的操作,读者可以了解如何精确化性能测试函数的执行时间,帮助`go test`命令找到被测程序真实的最大执行次数。此外,还介绍了`-benchmem`标记和`-benchtime`标记的作用,以及在测试时开启测试覆盖度分析的方法和可能的副作用。 总的来说,本文通过深入讲解Go语言中测试手法的高级方法,为读者提供了丰富的测试知识和实践经验,使他们能够更好地应用这些方法进行测试,并获得更加充分的测试结果。
《Go 语言核心 36 讲》,新⼈⾸单¥59
全部留言(14)
- 最新
- 精选
- 晒太阳老师,回到MPG模型,我的理解是多级的关系,但M和P之间是否是一对多的关系,一个M对应着多个P,P对应着多个G(G队列runqueues),只有这样才能做到成千上万的G。我的理解对不对?M和P之间是否是一对多的关系?希望老师解惑,感谢啊。
作者回复: M 和 P 是多对多的,或者说是动态结合的。一个 P 在不同时刻可能会对接不同的 M,反过来也是如此。而且 M 和 P 在数量上没有直接的关系。P 和 G 表面上说是一对多的,但其实一个 G 在它的生命周期中也可能会在不同 P 的可运行队列之间游走。更详细的东西,可以看我写的那本书。
2019-09-2738 - KK如何对接口测试呢?其他语言中,比如php需要需要nginx作为代理处理请求,go是如何调试接口的呢?
作者回复: 你说的是直接测试Web接口么?可以使用 net/http/httptest 这个包。
2020-07-274 - 大王叫我来巡山慢慢的感觉就跟不上了,主要是还没有遇到这个应用的场景,评论也越来越少,不过老师确实很赞,不管是我提问题,还是吐槽,老师都很耐心的回答,但是我感觉不知道是不是我写的太少了,这个内容距离实践还有段距离
作者回复: 确实需要多多练习。自己做项目吧。
2019-09-1223 - 我好像一点都不像程序员假设男女搭配才能干活,男生是G,女生是M,P就是男生的队列,有多条。每次有女生空闲了,就可以在P队列中拿一个男生和女生搭配,然后干活,干完后男生又随机回到某个队列,女生又等下一个男生,当女生不够多的时候,可以申请要多几个女生,因此每个女生都可能和不同的男生搭配干活,每个男生都可能和不同的女生搭配干活,也就是多对对的关系,不知道这样解释是否正确。
作者回复: 哈哈哈,你这个解释够奇葩...不过,要是能促进知识记忆的话也未尝不可,哈哈哈,这些女生好累啊,男生还可以回队列歇一歇(我觉得要是男女角色互换的话应该效率更高^-^)...
2022-07-0822 - 喬老师,我有个疑惑,希望能帮我解答一下。 文中有说:"通过-cpu标记,我们还能够模拟被测程序在计算能力不同计算机中的性能表现。" 在下面的示例结果中,虽然P数量不同,但是同一个测试函数中 被测函数的调用次数 几乎是一样的 所以我想问的是,在性能测试中,-cpu的参数设置 和 被测函数的调用次数之间有什么关联呢
作者回复: 你说的“被测函数的调用次数”有些模糊,我不太清楚你想指的是什么(也许是我想多了)。如果按字面理解的话,那我的回答就是“它俩之间没有必然的关联关系”。 更具体地说,-cpu属于测试前设置,被测函数的执行次数属于测试运行时的一种测量(结果)。当然了前者可能会影响后者,但是可以影响后者的因素还有很多。 换句话说,在性能测试中,我们最终看的还是,被测函数在一段时间的执行次数(也就是单次执行的到底有多快)。而 -cpu 只是决定了一个前置条件而已,它并不会(也不能)充分决定被测函数的执行次数。
2022-03-261 - wangkaiyuan老师,我想问一下,P大于M的时候,是不是会有P没有和M绑定,其中的G没有执行的机会呢
作者回复: 这个绑定是动态的,择机绑,择机断,所以不会出现有可运行G但绑不上M的情况,只不过需要多等等(时间很短)罢了。另外M不够用的话,Go运行时系统会向OS申请创建新线程。
2020-12-151 - poettian老师,这里有个疑惑:一个P在把G对接到M后,是会等待这个G运行结束或挂起后才会再次执行下一个G到M的对接吗?如果是,那我能理解设置多个P可以提高并发能力;如果不是,那不是只有一个P就够了,毕竟M数量是有限的。
作者回复: 这个问题的答案不是“非0即1”的。 在G运行的过程中,相应的P要负责维护。所以,如果只有一个P那就相当于没有并发。 然而,当G等待锁或等待IO的时候,P会试图从可运行队列里再拿一个G。所以一个P可以同时负责好多个G的运行。 另外,Go调度器里还有共享的可运行G队列,其中的G可供所有的P获取,而且,P还可能会从其他P那里“偷”可运行G。因此,这个调度过程不是那么简单的。 你可以去看看我写的那本《Go并发编程实战》,对Go并发有一个更全面的了解。
2020-11-191 - 現實老师你的图是用什么软件画的呀?看着蛮不错的,可以分享一下吗
作者回复: 工具很普通啊,用的就是 Power Point 。
2022-08-01归属地:北京 - 明远花了三章讲的全是命令行参数,具体的测试技巧和方法都没有提,怎么mock 断言,参数构造啥都没有说
作者回复: 那些东西通过官方文档和博客都可以获得,何必再提。 你有啥问题可以直接在文章下面留言问。
2022-03-23 - 奕对于功能测试 -cpu 参数没有意义啊,为什么还会挨个遍历逻辑 CPU 切片执行多次呢?
作者回复: -cpu 针对的是性能测试(基准测试)
2021-11-08