Java日常学习

gRpc服务接口测试

2020-09-10  本文已影响0人  LeslieFind

由于后续要进行压测,只用过jmeter压测,所以语言选择的是java,可以进行jar拓展

一、新建maven项目,创建proto目录,把proto文件粘贴进来

image.png

二、将proto目录设置为源文件根目录

image.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文件

image.png
image.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是否调通
image.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脚本
image.png
上一篇 下一篇

猜你喜欢

热点阅读