Stress Test client Specification

This document specifies the features a stress test client should implement in order to work with the stress testing framework. The stress test clients are executed against the existing interop test servers.

Requirements

1. A stress test client should be able to repeatedly execute one or more of the existing 'interop test cases'. It may just be a wrapper around the existing interop test client. The exact command line arguments the client should support are listed in Table 1 below.

2. The stress test client must implement a metrics server defined by metrics.proto and must expose qps as a Long-valued Gauge. The client can track the overall qps in one Gauge or in multiple Gauges (for example: One per Channel or Stub). The framework periodically queries the qps by calling the GetAllGauges() method (the framework assumes that all the returned Gauges are qps Gauges and adds them up to determine the final qps) and uses this to determine if the stress test client is running or crashed or stalled.

Note: In this context, the term qps means interop test cases per second (not messages per second or rpc calls per second)

Table 1: Command line arguments that should be supported by the stress test client.

Note The current C++ stress client supports more flags than those listed here but those flags will soon be deprecated.

ParameterDescription
--server_addressesThe stress client should accept a list of server addresses in the following format:
<name_1>:<port_1>,<name_2>:<port_2>..<name_N>:<port_N>
Note: <name> can be either server name or IP address.

Type: string
default: localhost:8080
Example: foo.foobar.com:8080,bar.foobar.com:8080

Currently, the stress test framework only passes one server address to the client.
--test_casesList of test cases along with the relative weights in the following format:
<testcase_1:w_1>,<testcase_2:w_2>...<testcase_n:w_n>.
The test cases names are the same as those currently used by the interop clients

Type: string
Example: empty_unary:20,large_unary:10,empty_stream:70
(The stress client would then make empty_unary calls 20% of the time, large_unary calls 10% of the time and empty_stream calls 70% of the time.)
Note: The weights need not add up to 100.
--test_duration_secsThe test duration in seconds. A value of -1 means that the test should run forever until forcefully terminated.
Type: int
default: -1
--num_channels_per_serverNumber of channels (i.e connections) to each server.
Type: int
default: 1

Note: Unfortunately, the term channel is used differently in grpc-java and C based grpc. In this context, this really means "number of connections to the server"
--num_stubs_per_channel Number of client stubs per each connection to server.
Type: int
default: 1
--metrics_portThe port at which the stress client exposes QPS metrics.
Type: int
default: 8081