• 常说两种语言可防老年痴呆 2019-03-15
  • 【聚焦军博会】216个代表团2037个项目将亮相军博会 11大军工集团全部参展 2019-03-15
  • [中国新闻]韩朝军方商定重启陆海军事通信渠道 2019-03-07
  • 第十三届全国人民代表大会常务委员会委员长简历 2019-03-01
  • 乌兰察布(北京)招商路演会 2019-02-28
  • 降电价,还有哪些空间(聚焦高质量发展·降低企业用能成本④) 2019-02-28
  • 《古汉字发展论》简介 2019-02-10
  • 推动生态文明建设迈上新台阶——全国生态环境保护大会释放四大新信号 2019-01-25
  • 回复@老老保老张工:你跟你老婆害羞要不要也上报呢?也许正好会安排任务哟。 2018-11-17
  • 综合技术

    快乐十分有什么规律吗:[原]压力测试

    湖南快乐十分每天期数 www.91zhb.com 微信扫一扫,分享到朋友圈

    [原]压力测试
    0

    版权声明:本文为博主尹成联系QQ77025077,微信18510341407原创文章,欢迎转载侵权不究。 https://blog.csdn.net/yincheng01/article/details/84136139

    压力测试概述

    压力测试用来检测函数(方法)的性能,和编写单元功能测试的方法类似,但需要注意以下几点:

    • 文件名命名规则:xxx_test.go
    • 函数名命名规则:func BenchXxx(b *testing.B),其中XXX可以是任意字母数字的组合,但是首字母不能是小写字母
    • 函数内必须使用b.N进行轮询测试
    • 函数内可以选择使用b.ReportAllocs()汇报内存开销
    • 在GoLandIDE中你可以在待测包上右键,Run->gobentch xxx,以执行整包的压力测试,默认从上向下依次执行所有
    • 终端执行当前包下的所有压力测试:
    go test -bench=.
    • 终端执行多次求平均值
    go test -bench=. -count=3

    定义待测的工具函数

    这里给出了斐波那契数列的递归和非递归两种算法实现

    //获取斐波那契数列第n项的递归实现
    //1,1,2,3,5,8,13,21,34,55
    func GetFibonacci1(n int) int {
    	if n == 0 || n == 1 {
    		return 1
    	} else {
    		return GetFibonacci1(n-1) + GetFibonacci1(n-2)
    	}
    }
    
    //获取斐波那契数列第n项的非递归实现
    //1,1,2,3,5,8,13,21,34,55
    func GetFibonacci2(n int) int {
    	x, y := 1, 1
    	for i := 0; i < n; i++ {
    		x, y = y, x+y
    	}
    	return x
    }

    定义测试用例

    //导入测试工具包
    import "testing"
    
    //测试用例1:多次测试函数GetFibonacci1,获得平均执行时间
    func BenchmarkGetFibonacci1(b *testing.B) {
    	b.Log("BenchmarkGetFibonacci1")
    	
    	//汇报内存开销
    	b.ReportAllocs()
    	for i := 0; i < b.N; i++ {
    		GetFibonacci1(10)
    	}
    }
    
    //测试用例2:多次测试函数GetFibonacci2,获得平均执行时间
    func BenchmarkGetFibonacci2(b *testing.B) {
    	b.Log("BenchmarkGetFibonacci2")
    	
    	//汇报内存开销
    	b.ReportAllocs()
    	for i := 0; i < b.N; i++ {
    		GetFibonacci2(10)
    	}
    }

    执行结果

    不难看出,算法2的执行效率6.55纳秒/次要远远优于算法1的503纳秒/次

    定义待测试的结构体

    //导入包
    import (
    	"encoding/json"
    	"os"
    	"fmt"
    )
    
    //定义待测的结构体
    type Student struct {
    	Name string
    	Age  int
    }
    
    //将当前对象存入JSON文件
    func (s *Student) Save() error {
    	dstFile, _ := os.OpenFile("d:/temp/student.json", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
    	defer dstFile.Close()
    
    	//fmt.Println("Save:s=",s)
    	encoder := json.NewEncoder(dstFile)
    	err := encoder.Encode(s)
    	if err != nil {
    		fmt.Println("保存失败,err=", err)
    		return err
    	}
    
    	//fmt.Println("保存成功!")
    	return nil
    }
    
    //读取JSON文件,转化为一个student对象,加载的结果存入s中
    func (s *Student) Load() error {
    	srcFile, _ := os.OpenFile("d:/temp/student.json", os.O_RDONLY, 0666)
    	defer srcFile.Close()
    	decoder := json.NewDecoder(srcFile)
    	err := decoder.Decode(s)
    	if err != nil {
    		fmt.Println("加载失败,err=", err)
    		return err
    	}
    
    	//fmt.Println("加载成功!")
    	return nil
    }

    定义结构体函数的性能测试用例

    //导入测试工具包
    import "testing"
    
    //测试用例1:多次测试学生的保存方法,获得平均执行时间
    func BenchmarkStudentSave(b *testing.B) {
    	b.Log("BenchmarkStudentSave")
    	
    	//汇报内存开销
    	b.ReportAllocs()
    	for i := 0; i < b.N; i++ {
    		student := &Student{"张全蛋", 20}
    		student.Save()
    	}
    }
    
    //测试用例2:多次测试学生的加载方法,获得平均执行时间
    func BenchmarkStudentLoad(b *testing.B) {
    	b.Log("BenchmarkStudentLoad")
    	
    	//汇报内存开销
    	b.ReportAllocs()
    	for i := 0; i < b.N; i++ {
    		student := &Student{}
    		student.Load()
    	}
    }

    执行效果

    学院Go语言视频主页

    https://edu.csdn.net/lecturer/1928

    [清华团队带你实战区块链开发]

    ( https://ke.qq.com/course/344443?tuin=3d17195d
    )

    扫码获取海量视频及源码 QQ群:

    721929980

    阅读原文...

    YinCheng的博客

    专访云穹智能庄慎:技术与空间融合是必然趋势

    上一篇

    谷歌Photos网页版获更新:采用与软件版配对的新Material UI

    下一篇

    您也可能喜欢

    评论已经被关闭。

    插入图片
    [原]压力测试

    长按储存图像,分享给朋友

  • 常说两种语言可防老年痴呆 2019-03-15
  • 【聚焦军博会】216个代表团2037个项目将亮相军博会 11大军工集团全部参展 2019-03-15
  • [中国新闻]韩朝军方商定重启陆海军事通信渠道 2019-03-07
  • 第十三届全国人民代表大会常务委员会委员长简历 2019-03-01
  • 乌兰察布(北京)招商路演会 2019-02-28
  • 降电价,还有哪些空间(聚焦高质量发展·降低企业用能成本④) 2019-02-28
  • 《古汉字发展论》简介 2019-02-10
  • 推动生态文明建设迈上新台阶——全国生态环境保护大会释放四大新信号 2019-01-25
  • 回复@老老保老张工:你跟你老婆害羞要不要也上报呢?也许正好会安排任务哟。 2018-11-17