目前,当我在golang中的一个小函数上进行golang基准测试时,我得到了以下结果
go test -bench=.
输出量:
BenchmarkBcrypt10-4 1000000000 0.08 ns/op
BenchmarkBcrypt15-4 1 2607594388 ns/op
BenchmarkBcrypt18-4 1 20472224268 ns/op
PASS
有没有办法将时间单位从ns改为milisecons或seconds?
更新:
这是我的基准测试文件(bcrypt_test.go
):
package main
import "testing"
func BenchmarkBcrypt10(b *testing.B){
HashPassword("my pass", 10)
}
func BenchmarkBcrypt15(b *testing.B){
HashPassword("my pass", 15)
}
func BenchmarkBcrypt18(b *testing.B){
HashPassword("my pass", 18)
}
我的main.go
:
package main
import (
"fmt"
"golang.org/x/crypto/bcrypt"
)
func HashPassword(password string, cost int) (string, error) {
bytes, err := bcrypt.GenerateFromPassword([]byte(password), cost)
return string(bytes), err
}
func CheckPasswordHash(password, hash string) bool {
err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
return err == nil
}
func main() {
password := "secret"
hash, _ := HashPassword(password, 12) // ignore error for the sake of simplicity
fmt.Println("Password:", password)
fmt.Println("Hash: ", hash)
match := CheckPasswordHash(password, hash)
fmt.Println("Match: ", match)
}
2条答案
按热度按时间sh7euo9m1#
我有完美的解决方案给你!
安装所需的benchstat工具:
生成文件:
当然,你不需要使用makefile。如果你喜欢的话,直接在shell中运行命令就可以了。
样品输出:
修改的测试文件:
一些有用的链接:
nukf8bse2#
乍一看...您可以尝试
fmt.Println(b.Elapsed() / time.Duration(b.N))
来解决此问题这段代码将产生下一个输出
正如您在大型迭代计数上看到的,它非常接近标准基准测试的输出