Go 单元测试,基准测试,模糊测试
1. 单元测试
函数名规则
// 函数名以Test开头
func TestFileRead(t *testing.T) {
FileRead()
}
// -v 表示执行Printf
go test xxx_test.go -v
// -run 指定运行的测试
go test xxx_test.go -v -run=TestJson
指定 -run 是因为默认会运行所有测试函数
2. 基准测试
// 函数名以为Benchmark开头
func BenchmarkJson(b *testing.B) {
// b.N会根据实际的运行耗时动态的选择执行次数
for i := 0; i < b.N; i++ {
JsonMarshal()
}
}
// -bench 性能测试
go test -bench=Json -v
// -benchmem 每次消耗的内存
go test -bench=BenchmarkSonic -v -benchmem
func BenchmarkJson(b *testing.B) {
// b.N会根据实际的运行耗时动态的选择执行次数
for i := 0; i < b.N; i++ {
JsonMarshal()
}
}
func BenchmarkSonic(b *testing.B) {
for i := 0; i < b.N; i++ {
SonicMarshal()
}
}
可以看到标准库的 JSON 序列化速度比 Sonic 要慢 3 倍
1478822 表示测试执行的次数
794.2 ns/op 表示每次操作耗时
-benchmem
统计消耗的内存
501 B/op 表示每次操作消耗的内存
10 allocs/op 每次操作申请的内存次数
评论区