• 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)

    实时了解作者更多技术文章,技术心得,请关注微信公众号“轩脉刃的刀光剑影”

    本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,但是必须保留本文的署名叶剑峰(包含链接http://www.cnblogs.com/yjf512/),且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系

  • 相关阅读:
    Ddr2,ddr3,ddr4内存条的读写速率
    Ddr2,ddr3,ddr4内存条的读写速率
    【VS开发】获取CPU tick tick 周期
    【VS开发】获取CPU tick tick 周期
    【VS开发】malloc申请内存错误分析
    【VS开发】malloc申请内存错误分析
    【VS开发】Return与Exit的区别
    【VS开发】Return与Exit的区别
    【VS开发】C/C++预编译命令
    【VS开发】C/C++预编译命令
  • 原文地址:https://www.cnblogs.com/yjf512/p/2865915.html
Copyright © 2020-2023  润新知