{"id":28312253,"url":"https://github.com/automationhacks/grasp-grpc","last_synced_at":"2026-05-17T00:55:15.425Z","repository":{"id":227509379,"uuid":"771618081","full_name":"automationhacks/grasp-grpc","owner":"automationhacks","description":"Ports routeguide example service from grpc-java repository and adds functional and non functional API tests","archived":false,"fork":false,"pushed_at":"2024-11-15T11:26:04.000Z","size":158,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-19T22:25:30.516Z","etag":null,"topics":["api-testing","grpc","grpc-java","testing"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/automationhacks.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-03-13T16:22:02.000Z","updated_at":"2024-07-29T16:35:22.000Z","dependencies_parsed_at":"2024-07-29T20:48:47.175Z","dependency_job_id":"bb062014-eee0-463e-b7f5-de69be7cd8df","html_url":"https://github.com/automationhacks/grasp-grpc","commit_stats":null,"previous_names":["automationhacks/grasp-grpc"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/automationhacks/grasp-grpc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/automationhacks%2Fgrasp-grpc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/automationhacks%2Fgrasp-grpc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/automationhacks%2Fgrasp-grpc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/automationhacks%2Fgrasp-grpc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/automationhacks","download_url":"https://codeload.github.com/automationhacks/grasp-grpc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/automationhacks%2Fgrasp-grpc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33124143,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T18:38:32.183Z","status":"ssl_error","status_checked_at":"2026-05-16T18:38:29.903Z","response_time":115,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-testing","grpc","grpc-java","testing"],"created_at":"2025-05-24T17:09:29.116Z","updated_at":"2026-05-17T00:55:15.409Z","avatar_url":"https://github.com/automationhacks.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# grasp-grpc\n\n## Setup\n\n```zsh\n# Clone repo (One time)\ngit clone https://github.com/automationhacks/grasp-grpc\n\n# Generate source files\n./gradlew installDist\n\n# Start server\n./build/install/grasp-grpc/bin/route-guide-server\n\n# Install gRPC UI (One time)\nbrew install grpcui\n\n# Start gRPC UI\ngrpcui -plaintext localhost:8980\n\n\n```\n\n## Unit testing\n\n```zsh\n# Run server unit tests via JUnit4\n./gradlew clean test --tests io.automationhacks.routeguide.RouteGuideServerTest --info\n\n# Run client unit tests via JUnit4\n./gradlew clean test --tests io.automationhacks.routeguide.RouteGuideClientTest --info\n```\n\n## E2E testing\n\n```zsh\n# Run E2E tests via TestNG\n./gradlew clean runTests\n```\n\n## Collect code coverage\n\n```zsh\n./gradlew clean build --info\n```\n\nIf you only build without running the tests, you'll notice the code does not fail\n\n```zsh\n./gradlew clean build -x test --info\n```\n\n## Load testing\n\nStart locust master on local\n\n```zsh\npip3 install pipenv\n\n# One time setup\n# Set below in .zshrc or .bash_profile depending upon the type of shell you are using\nexport WORKON_HOME=~/virtualenvs\nexport VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3\nexport LANG=en_US.UTF-8\nexport LC_ALL=en_US.UTF-8\n\n# Start pipenv shell such that a virtualenv is created which has locust python module already installed\npipenv shell\n\n# Start locust master on local\nlocust -f locust_master.py --master --master-bind-host=127.0.0.1 --master-bind-port=5557\n```\n\n```zsh\n[2024-05-26 12:22:02,412] Gauravs-Laptop/INFO/locust.main: Starting web interface at http://0.0.0.0:8089\n[2024-05-26 12:22:02,416] Gauravs-Laptop/INFO/locust.main: Starting Locust 2.28.0\n```\n\nEnsure all relevant proto files are generated by executing below (you only need to run this if you've made some changes\nto\nthe proto)\n\n```zsh\n./gradlew installDist\n```\n\nStart gRPC server\n\n```zsh\n./build/install/grasp-grpc/bin/route-guide-server\n```\n\n```zsh\nSLF4J: Failed to load class \"org.slf4j.impl.StaticLoggerBinder\".\nSLF4J: Defaulting to no-operation (NOP) logger implementation\nSLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.\nMay 25, 2024 10:39:06 PM io.automationhacks.routeguide.RouteGuideServer start\nINFO: Server started, listening on 8980\n```\n\nStart locust slave by running the main function\n\n[RouteGuideLoadGen.java](RouteGuideLoadGen.java)\n\n```java\npublic static void main(String[] args) {\n    new RouteGuideLoadTest().getFeatureLoad();\n}\n```\n\nNow you can go to the locust master URL and start your load test using locust UI\n\n### References\n\n- Locust python notes on Grpc testing https://docs.locust.io/en/stable/testing-other-systems.html#grpc\n- Grpc Test Infra https://github.com/grpc/test-infra\n- Distributed Load Testing of REST/gRPC APIs using Locust https://github.com/pedrodeoliveira/locust-rest-grpc\n- Blog from blazemeter https://www.blazemeter.com/blog/locust-performance-testing\n- Locust4j https://github.com/myzhan/locust4j\n- Example Main.java file https://github.com/myzhan/locust4j/blob/master/examples/task/Main.java to start a locust test\n- Locust Http load example project https://github.com/nejckorasa/locust4j-http-load\n- Locust Http load another example project https://github.com/nejckorasa/locust4j-http-load\n- wrk an example HTTP benchmarking tool https://github.com/wg/wrk","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fautomationhacks%2Fgrasp-grpc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fautomationhacks%2Fgrasp-grpc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fautomationhacks%2Fgrasp-grpc/lists"}