首页 > 其他分享 >Go语言中的性能测试

Go语言中的性能测试

时间:2023-07-11 17:44:24浏览次数:51  
标签:测试 pprof 性能 testing 单元测试 go func Go

单元测试

测试单元的结果是否符合预期

//go_test.go
import (
	"fmt"
	"testing"
)

func Add() int {
	fmt.Println("AAAAAAAAAAAAAA")
	return 5
}
func Sub() int {
	fmt.Println("SSSSSSSSSSSSSSSS")
	return 5
}

func TestFun1(t *testing.T) {
	fmt.Println("TTTTTTTTTTTTTT111111111")
	r := Add()
    //如果返回的结果不符合预期,就显示测试不通过
	if r != 6 {
		t.Fail()
	}
}
func TestFun2(t *testing.T) {
	fmt.Println("TTTTTTTTTTTTTT222222222222")
	r := Sub()
	if r != 5 {
		t.Fail()
	}
}
go test -v go_test.go  -run=Fun1  -timeout=20m -count=1
  • -v 打印详情测试信息
  • -run 运行指定的单元测试,用正则表达式匹配
  • -timeout 默认10分钟超时
  • -count 测试函数运行几次

基准测试

反复测试多次,测试性能

func BenchmarkStrCat(b *testing.B) {
    hello := "hello"
    golang := "golang"
    for i := 0; i < b.N; i++ {
        fmt.Printf("%s %s\n", 	hello, golang)
    }
}
go test -bench=StrCat -run=^$ -benchmem -benchtime=2s -cpuprofile=data/cpu
  • -bench 正则指定运行哪些基准测试
  • -run 正则指定运行哪些单元测试
  • -benchmem 输出内存分配情况
  • -benchtime 每个函数运行多长时间
  • -cpuprofile 指定cpu使用信息的相关输出文件

测试代码规范

  • 单元测试和基准测试必须放在以_test.go为后缀的文件里。
  • 单元测试函数以Test开头,基准测试函数以Benchmark开头。
  • 单元测试以*testing.T为参数,函数无返回值。
  • 基准测试以*testing.B为参数,函数无返回值。

pprof

首先我们得先安装这两个工具:

google的pprof工具链

go get -u github.com/google/pprof

gin的pprof工具

go get github.com/DeanThompson/ginpprof

pprof是可视化性能分析工具,提供以下功能:

  1. CPU Profiling:按一定频率采集CPU使用情况。
  2. Memory Profiling:监控内存使用情况,检查内存泄漏。
  3. Goroutine Profiling:对正在运行的Goroutine进行堆栈跟踪和分析,检查协程泄漏。

监控CPU使用命令go tool pprof data/cpu

进入交互界面后常用的命令有:

  • topn:列出最耗计算资源的前n个函数
  • list func:列出某函数里每一行代码消耗多少计算资源
  • peek func:列出某函数里最耗计算资源的前几个子函数

pprof结果可以在浏览器上进行可视化。

go tool pprof -http=:8080 data/cpu

注意:

  • 在执行这个命令的时候有时候会报错,

    Could not execute dot; may need to install graphviz.
    

    说缺少graphviz,那我们就要去下载并安装,graphviz下载地址

  • 安装之后还得把安装目录下的bin添加到path中

标签:测试,pprof,性能,testing,单元测试,go,func,Go
From: https://www.cnblogs.com/guangdelw/p/17545476.html

相关文章

  • ubuntu20.04安装mongodb步骤
    注:虚拟机无法运行mongodb5.0以上的版本1、wget-qO-https://www.mongodb.org/static/pgp/server-4.4.asc|apt-keyadd-导入并设置公钥2、echo"deb[arch=amd64,arm64]https://repo.mongodb.org/apt/ubuntufocal/mongodb-org/4.4multiverse"|tee/ect/apt/sources.list.......
  • go项目的打包部署
    1.go项目在window下编译简易打包1).在windows下直接编译生成main.exe文件在项目main.go同级目录下执行以下命令gobuildmain.go2).将当前目录下的main.go打包成gotest.exe文件(在windows下可以直接执行)在项目main.go同级目录下执行以下命令gobuild-ogotest.exemain.go9294......
  • django 中 设置一个logging,来记录日志
    当你使用Django框架开发应用程序时,配置日志是一个重要的任务。以下是一步一步配置Django日志的示例:第1步:在你的Django项目中创建一个名为"logs"的文件夹,用于存储日志文件。第2步:在项目的根目录下的settings.py文件中,找到`LOGGING`配置项。如果该配置项不存在,请添加以下内容:```p......
  • CodeForces 1525F Goblins And Gnomes
    洛谷传送门CF传送门套路地,将DAG的最小不交路径覆盖转化为点数减去拆点以后最大匹配。感性理解就是一开始每个点都是一条路径,一个匹配意味着两条路径结合了。由题意知,第\(i\)次进攻时最小不交路径覆盖必须\(>i\),也就是说,设最大匹配为\(k\),那么\(n-k>i\),即\(k\le......
  • 基于python的租房网站-房屋出租租赁系统(python+django+vue)
    该项目是基于python/django/vue开发的房屋租赁系统/租房平台,作为本学期的课程作业作品。欢迎大家提出宝贵建议。功能介绍平台采用B/S结构,后端采用主流的Python+Django进行开发,前端采用主流的Vue.js进行开发。整个平台包括前台和后台两个部分。前台功能包括:首页、房屋详情页、......
  • 基于python+django的酒店预定网站-酒店管理系统
    该系统是基于python+django开发的酒店预定管理系统。适用场景:大学生、课程作业、毕业设计。学习过程中,如遇问题可在github给作者留言。演示地址前台地址:http://hotel.gitapp.cn后台地址:http://hotel.gitapp.cn/admin后台管理帐号:用户名:admin123密码:admin123源码地址h......
  • 基于python+django的外卖点餐网站-外卖点餐系统
    该系统是基于python+django开发的外卖点餐系统。适用场景:大学生、课程作业、毕业设计。学习过程中,如遇问题可以在github给作者留言。演示地址前台地址:http://food.gitapp.cn后台地址:http://food.gitapp.cn/admin后台管理帐号:用户名:admin123密码:admin123源码地址https......
  • 基于python+django的宠物商店-宠物管理系统设计与实现
    该系统是基于python+django开发的宠物商店-宠物管理系统。是给师妹开发的课程作业。现将源码开放给大家。大家学习过程中,如遇问题可以在github咨询作者。演示地址前台地址:http://pet.gitapp.cn后台地址:http://pet.gitapp.cn/admin后台管理帐号:用户名:admin123密码:admin12......
  • 基于python+django的家教预约网站-家教信息管理系统设计与实现
    该系统是基于python+django开发的家教预约网站。是给师妹做的课程作业。大家在学习过程中,遇到问题可以在github给作者留言。效果演示前台地址:http://jiajiao.gitapp.cn后台地址:http://jiajiao.gitapp.cn/admin后台管理帐号:用户名:admin123密码:admin123源码地址https:......
  • 基于python+django的旅游信息网站-旅游景点门票管理系统设计与实现
    该系统是基于python+django开发的旅游景点门票管理系统。是给师弟做的课程作业。大家学习过程中,遇到问题可以在github咨询作者演示地址前台地址:http://travel.gitapp.cn后台地址:http://travel.gitapp.cn/admin后台管理帐号:用户名:admin123密码:admin123源码地址https://......