apache / apache/jmeter

gRPC with jmeter is not working in alpine/jmeter:5.6.3 image

Open
#6,404 0 comments 0 reactions 0 assignees View on GitHub
defect to-triage
Dominant language
Java
Stars
9.5k
Forks
2.3k
Avg merge
1d 22h
Merged PRs (30d)
5

Description

### Expected behavior

Jmeter should be able to run the gRPC request sampler inside the image

### Actual behavior

Getting a below error:
2025-01-08 10:33:25,530 ERROR v.z.b.GRPCSampler: java.lang.RuntimeException: Unable to resolve service by invoking protoc:
Unable to execute protoc binary
at vn.zalopay.benchmark.core.ClientCaller.init(ClientCaller.java:88)
at vn.zalopay.benchmark.core.ClientCaller.(ClientCaller.java:53)
at vn.zalopay.benchmark.GRPCSampler.initGrpcClient(GRPCSampler.java:81)
at vn.zalopay.benchmark.GRPCSampler.initGrpcInCurrentThread(GRPCSampler.java:203)
at vn.zalopay.benchmark.GRPCSampler.initGrpcRequestSampler(GRPCSampler.java:133)
at vn.zalopay.benchmark.GRPCSampler.sample(GRPCSampler.java:90)
at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:651)
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:570)
at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268)
at java.lang.Thread.run(Thread.java:750)

### Steps to reproduce the problem

**Create a Docker file:**
FROM alpine/jmeter:5.6.3
// Copied the below library from my local jmeter 5.6.3
COPY ./lib/jmeter-grpc-request.jar /opt/apache-jmeter-5.6.3/lib/ext/jmeter-grpc-request.jar
COPY ./lib/jmeter-plugins-manager-1.10.jar /opt/apache-jmeter-5.6.3/lib/ext/jmeter-plugins-manager-1.10.jar
RUN apk add protobuf
COPY ./scripts/GRPC_Request.jmx /opt/apache-jmeter-5.6.3/scripts/GRPC_Request.jmx

**Docker build command:**
docker build . -t load-testing:manager-load-testing_v1 --no-cache

**Create a proto file:**
syntax = "proto3";

package com.grpc.spring;
option java_package = "com.grpc.spring.service";
option java_outer_classname = "Solutions";
option java_generic_services = true;
option java_multiple_files = true;

service SolutionService {
rpc getSolution (SolutionRequest) returns (SolutionResponse) {};
}

message SolutionRequest {
string name = 1;
}
message SolutionResponse {
string message = 1;
}

I created a Jmeter GRPC request sampler using the UI and copied the Jmeter script to an image and used the below command to run the Docker image:
docker run -it --entrypoint bash --rm --user root load-testing:manager-load-testing_v1

jmeter -n -t scripts/GRPC_Request.jmx -l result.jtl -JThreads=1 -JRamup=1 -JLoopCount=1 -JprotoFilePath=/opt/apache-jmeter-5.6.3/scripts/test_data -Jhost=host.docker.internal -Jport=9092 -e -o ./dashboard_directory

Note: Same script works in my local JMeter GUI. which has protoc version as local: libprotoc 28.3 but in the Image: libprotoc 24.4

### JMeter Version

5.6.3

### Java Version

openjdk version "1.8.0_432"

### OS Version

Alpine Linux v3.21

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.