gRpc服务接口测试
2020-09-10 本文已影响0人
LeslieFind
由于后续要进行压测,只用过jmeter压测,所以语言选择的是java,可以进行jar拓展
一、新建maven项目,创建proto目录,把proto文件粘贴进来
![](https://img.haomeiwen.com/i7216602/4234e7eeaadcc99d.png)
二、将proto目录设置为源文件根目录
![](https://img.haomeiwen.com/i7216602/c9c3f3728d063cfb.png)
三、配置pom.xml
<properties>
<grpc.version>1.20.0</grpc.version>
<protobuf.version>3.3.0</protobuf.version>
</properties>
<dependencies>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty</artifactId>
<version>${grpc.version}</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty-shaded</artifactId>
<version>${grpc.version}</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-protobuf</artifactId>
<version>${grpc.version}</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-stub</artifactId>
<version>${grpc.version}</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-testing</artifactId>
<version>${grpc.version}</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-all</artifactId>
<version>${grpc.version}</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>${protobuf.version}</version>
</dependency>
</dependencies>
<build>
<extensions>
<extension>
<groupId>kr.motd.maven</groupId>
<artifactId>os-maven-plugin</artifactId>
<version>1.5.0.Final</version>
</extension>
</extensions>
<plugins>
<plugin>
<groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<version>0.5.0</version>
<configuration>
<protocArtifact>com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}</protocArtifact>
<pluginId>grpc-java</pluginId>
<pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>compile-custom</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
四、编译生成gRpc服务的java文件
![](https://img.haomeiwen.com/i7216602/cb9b76469ede0925.png)
![](https://img.haomeiwen.com/i7216602/1e00229559a8c93a.png)
五、创建client
STEP 1:创建一个Client类
STEP 2:私有属性channel,blockingStub
import io.grpc.ManagedChannel;
import com.test.rpc.XXXServiceGrpc;
private ManagedChannel channel;
private XXXServiceGrpc.XXXServiceBlockingStub blockingStub; //通过proto文件转的gRpc服务的java代码中可见
STEP 3:创建构造方法(参数1:host,参数2:port)
public Client(String host, int port){
channel = NettyChannelBuilder.forAddress(host,port)
.negotiationType(NegotiationType.PLAINTEXT)
.build();
blockingStub = XXXServiceGrpc.newBlockingStub(channel);
}
STEP 4:method 1:shutdown方法
public void shutdown() throws InterruptedException{
channel.shutdown().awaitTermination(5, TimeUnit.SECONDS);
}
STEP 5:method 2:服务的请求处理方法(请求参数和响应可看proto文件)
public String GetParam_test(String xxs) {
# 请求参数
XXXParams request = XXXParams.newBuilder().setXXXs(xxs).build();
# 响应结果
XXXInfo response = blockingStub.getXXXs(request);
return response.toString();
}
STEP 6:测试client是否调通
![](https://img.haomeiwen.com/i7216602/25e7ef41902b20f5.png)
五、压测部分,编写jmeter拓展的jar包
pom配置:
<!-- java jmeter依赖jar包 -->
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>4.0</version>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>4.0</version>
</dependency>
java脚本:
STEP 1:继承AbstractJavaSamplerClient
STEP 2:创建client对象
STEP 3:重写方法(getDefaultParameters、setupTest、runTest和teardownTest)
# 设置要传的值,包括服务host,port,以及接口参数
@Override
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("host","xx.xx.xx.xx");
params.addArgument("port","10001");
params.addArgument("xx", "xxx"); // 服务接口的参数
return params;
}
@Override
public void setupTest(JavaSamplerContext arg0){
String host = arg0.getParameter("host");
int port = Integer.parseInt(arg0.getParameter("port"));
client = new Client(host,port);
}
# 发送请求
@Override
public SampleResult runTest(JavaSamplerContext arg0) {
SampleResult sr = new SampleResult();
String xxx= arg0.getParameter("xxx"); //获取传入的请求参数值
sr.sampleStart();
try {
response = client.GetParam_test(xxx); //处理请求
sr.setResponseData("返回值" + response,"utf-8");
sr.setDataType(SampleResult.TEXT);
sr.setSuccessful(true);
} catch (Exception e){
sr.setSuccessful(false);
e.printStackTrace();
} finally {
String temp_results = sr.getResponseDataAsString();
sr.setResponseData("请求值" + xx+ "返回值" + temp_results,"utf-8");
sr.sampleEnd();
}
return sr;
}
@Override
public void teardownTest(JavaSamplerContext arg0) {
try {
client.shutdown();
} catch (InterruptedException e){
e.printStackTrace();
}
}
STEP 4:进行测试,测试通过打成jar包放到jmeter的lib/ext目录下即可在jmeter使用,生成jmx脚本
![](https://img.haomeiwen.com/i7216602/b6f4e1a74ef768cb.png)