golang test测试实例

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

本文的目的是对mymysql进行单元测试和性能测试

准备工作:

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

2 在mysql建表和初始化数据(db是test)

1
2
3
4
5
6
7
8
9
10
11
12
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的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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的代码:

1
2
3
4
5
6
7
8
9
10
package mymysql
import(
      "testing"
)
func Test_getAdmin(t *testing.T) {
     username, _ := getAdmin(1)
     if  (username != "admin" ) {
          t.Error( "getAdmin get data error" )
     }
}<br>这里做单元测试的,测试getAdmin函数

写到这里你就可以在命令行中运行go test了

Image(4)

这里有个 -v参数,如果不加这个参数的话,只会显示错误的测试用例,否则就显示所有的测试用例(成功 + 错误)

6 下面做性能测试

mymysql_b_test.go的代码:

1
2
3
4
5
6
7
8
9
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)






本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/archive/2013/01/18/2865915.html,如需转载请自行联系原作者

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
6月前
|
测试技术 程序员 Go
Go语言测试简明指南:深度解读go test命令
总的来说,go test是 Go 语言中一个强而有力的工具,每个 Go 程序员都应该掌握并把它融入到日常的开发和调试过程中。就像是一个眼镜过滤出的太阳,让我们在宽阔的代码海洋中游泳,而不是淹没。用好它,让我们的代码更健壮,让我们的生产力更强效。
529 23
|
7月前
|
Go
在golang中发起http请求以获取访问域名的ip地址实例(使用net, httptrace库)
这只是追踪我们的行程的简单方法,不过希望你跟着探险家的脚步,即使是在互联网的隧道中,也可以找到你想去的地方。接下来就是你的探险之旅了,祝你好运!
370 26
|
10月前
|
Go 测试技术
Go 常见 Test
Go语言中的测试方法主要分为三种类型:单元测试、基准测试和示例测试。 首先: 你需要先导入testing包。 在包目录中,所有后缀为*_test.go的源代码文件都是go test测试的一部分,并且不会被go build编译到最终的可执行文件中。
149 9
|
数据采集 自然语言处理 数据库
深入体验阿里云通义灵码:测试与实例展示
阿里云通义灵码是一款强大的代码生成工具,支持自然语言描述需求,快速生成高质量代码。它在测试、代码质量和用户体验方面表现出色,能够高效地生成 Python 和 Java 等语言的代码,助力开发者提升开发效率和代码质量。无论是新手还是资深开发者,都能从中受益匪浅。
深入体验阿里云通义灵码:测试与实例展示
|
机器学习/深度学习 JSON 算法
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
5118 3
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
217 2
|
测试技术 Go 开发者
掌握Golang测试:从入门到实践
【8月更文挑战第31天】
305 0
|
JavaScript 前端开发 测试技术
Vue.js开发者必看!Vue Test Utils携手端到端测试,打造无懈可击的应用体验,引领前端测试新风尚!
【8月更文挑战第30天】随着Vue.js的普及,构建可靠的Vue应用至关重要。测试不仅能确保应用质量,还能提升开发效率。Vue Test Utils作为官方测试库,方便进行单元测试,而结合端到端(E2E)测试,则能构建全面的测试体系,保障应用稳定性。本文将带你深入了解如何使用Vue Test Utils进行单元测试,通过具体示例展示如何测试组件行为;并通过Cypress进行E2E测试,确保整个应用流程的正确性。无论是单元测试还是E2E测试,都能显著提高Vue应用的质量,让你更加自信地交付高质量的应用。
296 0
|
Java 测试技术 API
SpringBoot单元测试快速写法问题之创建 PorkInst 实例如何解决
SpringBoot单元测试快速写法问题之创建 PorkInst 实例如何解决
|
Java 测试技术
Java SpringBoot Test 单元测试中包括多线程时,没跑完就结束了
Java SpringBoot Test 单元测试中包括多线程时,没跑完就结束了
318 0

推荐镜像

更多