ghz icon indicating copy to clipboard operation
ghz copied to clipboard

gRPC python service doesn't work without --proto

Open abhics1002 opened this issue 1 year ago • 3 comments

I am trying to load test python grpc service using this doc (https://grpc.io/docs/languages/python/quickstart/) but the ghz doesn't work without --proto option. even if server reflection is enabled.

$ grpcurl -plaintext -d '{"name":"test"}' localhost:50051 helloworld.Greeter.SayHello { "message": "Hello, test!" }

$ ghz --insecure -n 100 --call helloworld.Greeter.SayHello --data '{"name":"test"}' --rps 10 localhost:50051 Symbol not found: helloworld.Greeter.SayHello

error from debug logs:

{"level":"debug","time":"2023-06-01T18:31:52.8496-07:00","message":"Start Run","config":{"proto":"","protoset":"","call":"helloworld.Greeter.SayHello","cacert":"","cert":"","key":"","count-errors":false,"skipTLS":false,"skipFirst":0,"cname":"","authority":"","insecure":true,"total":100,"concurrency":50,"concurrency-schedule":"const","concurrency-start":0,"concurrency-end":0,"concurrency-step":1,"concurrency-step-duration":"0s","concurrency-max-duration":"0s","connections":1,"rps":10,"duration":"0s","duration-stop":"close","max-duration":"0s","timeout":"20s","data":{"name":"test"},"data-file":"","binary-file":"","metadata-file":"","stream-interval":"0s","stream-call-duration":"0s","stream-call-count":0,"stream-dynamic-messages":false,"output":"","format":"summary","connect-timeout":"10s","keepalive":"0s","cpus":10,"debug":"test.log","host":"localhost:50051","load-schedule":"const","load-start":0,"load-end":0,"load-step":0,"load-step-duration":"0s","load-max-duration":"0s","lb-strategy":"","max-recv-message-size":"","max-send-message-size":"","disable-template-functions":false,"disable-template-data":false}}
{"level":"debug","time":"2023-06-01T18:31:52.850537-07:00","message":"Creating client connection","options":[{},{}]}
{"level":"error","time":"2023-06-01T18:31:52.858972-07:00","message":"Error from run: Symbol not found: helloworld.Greeter.SayHello","stacktrace":"main.main\n\t./main.go:337\nruntime.main\n\truntime/proc.go:250"}

this works fine with --proto option.

$ ghz --insecure -n 100 --call helloworld.Greeter.SayHello --data '{"name":"test"}' --rps 10 --proto=/Users//Desktop/grpc/grpc/examples/protos/helloworld.proto localhost:50051

Summary: Count: 100 Total: 10.00 s Slowest: 12.25 ms Fastest: 0.81 ms Average: 2.38 ms Requests/sec: 10.00

Response time histogram: 0.815 [1] |∎ 1.959 [44] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎ 3.103 [39] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎ 4.247 [8] |∎∎∎∎∎∎∎ 5.391 [4] |∎∎∎∎ 6.534 [1] |∎ 7.678 [1] |∎ 8.822 [1] |∎ 9.966 [0] | 11.110 [0] | 12.254 [1] |∎

Latency distribution: 10 % in 1.08 ms 25 % in 1.40 ms 50 % in 2.17 ms 75 % in 2.73 ms 90 % in 3.80 ms 95 % in 5.05 ms 99 % in 7.74 ms

Status code distribution: [OK] 100 responses

For Java based gRPC service, ghz works without --proto option in CLI, if service reflection is enabled, so i am expecting that it should work for python gRPC service as well.

any idea what could be wrong here?

abhics1002 avatar Jun 02 '23 01:06 abhics1002

I have same problem with u. Seem, grpc_reflection for python is not fully supported

phamngocquy avatar Dec 28 '23 03:12 phamngocquy

+1

Not working for own protobuf as well as for grpc.health.v1.Health

burigolucas avatar Jan 16 '24 06:01 burigolucas

Reproduced this as well today with 0.118.0

matt-ny avatar May 22 '24 02:05 matt-ny