• 回复@老老保老张工:你跟你老婆害羞要不要也上报呢?也许正好会安排任务哟。 2018-11-17
  • [原]压力测试

    综合技术 2018-11-16 阅读原文

    湖南快乐十分每天期数 www.91zhb.com 版权声明:本文为博主尹成联系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的博客

    责编内容by:YinCheng的博客阅读原文】。感谢您的支持!

    您可能感兴趣的

    Stress Testing React Easy State The first part is my usual intro the React Easy State. Skip ahead to the next section if you are already familiar with i...
    Android设备网络压力测试 网络测试的几个维度: 网络的性能 带宽:通过TCP测试来量度 时延:用ping命令量度 数据报丢失:用Iperf UDP测试来量度 Jitte...
    记一次Grpc接口压力测试&性能调优 〇、经验总结: 如果在压测过程中,压力始终上不去,可以考虑是施压机器并发上不去,或者被压机器请求处理不过来。 施压上不去或者被压机器请求处理不过来,是因为机器CPU瓶颈?内存瓶颈?端口数量瓶颈?逐步排查定位。 类似于...
    .net core 使用ConcurrentTest组件对方法进行压力测试... 工欲善其事,必先利其器!在编写服务中首先要有一个好的测试工具,在dontecore下性能测试有 BenchmarkDotNet ,只需要简单的配置一下就可以对方法的性能进行详细的测试。但有时候需要对不同并发下看其处理效率和延时统计查...
    “BCH压力测试日”准备工作开启,将允许任何人参与测试... 一个运营名为“BCH压力测试日”网站的团队计划让BCH网络在 一天内一次性处理数百万笔最低费用交易 。本周,Spendbch.io在开源项目Bitbox的帮助下,成功开发出一个工具, 允许任何人参与到测试 中来。 S...

  • 回复@老老保老张工:你跟你老婆害羞要不要也上报呢?也许正好会安排任务哟。 2018-11-17