天天看點

golang test測試執行個體1 go get github.com/ziutek/mymysql/thrsafe2 在mysql建表和初始化資料(db是test)3 gopath下建立mymysql4 mymysql.go的代碼:5 mymysql_test.go的代碼:6 下面做性能測試7 用性能測試生成CPU狀态圖

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

準備工作:

1

2

3

4

5

6

7

8

9

10

11

12

<code>drop table</code><code>if</code> <code>exists admin;</code>

<code>create table `admin` (</code>

<code>    </code><code>`adminid` int(10) unsigned not null auto_increment,</code>

<code>    </code><code>`username` varchar(20) not null default</code><code>''</code> <code>comment</code><code>'背景使用者名'</code><code>,</code>

<code>    </code><code>`password` char(32) not null default</code><code>''</code> <code>comment</code><code>'密碼,md5存'</code><code>,</code>

<code>    </code><code>primary key(`adminid`)</code>

<code>)</code>

<code>comment=</code><code>'背景使用者資訊表'</code>

<code>collate=</code><code>'utf8_general_ci'</code>

<code>engine=innodb;</code>

<code>insert into admin set adminid=1, username=</code><code>'admin'</code><code>, password=</code><code>'21232f297a57a5a743894a0e4a801fc3'</code><code>;</code>

golang test測試執行個體1 go get github.com/ziutek/mymysql/thrsafe2 在mysql建表和初始化資料(db是test)3 gopath下建立mymysql4 mymysql.go的代碼:5 mymysql_test.go的代碼:6 下面做性能測試7 用性能測試生成CPU狀态圖

13

14

15

16

17

18

19

20

21

22

23

24

25

<code>package mymysql</code>

<code>import(</code>

<code>     </code><code>"log"</code>

<code>     </code><code>"github.com/ziutek/mymysql/mysql"</code>

<code>     </code><code>_</code><code>"github.com/ziutek/mymysql/native"</code>

<code>func getadmin(adminid int) (string, string){</code>

<code>     </code><code>db := mysql.new(</code><code>"tcp"</code><code>,</code><code>""</code><code>,</code><code>"127.0.0.1:3306"</code><code>,</code><code>"root"</code><code>,</code><code>"password"</code><code>,</code><code>"test"</code><code>)</code>

<code>     </code><code>err := db.connect()</code>

<code>     </code><code>if</code> <code>err != nil {</code>

<code>          </code><code>panic(err)</code>

<code>     </code><code>}</code>

<code>     </code><code>rows, res, err := db.query(</code><code>"select * from admin where adminid=%d"</code><code>, adminid)</code>

<code>     </code><code>if</code> <code>len(rows) &lt; 1 {</code>

<code>          </code><code>log.panic(</code><code>"rows error"</code><code>)</code>

<code>     </code><code>row := rows[0]</code>

<code>     </code><code>first := res.map(</code><code>"username"</code><code>)</code>

<code>     </code><code>second := res.map(</code><code>"password"</code><code>)</code>

<code>     </code><code>username, password := row.str(first), row.str(second)</code>

<code>     </code><code>return</code> <code>username, password</code>

<code>}</code>

很好了解,根據adminid擷取使用者名和密碼

<code>     </code><code>"testing"</code>

<code>func test_getadmin(t *testing.t) {</code>

<code>    </code><code>username, _ := getadmin(1)</code>

<code>    </code><code>if</code> <code>(username !=</code><code>"admin"</code><code>) {</code>

<code>         </code><code>t.error(</code><code>"getadmin get data error"</code><code>)</code>

<code>    </code><code>}</code>

<code>}&lt;br&gt;這裡做單元測試的,測試getadmin函數</code>

寫到這裡你就可以在指令行中運作go test了

golang test測試執行個體1 go get github.com/ziutek/mymysql/thrsafe2 在mysql建表和初始化資料(db是test)3 gopath下建立mymysql4 mymysql.go的代碼:5 mymysql_test.go的代碼:6 下面做性能測試7 用性能測試生成CPU狀态圖

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

mymysql_b_test.go的代碼:

<code>import (</code>

<code>func benchmark_getadmin(b *testing.b){</code>

<code>     </code><code>for</code> <code>i := 0; i &lt; b.n; i++ {</code><code>//use b.n for looping</code>

<code>            </code><code>getadmin(1)</code>

然後運作 go test -v -bench=".*"

這裡的-bench是可以指定運作的用例

golang test測試執行個體1 go get github.com/ziutek/mymysql/thrsafe2 在mysql建表和初始化資料(db是test)3 gopath下建立mymysql4 mymysql.go的代碼:5 mymysql_test.go的代碼:6 下面做性能測試7 用性能測試生成CPU狀态圖

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

使用指令:

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)

golang test測試執行個體1 go get github.com/ziutek/mymysql/thrsafe2 在mysql建表和初始化資料(db是test)3 gopath下建立mymysql4 mymysql.go的代碼:5 mymysql_test.go的代碼:6 下面做性能測試7 用性能測試生成CPU狀态圖

顯示svg檔案已經生成了

golang test測試執行個體1 go get github.com/ziutek/mymysql/thrsafe2 在mysql建表和初始化資料(db是test)3 gopath下建立mymysql4 mymysql.go的代碼:5 mymysql_test.go的代碼:6 下面做性能測試7 用性能測試生成CPU狀态圖