fperf, 性能测试框架

分享于 

6分钟阅读

GitHub

  繁體 雙語
Framework of performance testing
  • 源代码名称:fperf
  • 源代码网址:http://www.github.com/shafreeck/fperf
  • fperf源代码文档
  • fperf源代码下载
  • Git URL:
    git://www.github.com/shafreeck/fperf.git
    Git Clone代码到本地:
    git clone http://www.github.com/shafreeck/fperf
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/shafreeck/fperf
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    基于的性能测试框架

    Build StatusGo Report Card

    fperf是一个强大而灵活的框架,允许你开发自己的基准测试工具。 创建客户端和发送请求,并发送并发和统计信息,然后向你报告关于qps和延迟的报告。 可以通过fperf创建强大的性能基准工具,只有一些关于如何发送请求的知识。

    使用内置客户端构建 fperf

    go install./bin/fperf 

    或者使用fperf生成

    
    go install./bin/fperf-build
    
    
    
    fperf-build./clients/*
    
    
    
    

    快速启动

    如果你不能等待运行 fperf 来查看它的工作方式,请按照下面的快速入门按钮来操作。

    自定义客户端

    你可以基于fperf框架构建自己的客户端。 实际上,客户端是实现 fperf.Client 或者更精确地说 fperf.UnaryClient 或者 fperf.StreamClient的客户端。

    一元客户端是发送请求的客户端。 它在请求回复模型中工作。 例如HTTP基准客户端是一元客户端。 请参阅 http客户端插件。

    typeClientinterface {
     Dial(addr string) error}typeUnaryClientinterface {
     ClientRequest() error}

    流客户端是通过流或者数据报发送和接收数据的客户端。 TCP和 UDP nomarlly可以作为流客户端实现。 google的grpc具有流模式,可以作为流客户端使用。 请参见 grpc_testing

    typeStreamClientinterface {
     ClientCreateStream(ctx context.Context) (Stream, error)
    }typeStreaminterface {
     DoSend() errorDoRecv() error}

    创建你自己的客户端的三个步骤

    1.Create"newClient"函数

    package demoimport (
     "fmt""github.com/shafreeck/fperf""time")type demoClient struct{}funcnewDemoClient(flag *fperf.FlagSet) fperf.Client {
     return &demoClient{}
    }

    2.Implement UnaryClient或者 StreamClient

    func(c *demoClient) Dial(addrstring) error {
     fmt.Println("Dial to", addr)
     returnnil}func(c *demoClient) Request() error {
     time.Sleep(100 * time.Millisecond)
     returnnil}

    3.Register 到 fperf

    funcinit() {
     fperf.Register("demo", dewDemoClient, "This is a demo client discription")
    }

    生成自定义客户端

    你的客户端应该位于同一个工作区( 与fperf相同的$GOPATH) )。

    使用fperf构建

    fperf-build 是构建定制客户端的工具。 它接受包的路径并创建文件 autoimport.go,在构建fperf时导入所有客户机,然后在构建之后清理生成的文件。

    从源安装

    
    go install./bin/fperf-build
    
    
    
    

    或者从github安装

    
    go get github.com/shafreeck/fperf/bin/fperf-build
    
    
    
    
    fperf-build [packages]

    packages 可以是 importPath ( 请参见go帮助 importPath ) 或者你的软件包的绝对路径

    例如使用fperf构建所有客户端的alang ( 使用相对 importPath )

    
    fperf-build./clients/* 
    
    
    
    

    运行基准

    命令行选项

    • -N: 每个 goroutine 发出的请求数

    • -async=false: 分别发送和接收 goroutine
      仅在流模式中使用。 每个流使用两个 groutine,一个用于发送,另一个用于 recving。 defualt是 false。

    • -burst=0: 突发大量请求,使用

    • -async=true
      -async选项一起使用。使用birst来限制发送goroutine发出的请求数。 默认为无限制。

    • -connection=1: 连接
      设置将创建的连接数。

    • -cpu=0: 设置 GOMAXPROCS,如果 0 使用默认值
      设置 GOMAXPROCS,默认为 0,这意味着使用golang默认选项。

    • -goroutine=1: 每流的goroutine数量
      设置iframe数,只需在测试是一元模式或者流模式时仅使用 1个流。 这是因为流不是线程安全

    • -influxdb=""为 influxdb,请在这里选项指定地址
      设置influxdb地址,fperf将自动创建一个fperf表并插入到qps和lantency度量中。

    • -delay=0: 发送下一个请求请求前等待时间
      设置发送请求前等待的时间

    • -recv=true: 执行接收操作
      仅在流模式中使用。 只需启用 recving goroutine。

    • -send=true: 仅在流模式中执行发送操作。 只需启用发送 goroutine。

    • -server="127.0.0.1: 8804":远程服务器的地址
      设置目标服务器的地址

    • -stream=1: 每个连接的流数
      设置将创建的流的数目。 仅在流模式中使用。

    • -tick=2s: 统计间隔
      设置输出间的间隔时间qps和延迟度量

    • -type="自动":设置调用类型:一元,流或者自动。 默认值为自动
      设置你的测试用例的类型。 这里选项可以在实现一元和流客户端时使用,并且在本例中fperf无法判断类型的。

    使用grafana绘制动态图

    TODO将数据导出到influxdb并使用grafana绘制图形


      framework  test  PERF  测试  性能  
    相关文章