0
点赞
收藏
分享

微信扫一扫

【干货分享】Go Testing 单元测试和基准测试


单元测试

测试文件命名必须为*_test.go,单元测试函数的签名必须是func TestFoo(t *testing.T) {},基准测试函数签名必须是 func BenchmarkBar(b *testing.B) {}

testMe.go 为被测试的源文件 testMe_test.go 为测试代码,代码附在最后

执行单元测试

go test testMe.go testMe_test.go -v

执行指定方法的测试 -test.run TestS2

go test testMe.go testMe_test.go -test.run TestS2 -v

测试覆盖率 -cover 覆盖率 -v 展示详细信息 -count 执行次数 等于 1 可以避免测试缓存 timeout 超时设置

go test testMe.go testMe_test.go -cover -v -count=1 -timeout 15s

测试覆盖率生成文件

go test testMe.go testMe_test.go -cover -v -coverprofile=coverage.out

测试覆盖率生成的文件分析

go tool cover -func=coverage.out

测试覆盖率生成的文件网页分析

go tool cover -html=coverage.out

递归测试文件夹下所有 *_test.go

go test ./...

基准测试

benchmarkMe.go 为被测试的源文件 benchmarkMe_test.go 为测试代码,代码附在最后

执行基准测试 -bench=. 代表执行所有可运行的benchmark

go test -bench=. benchmarkMe.go benchmarkMe_test.go

执行指定方法的基准测试

go test -benchmem -bench=Benchmark30fibo1 benchmarkMe.go benchmarkMe_test.go

显示内存分配信息

go test -benchmem -bench=. benchmarkMe.go benchmarkMe_test.go

代码:

testMe.go

package testMe

func f1(n int) int {
if n == 0 {
return 0
}
if n == 1 {
return 1
}
return f1(n-1) + f1(n-2)
}

func f2(n int) int {
if n == 0 {
return 0
}
if n == 1 {
return 2
}
return f2(n-1) + f2(n-2)
}
func s1(s string) int {
if s == "" {
return 0
}
n := 1
for range s {
n++
}
return n
}
func s2(s string) int {
return len(s)
}

testMe_test.go

package testMe

import "testing"

func TestS1(t *testing.T) {
if s1("123456789") != 9 {
t.Error(`s1("123456789") != 9`)
}
if s1("") != 0 {
t.Error(`s1("") != 0`)
}
}

func TestS2(t *testing.T) {
if s2("123456789") != 9 {
t.Error(`s2("123456789") != 9`)
}
if s2("") != 0 {
t.Error(`s2("") != 0`)
}
}

func TestF1(t *testing.T) {
if f1(0) != 0 {
t.Error(`f1(0) != 0`)
}
if f1(1) != 1 {
t.Error(`f1(1) != 1`)
}
if f1(2) != 1 {
t.Error(`f1(2) != 1`)
}
if f1(10) != 55 {
t.Error(`f1(10) != 55`)
}
}
func TestF2(t *testing.T) {
if f2(0) != 0 {
t.Error(`f2(0) != 0`)
}
if f2(1) != 1 {
t.Error(`f2(1) != 1`)
}
if f2(2) != 1 {
t.Error(`f2(2) != 1`)
}
if f2(10) != 55 {
t.Error(`f2(10) != 55`)
}
}

benchmarkMe.go

package testMe

import (
"fmt"
)

func fibo1(n int) int {
if n == 0 {
return 0
} else if n == 1 {
return 1
} else {
return fibo1(n-1) + fibo1(n-2)
}
}

func fibo2(n int) int {
if n == 0 || n == 1 {
return n
}
return fibo2(n-1) + fibo2(n-2)
}

func fibo3(n int) int {
fn := make(map[int]int)
for i := 0; i <= n; i++ {
var f int
if i <= 2 {
f = 1
} else {
f = fn[i-1] + fn[i-2]
}
fn[i] = f
}
return fn[n]
}

benchmarkMe_test.go

package testMe

import (
"testing"
)

var result int

func benchmarkfibo1(b *testing.B, n int) {
var r int
for i := 0; i < b.N; i++ {
r = fibo1(n)
}
result = r
}

func benchmarkfibo2(b *testing.B, n int) {
var r int
for i := 0; i < b.N; i++ {
r = fibo2(n)
}
result = r
}
func benchmarkfibo3(b *testing.B, n int) {
var r int
for i := 0; i < b.N; i++ {
r = fibo3(n)
}
result = r
}

func Benchmark30fibo1(b *testing.B) {
benchmarkfibo1(b, 30)
}

func Benchmark30fibo2(b *testing.B) {
benchmarkfibo2(b, 30)
}

func Benchmark30fibo3(b *testing.B) {
benchmarkfibo3(b, 30)
}

func Benchmark50fibo1(b *testing.B) {
benchmarkfibo1(b, 50)
}
func Benchmark50fibo2(b *testing.B) {
benchmarkfibo2(b, 50)
}
func Benchmark50fibo3(b *testing.B) {
benchmarkfibo3(b, 50)
}

Go Mastering 学习笔记,把常用命令汇总在一起方便复习和日常使用。代码都是直接参照书上的0.0

 最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

【干货分享】Go Testing 单元测试和基准测试_软件测试还包括软件学习路线图,50多天的上课视频、16个突击实战项目,80余个软件测试用软件,37份测试文档,70个软件测试相关问题,40篇测试经验级文章,上千份测试真题分享,还有2020软件测试面试宝典,还有软件测试求职的各类精选简历,希望对大家有所帮助…..

在我的QQ技术交流群里(技术交流和资源共享,广告勿扰)

可以自助拿走,群号:175317069 群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦

【干货分享】Go Testing 单元测试和基准测试_接口测试_02



举报

相关推荐

0 条评论