{"id":13622101,"url":"https://github.com/zalopay-oss/jmeter-grpc-request","last_synced_at":"2025-04-15T05:33:41.357Z","repository":{"id":36981492,"uuid":"262721194","full_name":"zalopay-oss/jmeter-grpc-request","owner":"zalopay-oss","description":"JMeter gRPC Request load test plugin for gRPC","archived":true,"fork":false,"pushed_at":"2024-03-29T09:20:40.000Z","size":110415,"stargazers_count":185,"open_issues_count":11,"forks_count":76,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-03-13T00:01:45.414Z","etag":null,"topics":["benchmark","grpc","hacktoberfest","jmeter","jmeter-grpc-request","jmeter-plugin","load-testing"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zalopay-oss.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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}},"created_at":"2020-05-10T05:47:37.000Z","updated_at":"2025-02-04T06:48:47.000Z","dependencies_parsed_at":"2024-04-15T12:20:29.710Z","dependency_job_id":null,"html_url":"https://github.com/zalopay-oss/jmeter-grpc-request","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zalopay-oss%2Fjmeter-grpc-request","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zalopay-oss%2Fjmeter-grpc-request/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zalopay-oss%2Fjmeter-grpc-request/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zalopay-oss%2Fjmeter-grpc-request/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zalopay-oss","download_url":"https://codeload.github.com/zalopay-oss/jmeter-grpc-request/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249015965,"owners_count":21198824,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["benchmark","grpc","hacktoberfest","jmeter","jmeter-grpc-request","jmeter-plugin","load-testing"],"created_at":"2024-08-01T21:01:14.151Z","updated_at":"2025-04-15T05:33:41.343Z","avatar_url":"https://github.com/zalopay-oss.png","language":"Java","funding_links":[],"categories":["Java","Performance Testing"],"sub_categories":["RPC Frameworks"],"readme":"# JMeter gRPC Request\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"./dist/asset/jmeter-and-grpc.png\" width=\"600px\" alt=\"Apache JMeter and gRPC logo\" /\u003e\u003c/p\u003e\n\n\u003ch4 align=\"center\"\u003eThis sampler JMeter lets you send an gRPC request to a server. \u003c/br\u003e It's as simple as a HTTP Request.\u003c/h4\u003e\n\u003cbr\u003e\n\n[![Javadocs](https://www.javadoc.io/badge/org.apache.jmeter/ApacheJMeter_core.svg)](https://www.javadoc.io/doc/org.apache.jmeter/ApacheJMeter_core)\n[![Stack Overflow](https://img.shields.io/:stack%20overflow-jmeter-brightgreen.svg)](https://stackoverflow.com/questions/tagged/jmeter)\n\n[简体中文](./README.zh-CN.md) | English\n\n## What is it\n\nThis is a simpler of JMeter used to test for any gRPC server, it is not necessary to generate gRPC classes or to compile the protos binary for the service. Just a very simple for input:\n\n- Host and port of gRPC service.\n- Method of service needs testing.\n- Folder path of proto files.\n- Data request in JSON format.\n\nSame as JMeter HTTP Request but for gRPC. Copy only once file jar to lib/ext of JMeter, select your protobuf folder and start making requests! No extra steps.\n\n*The JMeter gRPC Request is available at JMeter Plugins Manager, we can find here https://jmeter-plugins.org/?search=jmeter-grpc-request*\n\n## Features\n\n- Supports Blocking Unary Calls.\n- Parses proto files at runtime.\n- Supports plain text and TLS connections.\n- Supports authentication via metadata (JWT/Token).\n- Request data with JSON format.\n- Runs on Mac, Linux and build project by Maven.\n\n*Todo:*\n\n- [x] *Supports TLS connections.*\n- [x] *Supports authentication via metadata.*\n- [x] *Auto list full methods.*\n- [x] *Count the failed request in the report.*\n- [x] *Auto generate request data base on proto file.*\n- [ ] *Supports grpc-web protocol (HTTP1.1).*\n\n## Usage\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"./dist/asset/jmeter-grpc-create-testscript.gif\" width=\"820px\" alt=\"jmeter-create-testscript-grpc\" /\u003e\u003c/p\u003e\n\n### Requirements\n\nAll you need copy *jmeter-grpc-request* file jar to directory `lib/ext` of JMeter and restart JMeter GUI (copy once, use forever). Binary are available from the [Releases Page](https://github.com/zalopay-oss/jmeter-grpc-request/releases).\n\n### Making a gRPC request with JMeter\n\nCreate test script:\n\n- Add Thread Group: right-click on the Sample Test (our Test Plan) → Add → Threads (Users) → Thread Group.\n- Add GRPC Request: right-click on the newly created Thread Group  → Add → Sampler → GRPC Request.\n- Fill info request: host, port, method, data request, proto folder.\n- Save test script.\n\nRun test:\n\n- Via JMeter GUI: in top bar click Run → Start.\n- Via command line: `bin/jmeter -n -t \u003ctest JMX file\u003e.jmx -l \u003ctest JMX result\u003e.csv -j \u003ctest log file\u003e.log -e -o \u003cPath to output folder\u003e`.\n\n### Configurations\n\n| No. \t| Fields                             \t| Description                                                         \t|\n|-----\t|-----------------------------------\t|---------------------------------------------------------------------\t|\n| 1   \t| Server Name or IP                 \t| Domain/IP for gRPC server                                         \t|\n| 2   \t| Port Number                       \t| Port for gRPC server (80/ 443)                                      \t|\n| 3   \t| SSL/TLS                           \t| SSL/TLS to authenticate the server                                  \t|\n| 4     | Disable SSL/TLS Cert Verification     | Disable SSL/TLS certificate verification (enable this function when using self-signed certificates)                                      |\n| 5   \t| Proto Root Directory              \t| Root directory contains proto files                                 \t|\n| 6   \t| Library Directory (Optional)      \t| Using a different underlying library (googleapis)                   \t|\n| 7   \t| Full Method                       \t| Full Method to test                                                 \t|\n| 8   \t| Metadata                          \t| Metadata can be use for Store token, authentication method, etc. \u003cbr/\u003eTwo Ways to use metadata, \u003cbr/\u003e\u003cbr/\u003e \u0026nbsp;\u003cb\u003e1. Comma separated Key:Value : \u003c/b\u003e\u003cbr/\u003e\u0026nbsp; - key1:value1,key2:value2\u003cbr/\u003e\u0026nbsp; - Value should url encode with utf-8 \u003cbr/\u003e\u003cbr/\u003e\u0026nbsp;2.\u003cb\u003e Json String : \u003c/b\u003e\u003cbr/\u003e\u0026nbsp;\u0026nbsp; - {\"key1\":\"Value1\", \"key2\":\"value2\"} \u003cbr/\u003e\u003cbr/\u003e \u003cb\u003eNote: \u003ci\u003eIn gRPC Metadata value is (Key, value) both in format of (String, String), in case of nested Json Objects values, will go to request as a JsonString. \u003c/i\u003e\u003c/b\u003e                              \t|\n| 9   \t| Deadline                          \t| How long gRPC clients are willing to wait for an RPC to complete  \t|\n| 10   \t| Send JSON Format With the Request \t| Data request with JSON format                                       \t|\n\n## Running the examples\n\nExample invocations can be found in the [example](./dist/example) directory.\n\n## Benchmark\n\nPurpose verify that *jmeter-grpc-request* is really stable when performing load testing for the gRPC system. Read more [Benchmark: jmter-grpc-request](./dist/benchmark)\n\n- CCU: 120 user\n- Duration: 30 min\n\n\u003cimg src= \"./dist/asset/report-120-1800s.jpg\" /\u003e\n\n## Build instructions\n\n### Build requirements\n\nIn order to build JMeter GRPC Request from source, you will need:\n\n- [Java 8](https://www.oracle.com/downloads/index.html)\n- [Apache Maven 3](https://maven.apache.org/)\n\n### Build from source\n\nBuild a (fat) jar output in target directory, run:\n\n```\nmvn clean install package\n```\n\n## Inspiration...\n\n- Thanks: [grpc-ecosystem/polyglot](https://github.com/grpc-ecosystem/polyglot)\n- More: https://stackoverflow.com/q/61133529/9488752\n- If you like working with the request message builder at here [zalopay-oss/jmeter-grpc-plugin](https://github.com/zalopay-oss/jmeter-grpc-plugin)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzalopay-oss%2Fjmeter-grpc-request","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzalopay-oss%2Fjmeter-grpc-request","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzalopay-oss%2Fjmeter-grpc-request/lists"}