JMeter插件 -- 基于gRPC协议的插件开发(三)

29 篇文章 0 订阅
24 篇文章 0 订阅

背景:接上一篇JMeter二次开发之gRPC插件开发(二)

目录

1.JMeter取样器

2.打包

3.插件的使用

4.遇到的问题

附录:参考资料

1.JMeter取样器

package grpc.client.jmeter;


import com.java.grpc.stub.HelloReply;
import grpc.client.GrpcClient;
import io.grpc.StatusRuntimeException;

import org.apahce.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;


public class HelloGrpcSampler extends AbstractJavaSamplerClient{

    GrpcClient grpcClient = null;
    String host = "127.0.0.1";
    String port = "50052";
    String name = "zhangsan";

    // 设置可用参数及默认值。这里设置的变量名和变量值会体现在Java Request元件的页面上
    @Override
    public Arguments getDefaultParameters(){
        Arguments defaultParameters = new Arguments();
        defaultParameters.addArgument("host", host);
        defaultParameters.addArgument("port", port);
        defaultParameters.addArgument("name", name);

        return defaultParameters;
    }

    // 每个线程测试前执行一次,做一些初始化工作
    @Override
    public void setupTest(JavaSamplerContext context){
        System.out.println("sample setup..");
        this.host = context.getParameter("host");    // 从JMeter中获取变量的值
        this.port = context.getParameter("port");
        this.name = context.getParameter("name");

        // 建立连接
        this.grpcClient = new GrpcClient(host, Integer.parseInt(port));
        super.setupTest(context);
    }

    @Override
    public SampleResult runTest(JavaSamplerContext context){
        SampleResult sampleResult = new SampleResult();
        sampleResult.sampleStart();    // JMeter开始统计响应时间标记

        try{
            // 调用被测对象
            HelloReply helloReply = this.grpcClient.sendReadRequestToService(grpcClient, name);
            
            sampleResult.sampleEnd();
            sampleResult.setSuccessful(true);
            sampleResult.setResponseData(helloReply.toString().getBytes());
            sampleResult.setResponseMessage("Success");
            sampleResult.setResponseCodeOK();    // 取样器结果的响应状态码:200
        }catch(StatusRuntimeException e){
            sampleResult.sampleEnd();    // JMeter结束统计响应时间标记
            sampleResult.setSuccessful(false);
            sampleResult.setResponseMessage("Exception: " + e);

            java.io.StringWriter stringWriter = new java.io.StringWriter();
            e.printStackTrace(new java.io.PrintWriter(stringWriter));
            sampleResult.setResponseData(stringWriter.toString().getBytes());
            sampleResult.setDataType(SampleResult.TEXT);
            sampleResult.setResponseCode("500");
        }

        return sampleResult;
    }

    // 测试结束时调用
    @Override
    public void teardownTest(JavaSamplerContext context){
        try{
            System.out.println("service shutdown...");
            grpcClient.shutdown();
        }catch(InterruptedException e){
            e.printStackTrace();
        }
        super.teardownTest(context);
    }

    // 自我调试
//    public static void main(String[] args){
//        HelloGrpcSampler helloGrpcSampler = new HelloGrpcSampler();
//        Arguments arguments = helloGrpcSampler.getDefaultParameters();
//        JavaSamplerContext context = new JavaSamplerContext(arguments);
//        helloGrpcSampler.setupTest(context);
//        helloGrpcSampler.runTest(context);
//        helloGrpcSampler.teardownTest(context);
//    }

}

2.打包

这里笔者直接用IDEA中的命令进行打包。选择工程右侧Maven-》Lifecycle-》package进行打包。

3.插件的使用

1)将打包好的jar包,放到JMeter安装目录的lib/ext下,重启JMeter;

2)创建线程组,添加Java Request,选择前面做好的类。(这里的图示为示意)

4.遇到的问题

1. 打好的jar包放到jmeter中,点击java request请求时报错,无法查看到界面,并且出现如下各种报错:

1)java.lang.NoSuchMethodError: io.grpc.netty.NettyChannelBuilder.usePlaintext

原因:pom.xml中缺少netty的包或者netty包的版本不对。这里删除了所有单独的netty包,引入了grpc-all包

2)java.lang.NoClassDefFoundError: org/apache/qpid/url/BindingURL

原因:a.尝试在pom.xml中引入qpid-client和qpid-common两个包,仍报错后采用b方法

b.缺少qpid-client和qpid-common的jar包,这两个包是JMeterPlugins_ExtrasLibs/lib中的包,将jar包放到lib/ext中

3)java.lang.NoClassDefFoundError: org/springwork/jms...

原因:缺少spring-core和spring-jms的jar包,这两个包是JMeterPlugins_ExtrasLibs/lib中的包,将jar包放到lib/ext中

2. 在maven工程中去掉不必要的jar包:参考 https://www.jianshu.com/p/ed14399bd3d7

3. maven工程出现警告,没有配置好slf4j:slf4j包引入问题,需要引入slf4j-api.jar和slf4j-log4j12.jar包;若还缺少包或日志包不对,考虑引入log4j-core和log4j-api包

附录:参考资料

1. https://blog.csdn.net/jielysong117/article/details/75200119

2. https://www.iteye.com/blog/shift-alt-ctrl-2292862

3. https://www.jianshu.com/p/39c9eedba2c2

4. https://www.cnblogs.com/resentment/p/6792029.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JMeter是一个非常强大的性能测试工具,其基本功能非常强大,但是在一些场景下需要进行定制化开发,而JMeter-plugins-json插件就是为了满足这种需求而产生的一个开源插件JMeter-plugins-json插件主要功能是支持JMeter进行JSON格式数据的转换和解析,使得JMeter可以很方便地处理JSON格式的数据。使用JMeter-plugins-json插件,可以将JSON数据转换成CSV格式,便于JMeter进行进一步的处理和分析。此外,JMeter-plugins-json插件还支持将CSV数据转换为JSON格式,方便于开发人员进行数据交换。总体来说,JMeter-plugins-json插件可以为JMeter提供更加丰富的数据转换和解析功能,使得JMeter在进行性能测试时更加灵活和高效。 对于JMeter-plugins-json插件的下载,可以通过官方的网站或者GitHub进行下载。在官方网站上,可以找到插件的最新版本和相关的使用说明。在GitHub上,可以找到插件的源代码和社区贡献者的讨论,可以根据需要进行自定义的开发和定制化。需要注意的是,在下载插件之前,需要进行一定的了解和研究,以确保插件的适用性和稳定性。 综上,JMeter-plugins-json插件是一个非常有用的JMeter插件,可以为JMeter提供更加丰富的数据处理和转换功能,提高JMeter的性能测试效率和可靠性。针对该插件的下载,需要谨慎选择,并对插件的具体应用进行深入研究和掌握。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值