您的位置 首页 golang

Go语言使用gorm对MySQL进行性能测试

之前写过了Go语言gorm框架MySQL实践,其中对gorm框架在操作MySQL的各种基础实践,下面分享一下如何使用gorm框架对MySQL直接进行性能测试的简单实践。

框架支持

这里我使用了一个原始的Go语言版本的 FunTester 测试框架,现在只有一个基本的方法,实在是因为Go语言特性太强了。框架设计的主要思路之一就是利用Go语言的闭包和方法参数特性,将一个 func() 当做性能测试的主题,通过不断运行这个 func() 来实现性能测试。当然还有另外一个思路就是运行一个多线程任务类,类似 Java 版本的 com.funtester.base.constaint.ThreadBase 抽象类,这样可以设置一些类的属性,绑定一些测试资源,适配更多的测试场景。

 // ExecuteRoutineTimes
// @Description: FunTester性能测试执行框架
// @param fun 待执行方法
// @param times 次数
// @param thread 线程数
func ExecuteRoutineTimes(fun func(), t, r int) {
 c := make(chan int) //确认所有线程都结束
 key := false        //用于控制所有线程一起结束
 start := futil.Milli()
 for i := 0; i < r; i++ {
  go func() {
   sum := 0
   for i := 0; i < t; i++ {
    if key {
     break
    }
    fun()
    sum++
   }
   key = true
   c <- sum
  }()
 }
 total := 0
 for i := 0; i < r; i++ {
  num := <-c
  total += num
 }
 end := futil.Milli()
 diff := end - start
 //total := thread * times
 log.Printf("总耗时: %f", float64(diff)/1000)

 log.Printf("请求总数: %d", total)
 log.Printf("QPS: %f", float64(total)/float64(diff)*1000.0)
}
  

select

下面演示select的性能测试,这里我用了随机ID查询的场景。

 func TestSelectP(t *testing.T)  {
 execute.ExecuteRoutineTimes(func() {
  var f Funtester
  drive.Where("id = ?", futil.RangInt(35, 20000)).First(&f)
 },1000,100)
}
  

delete

这里我使用从35开始递增的ID进行删除。

 func TestDeleteP(t *testing.T) {
 var index int32 = 35
 execute.ExecuteRoutineTimes(func() {
  id := atomic.AddInt32(&index, 1)
  drive.Where("id = ?", id).Delete(&Funtester{})
 },1000,100)
}
  

update

这里使用了select的用例部分,随机ID,然后更新name字段,随机10个长度的字符串。

 func TestUpdateP(t *testing.T) {
 execute.ExecuteRoutineTimes(func() {
  drive.Where("id = ?",futil.RangInt(35, 20000)).Update("name",futil.RandomStr(10))
 },1000,100)
}
  

inset

这里用到了 FunTester 字段都是随机生成。

 func TestInsertP(t *testing.T) {
 execute.ExecuteRoutineTimes(func() {
  drive.Create(&Funtester{Name: futil.RandomStr(10),Age: futil.RandomInt(100)})
 },1000,100)
}
  

FunTester构造方法

 type Funtester struct {
 gorm.Model
 Name string
 Age  int
}
  

到这里可以看出,性能测试框架用到的都是gorm框架的基础API使用,这里MySQL连接池的管理工作完全交给了gorm框架完成,看资料说非常牛逼,我们只需要设置几个参数。这个使用体现很像 HttpClient 设置 HTTP 连接池类似,这里我们也可以看出这些优秀的框架使用起来都是非常简单的。

PS:关于gorm的基础使用的请参考上一期的文章Go语言gorm框架MySQL实践。

Have Fun ~ Tester !

  • FunTester2021年总结
  • FunTester原创大赏
  • 性能测试专题【FunTester原创】
  • Groovy语言学习笔记大赏【FunTester】
  • 性能测试中异步展示测试进度
  • 下单延迟10s撤单性能测试
  • 性能测试误差对比研究(四)
  • 如何选择API测试工具
  • 性能框架哪家强—JMeter、K6、locust、FunTester横向对比
  • 左移测试
  • Java&Go三种HTTP客户端性能测试
  • 浏览器测试的三大挑战及解决方案【译】
  • 单元测试再出发
  • 敬畏用户
  • 千万级日志回放引擎设计稿

文章来源:智云一二三科技

文章标题:Go语言使用gorm对MySQL进行性能测试

文章地址:https://www.zhihuclub.com/100845.shtml

关于作者: 智云科技

热门文章

网站地图