golang test測試實例


本文的目的是對mymysql進行單元測試和性能測試

准備工作:

1 go get github.com/ziutek/mymysql/thrsafe

2 在mysql建表和初始化數據(db是test)

drop table if exists admin;
CREATE TABLE `admin` (
    `adminid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `username` varchar(20) NOT NULL DEFAULT '' COMMENT '后台用戶名',
    `password` char(32) NOT NULL DEFAULT '' COMMENT '密碼,md5存',
    PRIMARY KEY(`adminid`)
)
COMMENT='后台用戶信息表'
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

insert into admin set adminid=1, username='admin', password='21232f297a57a5a743894a0e4a801fc3';

3 gopath下建立mymysql

Image(3)

4 mymysql.go的代碼:

package mymysql
import(
     "log"
     "github.com/ziutek/mymysql/mysql"
     _ "github.com/ziutek/mymysql/native"
)
func getAdmin(adminid int) (string, string){
     db := mysql.New("tcp", "", "127.0.0.1:3306", "root", "password", "test")
     err := db.Connect()
     if err != nil {
          panic(err)
     }
     rows, res, err := db.Query("select * from admin where adminid=%d", adminid)
     if err != nil {
          panic(err)
     }
     if len(rows) < 1 {
          log.Panic("rows error")
     }
     row := rows[0]
     first := res.Map("username")
     second := res.Map("password")
     username, password := row.Str(first), row.Str(second)
     return username, password
}

很好理解,根據adminid獲取用戶名和密碼

5 mymysql_test.go的代碼:

package mymysql
import(
     "testing"
)
func Test_getAdmin(t *testing.T) {
    username, _ := getAdmin(1)
    if (username != "admin") {
         t.Error("getAdmin get data error")
    }
}
這里做單元測試的,測試getAdmin函數

寫到這里你就可以在命令行中運行go test了

Image(4)

這里有個 -v參數,如果不加這個參數的話,只會顯示錯誤的測試用例,否則就顯示所有的測試用例(成功 + 錯誤)

6 下面做性能測試

mymysql_b_test.go的代碼:

package mymysql
import (
     "testing"
)
func Benchmark_getAdmin(b *testing.B){
     for i := 0; i < b.N; i++ { //use b.N for looping
            getAdmin(1)
    }
}

然后運行 go test -v -bench=".*"

這里的-bench是可以指定運行的用例

Image(5)

返回結果表示這個測試用例在1s中內運行了2000次,每次調用大約用了891898ns

7 用性能測試生成CPU狀態圖

使用命令:

go test -bench=".*" -cpuprofile=cpu.prof -c

cpuprofile是表示生成的cpu profile文件

-c是生成可執行的二進制文件,這個是生成狀態圖必須的,它會在本目錄下生成可執行文件mymysql.test

然后使用go tool pprof工具

go tool pprof mymysql.test cpu.prof

 

調用web(需要安裝graphviz)

Image(6)

顯示svg文件已經生成了

Image(7)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM