golang 单元测试、性能测试、性能监控技术

测试:单元测试、性能测试、代码覆盖率、数据竞争、性能调优 测试是什么 一个完整的软件有两个方面组成,第一是面向普通用户的软件产品,第二是面向公司的代码产品。代码需要不停更新迭代,也是一个产品。测试用于监管代码质量,测试本身也是算法,测试代码也需要维护和升级,测试和代码是相辅相成的。 程序是算法加数据。简单的逻辑是一些算法指令,算法执行过程当中需要数据,这个数据可能在数据库里、也可能在文件里,算法和数据分离。 测试也是,测试逻辑和测试数据分离。测试数据是场... 阅读详情

golang 单元测试、性能测试、性能监控技术

go语言提供了强大的测试工具,下面举例简单介绍一下

  • go test 单元测试
  • go test -bench=. 性能测试
  • go tool pprof 性能监控

go test 单元测试

例如对包helper下的util.go 进行单元测试,util.go 里主要包含两个功能,一个是对字符串进行sha1加密,一个是验证手机号码
这里写图片描述

  • 编写测试文件

如果我们要测试验证手机号码功能是否正确,我们可以在该包下新建util_test.go文件,一般命名方式为 _test.go(为测试文件主文件名),测试函数以 Test函数(t *testing.T) 形式

util_test.go
这里写图片描述
然后cmd窗口下执行(注意将目录切换到当前目录,如果是windows系统,按住shift键同时单击右键,选择在此处打开命令窗口即可)

  • 执行测试

go test
这里写图片描述
若要看到详细信息
go test -v
这里写图片描述

go test -bench=. 进行性能测试

  • 编写性能测试文件
    性能测试文件名一般同测试文件,不同的是编写性能测试函数时是以Benchmark函数(b *testing.B) 形式
    这里写图片描述

  • 执行性能测试

在当前目录的命令行窗口执行
go test -bench=.
这里写图片描述
每次耗时 224599纳秒,执行10000次,总耗时2.38秒

生成CPU性能监控图

go用pprof包来做代码的性能监控包括:
net/http/pprof
runtime/pprof

  • 生成web服务器性能监控图

如果你的go程序是用http包启动的web服务器,你想查看自己的web服务器的状态。这个时候就可以选择net/http/pprof。你只需要引入包_”net/http/pprof”
这里写图片描述
go run main.go 后就可以在浏览器中使用http://localhost:8080/debug/pprof/直接看到当前web服务的状态,包括CPU占用情况和内存使用情况等,例如
这里写图片描述

如果想以图形的形式展现,那么首先要安装Graphviz(图形工具,供go调用生成时序图,官网下载地址Graphviz,国内下载地址百度-Graphviz),想要生成CPU状态分析图,再开启一个命令窗口执行
go tool pprof http://localhost:8080/debug/pprof/profile
就会进入30秒的profile收集时间,在这段事件不断刷新点击http://localhost:8080/wechat 浏览器上的页面,尽量让cpu占用性能产生数据。
这里写图片描述
然后再光标闪烁处输入web命令,如果提示”dot not found,”原因可能是你没有安装Graphviz,如果已经安装了提示次错误,那么需要将Graphviz的bin目录加入到path路径即可
这里写图片描述
然后就会生成.svg 图形,会自动启动默认浏览器打开
这里写图片描述

  • 生成一般应用程序性能监控图

如果你的go程序只是一个应用程序,比如计算阶乘,那么你就不能使用net/http/pprof包了,你就需要使用到runtime/pprof。具体做法就是用到pprof.StartCPUProfile和pprof.StopCPUProfile,具体使用请参考官方博文https://blog.golang.org/profiling-go-programs

var cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file")

func main() {
    flag.Parse()
    if *cpuprofile != "" {
        f, err := os.Create(*cpuprofile)
        if err != nil {
            log.Fatal(err)
        }
        pprof.StartCPUProfile(f)
        defer pprof.StopCPUProfile()
    }
    ...

参考链接

Go-Assist: Go语言开发辅助库的全面指南 本文还有配套的精品资源,点击获取 简介:Go-Assist是一个专为Go语言设计的辅助库,旨在通过提供代码分析、错误检查和性能优化等功能,简化Go语言开发中的常见任务,帮助开发者提升代码质量和开发效率。它遵循Go语言的“简单就是美”的哲学,提供直观且易于集成的API。本文将详细介绍go-assist库的主要特点、功能以及如何在项目中使用它。 1. go-assis... 阅读详情

相关推荐

如何用Python分析20年投资者情绪数据(附ISI和CICSI完整数据集)

本文提供了一份利用Python分析2003-2023年投资者情绪数据的实战指南。文章详细介绍了如何获取并清洗ISI和CICSI数据集,运用Pandas、Matplotlib等工具进行数据探索、可视化与深度分析,包括趋势分解、成分关联及情绪状态划分,旨在帮助读者掌握从数据到洞察的完整流程,为量化金融研究提供方法论支持。

gpu4optimizer的博客 469

Goland里面使用PlantUML插件

PlantUML插件安装:Goland里面setting--->plugin---->搜索UML,安装PlantUML PlantUML语法地址:http://plantuml.com/zh/class-diagram 使用说明:Go语言里面的接口是方法的集合,但是PlantUML里面的接口只是个接口,不能添加方法,可以考虑使用abstract class来替代Go里面的inte...

qq_15054345的博客 7810

电感选型不当的代价:从纹波激增到系统失稳的深度剖析

本文深度剖析了电感选型不当对开关电源系统的严重影响。电感值过小会导致纹波电流激增、元件热应力加剧、EMI超标乃至MOSFET击穿;电感值过大则会引起环路响应迟滞、动态性能下降和轻载效率恶化。文章通过实测案例,强调了超越经典公式进行动态与容差考量的必要性,并提供了基于饱和电流、温升电流及环路测试的精准选型方法论,帮助工程师规避从纹波失控到系统失稳的潜在风险。

flink9streamer的博客 406

GoLang之go test测试

GoLang之go test测试

weixin_52690231的博客 7810

保姆级教程:在Davinci Configurator里配置BswM的ECU状态机(附状态切换流程图)

本文提供了一份详细的AUTOSAR BswM模块配置指南,通过Davinci Configurator工具实现ECU状态机的构建与管理。内容涵盖从模式请求端口创建到状态切换规则定义的全流程,特别针对Ecu State Handling进行了深入解析,并附有状态切换流程图,帮助汽车电子工程师高效完成ECU状态管理配置。

weixin_28366475的博客 411

20 硬件工程师笔面试高频考点真题解析——寄存器

摘要: 寄存器是由多个边沿触发的D触发器组成的多位存储单元,用于同步时序电路中的数据暂存、隔离毛刺、跨时钟域同步等。选型需考虑位宽、触发方式(边沿/电平)、异步控制、电气参数等。核心时序参数包括建立时间(Tsu)、保持时间(Thold)和时钟输出延迟(Tco)。寄存器广泛应用于时序逻辑、流水线分割、毛刺消除、跨时钟域同步及计数分频等场景。同步复位依赖时钟边沿,时序易收敛但需时钟支持;异步复位独立于时钟,上电可靠但需注意亚稳态风险。

XU157303764的博客 1342

IntelliJ IDEA实用插件:轻松生成时序图和类图

在传统的开发流程中,通常是先绘制设计图,然后根据设计图开发软件项目。然而,在实际的公司或团队项目开发过程中,这种流程往往被颠倒过来,很多情况下是先进行项目开发,然后再绘制图表和编写文档。同时,每个时序图节点,右键单击,有两个选项“Go to Source” 和 “ Remove Method ‘xxxxxx()’”,分别为跳转到源代码对应的位置 和 从时序图中删除对应的方法,去除冗余信息,简化时序图,方便修改时序图显示。若生成的时序图比较大时,若无更高的精准度要求,可适当减少调用层数进行时序图大小的调整。

请你喝杯Java 8978

【Unity实战】实现最完美最简单的UI适配方案,背景压缩或者拉伸变形解决方案,手机刘海屏适配,适配不同分辨率,不同尺寸,不同设备。

这期来讲一个简单的UI设计方案,很多同学可能搞不懂锚点、轴心这些概念,导致做好的UI在别人的设备上,乱跑或者是重叠,或者是参加游戏老发时间比较紧来不及做适配,都可以来试试这个方法,通过填充边框来保持游戏画面的原始比例,所以它的缺点也很明显,在一些移动设备上会浪费比较大的显示面积。 unity不同设备UI变形? UI在不同设备上如何适配?

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 3652

使用PlantUML快速绘制流程图/时序图/类图/用例图…

使用PlantUML快速绘制流程图/时序图/类图/用例图…

已转移博客园 3909

示波器核心参数选型指南:带宽、采样率与嵌入式调试实战

示波器是电子工程师进行信号观测与故障诊断的基础仪器,其性能由带宽、采样率、通道数、存储深度、触发系统和探头特性共同决定。带宽定义高频响应边界,需遵循5倍法则以保障数字信号上升沿测量精度;采样率则依据奈奎斯特定理并结合工程冗余(通常≥2.5×带宽)实现可靠时域重建。二者协同影响信号完整性评估能力,尤其在UART、I²C、SPI等嵌入式总线调试中至关重要。高存储深度支持长时捕获与毛刺定位,智能触发与硬件协议解码进一步将波形分析升维至语义级。本文围绕真实嵌入式场景,解析参数间的耦合关系与典型误用陷阱。

weixin_42588877的博客 91

OSPF规划两大模型:双塔奇兵、犬牙交错

大家好,今天给大家带来的是OSPF规划两大模型:双塔奇兵、犬牙交错,让我们直接开始吧! OSPF规划之双塔奇兵 说明: OSPF 如果某个区域存在两个 ABR,并且在两个 ABR 上都对 area n 内的路由做了聚合操作。 最佳配置: 两台ABR之间的红线应该使用以太网的子接口技术,一个子接口属于area0,另一个属于 area n;或者该链路规划为 area n,同时配置虚连接; ABR 的 loopback0 规划入 area 0 OSPF 规划之犬牙交错 说明: 有时接入层的设备会以乱序的

网络技术联盟站 2423

2024年Go最全你真的会画时序图吗?_时序逻辑电路中时序图怎么画,Golang程序员

WaveDrom是一个免费开源的在线数字时序图渲染引擎。它可以使用JavaScript, HTML5和SVG来将时序图的WaveJSON描述转成SVG矢量图形,从而进行显示。WaveDrom可以嵌入到任何网页中。WaveDrom编辑器可在浏览器中运行,也可以安装在系统上,渲染引擎可以嵌入到任何网页中。

2401_84919679的博客 1053

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

4、Go语言单元测试、性能测试与监控

单元测试用来检测某个模块、某个函数的执行结果是否正确,也因此能够实现监控代码质量。 Go语言中自带有一个轻量级的测试框架 testing,同时也自带了 `go test` 命令,可以通过这些工具来实现单元测试和性能测试。基准测试可以测试一段程序的运行性能及耗费CPU的程度。 性能测试函数以Benchmark为名称前缀,同样保存在*_test.go文件里。

行走的皮卡丘 1096

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

go benchmark 性能测试

为什么80%的码农都做不了架构师?>>> ...

weixin_34232617的博客 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

go Test Benchmark 性能测试

go 性能测试 基准测试 基准测试主要是通过测试CPU和内存的效率问题,来评估被测试代码的性能,进而找到更好的解决方案。 编写基准测试 func BenchmarkSprintf(b *testing.B){ num:=10 b.ResetTimer() for i:=0;i<b.N;i++{ fmt.Sprintf("%d",num) } } 基准测试的代码文件必...

阿俊的博客 3196

Go基础:如何做单元测试和基准测试

目录 1. 单元测试 1.1. go test工具 1.2. 测试函数 1.2.1. 测试函数的格式 1.2.2. 测试函数示例 1.3. 测试组 1.4. 子测试 1.5. 测试覆盖率 1.6. 基准测试 1.6.1. 基准测试函数格式 1.6.2. 基准测试示例 1.6.3. 性能比较函数 1.6.4. 重置时间 1.6.5. 并行测试 1.7. Setup与Te...

琦彦 1897

Gearbox测试指南:单元测试、集成测试和性能测试的最佳实践

Gearbox是一个专注于高性能的Go语言Web框架,基于fasthttp构建,比标准net/http快10倍以上。对于这样一个高性能框架,完善的测试策略至关重要。本文将为您详细介绍Gearbox框架的测试最佳实践,包括单元测试、集成测试和性能测试的完整指南。🚀 ## 📊 Gearbox测试架构概览 Gearbox采用分层测试策略,确保框架的稳定性和高性能。项目中的测试文件分布在多个层级:

gitblog_01019的博客 1100

Go性能监控与测试一体化方案(企业级实践揭秘)

掌握Go性能监控与测试一体化方案,解决高并发场景下的性能瓶颈。结合主流Go性能测试工具,实现自动化压测、实时监控与指标分析,提升系统稳定性与开发效率。企业级实践方法论,值得收藏。

CompiGap的博客 917

GO语言学习笔记-测试篇 Study for Go ! Chapter ten- Test

持续更新 Go 语言学习进度中 ...... 2023-03-14 GO语言学习笔记 系列部分???? 已完结!! 对于刚刚接触 golang 来说,经过这段时间的学习,对于 GO这门语言已经有了初步的认识。 博主接下来会继续学习 golang 的更多内容,持续更新中...... GO语言学习笔记-类型篇 Study for Go! Chapter one - Type GO语言学习笔记-表达式篇...

Mercury_cc的博客 203

【Go系列】Go语言的测试

单元测试是指对软件中的最小可测试部分进行检查。在面向对象编程中,这通常指的是单个方法或函数;在过程式编程中,则可能是一个过程或函数。单元测试的目标是验证这个单元是否正确执行了预定的任务,并且没有意外的副作用。基准测试(Benchmark Testing),也称为性能测试,是一种测量和评估软件或硬件性能的测试方法。在软件开发中,基准测试通常用于评估代码片段或算法的运行效率,包括执行速度、内存使用、吞吐量等性能指标。评估性能:确定代码或系统在特定条件下的性能表现。性能优化。

u013379032的博客 1408

文件行数 golang text_一看就懂系列之Golang的pprof

前言这是一篇给网友的文章,正好最近在研究分析golang的性能,我觉得是时候来一个了断了。正文1.一句话简介Golang自带的一款开箱即用的性能监控和分析工具。(全篇看的过程中没必要特意记忆、看完自然让你有不一样的感觉)2.使用姿势?2.1 runtime/pprof手动调用runtime.StartCPUProfile/runtime.StopCPUProfile等API来进行数据的采...

weixin_39710179的博客 282

go测试的概念和方法

测试是软件开发的关键环节,用于验证代码的正确性、可靠性和性能。在Go中,测试主要分为单元测试、基准测试(Benchmark)和示例测试(Example)。下面我将逐步解释测试的概念和常用方法,确保回答结构清晰、实用可靠。通过以上方法,您可以高效地构建可靠测试套件,提升代码质量。如果有具体场景(如HTTP服务测试),可进一步讨论!测试方法包括编写测试函数、运行测试、分析覆盖率和优化测试用例。以下是一个简单示例,演示如何测试一个加法函数。Go语言内置了强大的测试框架,通过标准库中的。

Daskyol_cc的博客 318

Golang在测试工具开发中的优势与实践

摘要:Golang凭借其高并发性能、简洁语法和跨平台特性,正成为测试工具开发的热门选择。本文分析了Golang在测试工具开发中的核心优势,包括高效的并发处理、快速开发能力和便捷部署,并通过API测试、WebUI测试等实例展示了其应用实践。文章建议测试从业者从简单工具入手,逐步掌握Golang在测试自动化中的应用,以提升测试效率和质量。Golang的卓越性能与丰富生态为构建高效测试工具提供了有力支持。

2501_94449311的博客 623

写好Go单元测试还不够?你必须掌握的基准测试进阶技能,提升性能300%

掌握Go基准测试技巧,精准定位性能瓶颈。本文深入讲解Go基准测试示例,涵盖适用场景、高效测量方法与优化策略,助你提升程序性能达300%。实用进阶技能,值得收藏。

FastCompile的博客 1010
上一篇: Go语言开发环境配置
下一篇: VS code golang 开发环境搭建
hil2000
博客等级 码龄17年 369粉丝 44原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值