zoukankan      html  css  js  c++  java
  • go 学习笔记(3)benchmark

    benchmark函数以benchmark开头

    benchmark的case一般会跑b.N次,且每次执行都如此

    在执行过程中会根据实际case的执行时间是否稳定会增加b.N的次数以达到稳态。

    package main
    
    import (
    	"fmt"
    	"testing"
    )
    
    func TestPrint(t *testing.T) {
    	res := Print1to20()
    	fmt.Println("hey")
    	if res != 210 {
    		t.Errorf("wrong result of Print1to20")
    	}
    }
    
    func TestPrint1(t *testing.T) {
    	res := Print1to20()
    	res++
    	if res != 211 {
    		t.Errorf("wrong result of Print1to20")
    	}
    }
    
    func TestMain(m *testing.M) {
    	fmt.Println("starting...")
    	m.Run()
    }
    
    func BenchmarkAll(b *testing.B) {
    	for n := 0; n < b.N; n++ {
    		Print1to20()
    	}
    }
    

      执行命令:

    go test -bench=.
    

      

    BenchmarkAll执行了200000000,每次执行耗时8.29ns

    Benchmark函数首字母必须大写

    Benchmark函数也是普通的test case之一,受TestMain限制

    go test -benchmark -----只跑benchmark case

    package main
    
    import (
    	"fmt"
    	"testing"
    )
    
    func TestPrint(t *testing.T) {
    	res := Print1to20()
    	fmt.Println("hey")
    	if res != 210 {
    		t.Errorf("wrong result of Print1to20")
    	}
    }
    
    func TestPrint1(t *testing.T) {
    	res := Print1to20()
    	res++
    	if res != 211 {
    		t.Errorf("wrong result of Print1to20")
    	}
    }
    
    func aaa(n int) int {
    	return n
    }
    
    func TestMain(m *testing.M) {
    	fmt.Println("starting...")
    	m.Run()
    }
    
    func BenchmarkAll(b *testing.B) {
    	for n := 0; n < b.N; n++ {
    		aaa(n)
    	}
    }
    

      要注意benchmark函数执行能在一定时间内达到稳态,否则永远执行不完,没有结果

  • 相关阅读:
    springmvc中request的线程安全问题
    日志帮助类
    模态框的实现
    getopts的使用方法
    自动生成头文件的脚本
    shell脚本中出现图形化界面
    Linux Centos关机命令
    Linux下IP的存储位置
    tar只解压tar包中某个文件
    Swift 笔记1
  • 原文地址:https://www.cnblogs.com/saryli/p/11345569.html
Copyright © 2011-2022 走看看