Go 语言核心 36 讲
郝林
《Go 并发编程实战》作者,前轻松筹大数据负责人
79610 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 55 讲
Go 语言核心 36 讲
15
15
1.0x
00:00/00:00
登录|注册

25 | 更多的测试手法

测试覆盖度分析的开启和副作用
-benchmem标记和-benchtime标记的作用
计时器的作用
StartTimerStopTimerResetTimer方法
设置功能测试函数的最大并发执行数
性能测试函数的执行次数公式
功能测试函数的执行次数公式
重复执行测试函数
-cpu标记的值的设置和影响
P的含义
设置测试执行最大P数量的列表
测试覆盖度分析
复杂的测试结果
go test命令支持的更多标记
testing包中更多的API
常规测试结果的解读
go test命令的基本使用方式
testing.T类型和testing.B类型的常用方法
Go程序测试的基本规则和主要流程
思考题
性能测试函数中的计时器
-parallel标记
-count标记
-cpu标记
更高级的测试方法
基础知识和基本测试手法
Go语言中的测试手法

该思维导图由 AI 生成,仅供参考

在前面的文章中,我们一起学习了 Go 程序测试的基础知识和基本测试手法。这主要包括了 Go 程序测试的基本规则和主要流程、testing.T类型和testing.B类型的常用方法、go test命令的基本使用方式、常规测试结果的解读等等。
在本篇文章,我会继续为你讲解更多更高级的测试方法。这会涉及testing包中更多的 API、go test命令支持的,更多标记更加复杂的测试结果,以及测试覆盖度分析等等。

前导内容:-cpu 的功能

续接前文。我在前面提到了go test命令的标记-cpu,它是用来设置测试执行最大 P 数量的列表的。
复习一下,我在讲 go 语句的时候说过,这里的 P 是 processor 的缩写,每个 processor 都是一个可以承载若干个 G,且能够使这些 G 适时地与 M 进行对接并得到真正运行的中介。
正是由于 P 的存在,G 和 M 才可以呈现出多对多的关系,并能够及时、灵活地进行组合和分离。
这里的 G 就是 goroutine 的缩写,可以被理解为 Go 语言自己实现的用户级线程。M 即为 machine 的缩写,代表着系统级线程,或者说操作系统内核级别的线程。
Go 语言并发编程模型中的 P,正是 goroutine 的数量能够数十万计的关键所在。P 的数量意味着 Go 程序背后的运行时系统中,会有多少个用于承载可运行的 G 的队列存在。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

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-27
    3
    8
  • KK
    如何对接口测试呢?其他语言中,比如php需要需要nginx作为代理处理请求,go是如何调试接口的呢?

    作者回复: 你说的是直接测试Web接口么?可以使用 net/http/httptest 这个包。

    2020-07-27
    4
  • 大王叫我来巡山
    慢慢的感觉就跟不上了,主要是还没有遇到这个应用的场景,评论也越来越少,不过老师确实很赞,不管是我提问题,还是吐槽,老师都很耐心的回答,但是我感觉不知道是不是我写的太少了,这个内容距离实践还有段距离

    作者回复: 确实需要多多练习。自己做项目吧。

    2019-09-12
    2
    3
  • 我好像一点都不像程序员
    假设男女搭配才能干活,男生是G,女生是M,P就是男生的队列,有多条。每次有女生空闲了,就可以在P队列中拿一个男生和女生搭配,然后干活,干完后男生又随机回到某个队列,女生又等下一个男生,当女生不够多的时候,可以申请要多几个女生,因此每个女生都可能和不同的男生搭配干活,每个男生都可能和不同的女生搭配干活,也就是多对对的关系,不知道这样解释是否正确。

    作者回复: 哈哈哈,你这个解释够奇葩...不过,要是能促进知识记忆的话也未尝不可,哈哈哈,这些女生好累啊,男生还可以回队列歇一歇(我觉得要是男女角色互换的话应该效率更高^-^)...

    2022-07-08
    2
    2
  • 老师,我有个疑惑,希望能帮我解答一下。 文中有说:"通过-cpu标记,我们还能够模拟被测程序在计算能力不同计算机中的性能表现。" 在下面的示例结果中,虽然P数量不同,但是同一个测试函数中 被测函数的调用次数 几乎是一样的 所以我想问的是,在性能测试中,-cpu的参数设置 和 被测函数的调用次数之间有什么关联呢

    作者回复: 你说的“被测函数的调用次数”有些模糊,我不太清楚你想指的是什么(也许是我想多了)。如果按字面理解的话,那我的回答就是“它俩之间没有必然的关联关系”。 更具体地说,-cpu属于测试前设置,被测函数的执行次数属于测试运行时的一种测量(结果)。当然了前者可能会影响后者,但是可以影响后者的因素还有很多。 换句话说,在性能测试中,我们最终看的还是,被测函数在一段时间的执行次数(也就是单次执行的到底有多快)。而 -cpu 只是决定了一个前置条件而已,它并不会(也不能)充分决定被测函数的执行次数。

    2022-03-26
    1
  • wangkaiyuan
    老师,我想问一下,P大于M的时候,是不是会有P没有和M绑定,其中的G没有执行的机会呢

    作者回复: 这个绑定是动态的,择机绑,择机断,所以不会出现有可运行G但绑不上M的情况,只不过需要多等等(时间很短)罢了。另外M不够用的话,Go运行时系统会向OS申请创建新线程。

    2020-12-15
    1
  • 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-19
    1
  • 現實
    老师你的图是用什么软件画的呀?看着蛮不错的,可以分享一下吗

    作者回复: 工具很普通啊,用的就是 Power Point 。

    2022-08-01归属地:北京
  • 明远
    花了三章讲的全是命令行参数,具体的测试技巧和方法都没有提,怎么mock 断言,参数构造啥都没有说

    作者回复: 那些东西通过官方文档和博客都可以获得,何必再提。 你有啥问题可以直接在文章下面留言问。

    2022-03-23
  • 对于功能测试 -cpu 参数没有意义啊,为什么还会挨个遍历逻辑 CPU 切片执行多次呢?

    作者回复: -cpu 针对的是性能测试(基准测试)

    2021-11-08
收起评论
显示
设置
留言
14
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部