14 """Entry point for running stress tests."""
17 from concurrent
import futures
21 from six.moves
import queue
23 from src.proto.grpc.testing
import metrics_pb2_grpc
24 from src.proto.grpc.testing
import test_pb2_grpc
33 parser = argparse.ArgumentParser(
34 description=
'gRPC Python stress test client')
37 help=
'comma separated list of hostname:port to run servers on',
38 default=
'localhost:8080',
42 help=
'comma separated list of testcase:weighting of tests to run',
43 default=
'large_unary:100',
45 parser.add_argument(
'--test_duration_secs',
46 help=
'number of seconds to run the stress test',
49 parser.add_argument(
'--num_channels_per_server',
50 help=
'number of channels per server',
53 parser.add_argument(
'--num_stubs_per_channel',
54 help=
'number of stubs to create per channel',
57 parser.add_argument(
'--metrics_port',
58 help=
'the port to listen for metrics requests on',
63 help=
'Whether to use our fake CA. Requires --use_tls=true',
66 parser.add_argument(
'--use_tls',
67 help=
'Whether to use TLS',
70 parser.add_argument(
'--server_host_override',
71 help=
'the server host to which to claim to connect',
73 return parser.parse_args()
77 for test_case
in methods.TestCase:
78 if test_case_arg == test_case.value:
81 raise ValueError(
'No test case {}!'.
format(test_case_arg))
85 weighted_test_cases = {}
86 for test_case_arg
in test_case_args.split(
','):
87 name, weight = test_case_arg.split(
':', 1)
89 weighted_test_cases[test_case] =
int(weight)
90 return weighted_test_cases
96 root_certificates = resources.test_root_certificates()
98 root_certificates =
None
100 root_certificates=root_certificates)
102 'grpc.ssl_target_name_override',
103 args.server_host_override,
118 test_server_targets = args.server_addresses.split(
',')
120 exception_queue = queue.Queue()
121 stop_event = threading.Event()
122 hist = histogram.Histogram(1, 1)
125 server =
grpc.server(futures.ThreadPoolExecutor(max_workers=25))
126 metrics_pb2_grpc.add_MetricsServiceServicer_to_server(
128 server.add_insecure_port(
'[::]:{}'.
format(args.metrics_port))
131 for test_server_target
in test_server_targets:
132 for _
in range(args.num_channels_per_server):
134 for _
in range(args.num_stubs_per_channel):
135 stub = test_pb2_grpc.TestServiceStub(channel)
137 exception_queue, stop_event)
138 runners.append(runner)
140 for runner
in runners:
143 timeout_secs = args.test_duration_secs
146 raise exception_queue.get(block=
True, timeout=timeout_secs)
152 for runner
in runners:
158 if __name__ ==
'__main__':