The tools contained in this folder enable a user to run multiple tests, wait for them to finish, and generate an xml report with pass/fail results.
These tools are intended to work with load test configurations generated from load test scenarios by tools stored in the gRPC Core repository. For information on those tools and examples of the tools being used together, see the gRPC OSS benchmarks README in that repository.
You can also run any of the tools in this folder with
go run tools/cmd/${tool}/main.go
.
You can also build tool binaries using the makefile:
make all-tools
You can then invoke the binary for each tool as bin/${tool}
.
The runner tool runs collections of tests, optionally
assigning them to separate queues. The queue name for each test is taken from
an annotation in the test configuration. The key for this annotation is
specified by the option annotation-key
.
The runner applies tests to the cluster according to the concurrency level for each queue, polls the tests while they are running and collects results to compose a report.
The input files for the runner are multi-part yaml files containing load test configurations. The (optional) output is an xml report in xunit format.
The runner
tool takes the following options:
-annotation-key
annotation key to parse for queue assignment (default:pool
).-c
Concurrency level, in the form[<queue name>:]<concurrency level>
.-i
Input files containing load test configurations.-o
Name of the output file for xunit xml report.-polling-interval
polling interval for load test status (default:20s
).-polling-retries
Maximum retries in case of communication failure (default:2
).-delete-successful-tests
Delete tests immediately in case of successful termination (default:false
).
The following example runs tests on two separate queues, specified by the pool
annotation (the most common case in production, where tests run simultaneously
on separate node pools):
bin/runner -i input.yaml -c queue1:2 -c queue2:3 -o sponge_log.xml
The following examples runs tests from two different files on a single queue (useful for tests that run on a default pool):
bin/runner -i input1.yaml input2.yaml -annotation_key= -c :2
The queue in the second example is unnamed. The two examples represent choices in queue assignment: If a named queue is specified, then all queues must be named and assigned a concurrency level; If an unnamed queue is specified, then it must be the only queue and all tests must be assigned to it.
The tools prepare_prebuilt_workers and delete_prebuilt_workers:
- Build the images with the worker executables compiled and embedded.
- Push the images to specified registry.
- Delete the images from specified registry.
The prepare_prebuilt_workers tool builds
images and pushes them to a user specified Google cloud registry. For example,
the following shows this process (building and pushing prebuilt images) for
cxx
and go
workers:
bin/prepare_prebuilt_workers \
-l cxx:master \
-l go:master \
-p "${image_registry}" \
-t "${tag}" \
-r containers/pre_built_workers
This builds cxx
and go
images contain workers built from the specific
commit/branch we wish to test.
You may also specify the repo where the source code is pulled from by specifying
the repo. The following command pulls the source code from forked repos
${USER}/grpc
and ${USER}/grpc-go
to build cxx and go images
bin/prepare_prebuilt_workers \
-l "cxx:${USER}/grpc:master" \
-l "go:${USER}/grpc-go:master" \
-p "${image_registry}" \
-t "${tag}" \
-r containers/pre_built_workers
The tool prepare_prebuilt_workers
takes the following options:
-l
Language and GITREF to benchmark. The language and its specific GITREF wish to build workers from can be specified aslanguage:COMMIT_SHA
orlanguage:repo:COMMIT_SHA
. May be repeated. Valid input for language names are all in lower case:csharp
,c++
/cxx
,go
,java
,node
,node_purejs
,php7
.php7_protobuf_c
,python
,python_asyncio
andruby
.-t
Tag for prebuilt images. Tag is a required field. Tag complies with Docker's tag restrictions.-r
Root directory of Dockerfiles.-build-only
Option to build only, when specified-build-only=true
images will only be built locally.-p
Image registry to store images. The image prefix should be in form ofgcr.io/project-name/your-directory-name
for the Google Container Registry. For example, the built images would be stored asgcr.io/grpc-testing/project-name/pre_built_workers/cxx:user-specified-tag
andgcr.io/grpc-testing/project-name/pre_built_workers/go:user-specified-tag
.
If using a registry other than GCR, the images should be built through the
script with the flag -build-only=true
. The user could then push the images
manually.
The Dockerfiles that the script uses to build are available in ../containers/pre_built_workers.
The tool delete_prebuilt_workers deletes images within a user specified registry. The script lists all images within the specified registry, then checks if the image has the user specified tag. This script only supports Google Container Registry, because it relies on the google-cloud-sdk.
The following example deletes all images within ${image_registry}
that have
tag ${tag}
:
bin/delete_prebuilt_workers \
-p "${image_registry}" \
-t "${tag}"
-t
Tag for prebuilt images. Tag is the unique identifier for images to delete. If the image has multiple tags including the user specified tag, the tag specified here is removed from image's tag list, otherwise the image is deleted.-p
Image registry to search images from. Only accepts the image registry prefix, not the actual image name. If the image registry supports nested repositories, the image registry prefix should be the absolute path to the image's parent repository.