Code Monkey home page Code Monkey logo

ghz's Introduction


Logo

ghz

Release Build Status Go Report Card License Donate Buy me a coffee

Simple gRPC benchmarking and load testing tool inspired by hey and grpcurl.

Documentation

All documentation at ghz.sh.

Usage

usage: ghz [<flags>] [<host>]

Flags:
  -h, --help                Show context-sensitive help (also try --help-long and --help-man).
      --config=             Path to the JSON or TOML config file that specifies all the test run settings.
      --proto=              The Protocol Buffer .proto file.
      --protoset=           The compiled protoset file. Alternative to proto. -proto takes precedence.
      --call=               A fully-qualified method name in 'package.Service/method' or 'package.Service.Method' format.
  -i, --import-paths=       Comma separated list of proto import paths. The current working directory and the directory of the protocol buffer file are automatically added to the import list.
      --cacert=             File containing trusted root certificates for verifying the server.
      --cert=               File containing client certificate (public key), to present to the server. Must also provide -key option.
      --key=                File containing client private key, to present to the server. Must also provide -cert option.
      --cname=              Server name override when validating TLS certificate - useful for self signed certs.
      --skipTLS             Skip TLS client verification of the server's certificate chain and host name.
      --insecure            Use plaintext and insecure connection.
      --authority=          Value to be used as the :authority pseudo-header. Only works if -insecure is used.
  -c, --concurrency=50      Number of requests to run concurrently. Total number of requests cannot be smaller than the concurrency level. Default is 50.
  -n, --total=200           Number of requests to run. Default is 200.
  -q, --qps=0               Rate limit, in queries per second (QPS). Default is no rate limit.
  -t, --timeout=20          Timeout for each request in seconds. Default is 20, use 0 for infinite.
  -z, --duration=0          Duration of application to send requests. When duration is reached, application stops and exits. If duration is specified, n is ignored. Examples: -z 10s -z 3m.
  -x, --max-duration=0      Maximum duration of application to send requests with n setting respected. If duration is reached before n requests are completed, application stops and exits.
                            Examples: -x 10s -x 3m.
      --connections=1       Number of connections to use. Concurrency is distributed evenly among all the connections. Default is 1.
  -d, --data=               The call data as stringified JSON. If the value is '@' then the request contents are read from stdin.
  -D, --data-file=          File path for call data JSON file. Examples: /home/user/file.json or ./file.json.
  -b, --binary              The call data comes as serialized binary message or multiple count-prefixed messages read from stdin.
  -B, --binary-file=        File path for the call data as serialized binary message or multiple count-prefixed messages.
  -m, --metadata=           Request metadata as stringified JSON.
  -M, --metadata-file=      File path for call metadata JSON file. Examples: /home/user/metadata.json or ./metadata.json.
      --stream-interval=0   Interval for stream requests between message sends.
      --reflect-metadata=   Reflect metadata as stringified JSON used only for reflection request.
  -o, --output=             Output path. If none provided stdout is used.
  -O, --format=             Output format. One of: summary, csv, json, pretty, html, influx-summary, influx-details. Default is summary.
      --connect-timeout=10  Connection timeout in seconds for the initial connection dial. Default is 10.
      --keepalive=0         Keepalive time in seconds. Only used if present and above 0.
      --name=               User specified name for the test.
      --tags=               JSON representation of user-defined string tags.
      --cpus=8              Number of cpu cores to use.
  -v, --version             Show application version.

Args:
  [<host>]  Host and port to test.

Go Package

report, err := runner.Run(
    "helloworld.Greeter.SayHello",
    "localhost:50051",
    runner.WithProtoFile("greeter.proto", []string{}),
    runner.WithDataFromFile("data.json"),
    runner.WithInsecure(true),
)

if err != nil {
    fmt.Println(err.Error())
    os.Exit(1)
}

printer := printer.ReportPrinter{
    Out:    os.Stdout,
    Report: report,
}

printer.Print("pretty")

Development

Golang 1.11+ is required.

make # run all linters, tests, and produce code coverage
make lint # run all linters
make test # run tests
make cover # run tests and produce code coverage

V=1 make # more verbosity
OPEN_COVERAGE=1 make cover # open code coverage.html after running

Credit

Icon made by Freepik from www.flaticon.com is licensed by CC 3.0 BY

License

Apache-2.0

ghz's People

Contributors

bojand avatar ezsilmar avatar kenju avatar bufdev avatar jamisonhyatt avatar nlohmann avatar tab1293 avatar dependabot[bot] avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.