JMeter DLL接口取样器开发

JMeter DLL接口取样器开发

背景:第三方系统,以.dll的形式提供API,现要在jmeter下,开发出对应的插件,能够对第三方系统对应的接口进行测试。

分析:
1、由于jmeter是java工程,要解决java调用c++的.dll问题。
2、因为API涉及资源库加载连接和释放,涉及取样器的划分问题;
3、根据提供的API,设计对应的取样器页面,接收参数进行请求。
4、细节完善,入参参数条目自动加载、出参代码文字说明转化。

1、java调用dll问题

JNA(Java Native Access)是一个开源的Java框架,是Sun公司推出的一种调用本地方法的技术,是建立在经典的JNI基础之上的一个框架。之所以说它是JNI的替 代者,是因为JNA大大简化了调用本地方法的过程,使用很方便,基本上不需要脱离Java环境就可以完成。
具体JNA介绍可参考博文:JNA介绍
使用过程中要注意的是 java数据类型与C++数据类型的对应转化
在这里插入图片描述

插件工程引入 jna-platform-4.0.0.jar

//加载dll
Library ALibrary=(Library) Native.loadLibrary("/Api/api.dll", Library.class);
//定义API方法,与API同名
 public Boolean Initialize();

创建工具类,实现对dll中API的调用方法

public class JnaUtil {
    public static  Library library= Library.ALibrary;
    
    //加载资源,连接服务器
    public static long getConnetionId(String domain,String sUser,String sPwd,Integer timeOut){
        Boolean result=library.Initialize();
    }
}

因工作内容原因,代码部分精简省略
在JNA下,调用dll的API问题解决。

2、取样器的划分问题;

因为第三方接口是C++提供的,资源库加载、服务器连接就一次,接口多次请求,到最后资源库释放、链接断开一次。所以取样器划分为三个:连接、接口请求、释放。从而实现一次连接释放,多次接口请求。
在这里插入图片描述

3、取样器页面设计

连接、释放连接器,根据参数需要,罗列参数输入框即可。
接口请求,多“ArgumentsPanel”参数表格。jmeter关于ArgumentsPanel介绍和使用网上现成示例未能找到,是根据http取样器中翻看源码找出来的。
在这里插入图片描述
ArgumentsPanel是封装好了的,跟其它控件一样,实现panel创建、页面值给sampler,sampler值回显到页面,ArgumentsPanel值清空这几个功能即可,方法是现成的。

4、入参参数条目自动加载

初步设计是根据功能码JTextField监听它的insert和delete事件,自动读取excel维护好的功能码对应的入参项,然后刷新到Parameters下面的表格之中,实现自动加载参数。但遇到了取样器鼠标选中切换,会导致之前参数输入值被清空,实践发现,鼠标在已添加的多个取样器中进行切换时,取样器页面上的控件值会delete掉,再insert进来,会触发自动加载入参项,导致之前已填写了value值得入参被重新加载清空值。
上述问题未能解决,采用了,通过点击按钮方式,手动触发加载入参项。按钮加载入参项代码如下:

  paramButon.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if(map.get(codeNo.getText())!=null) {//如果输入的功能码维护在excel中
                    List<A5ParamDto> list = map.get(codeNo.getText());
                    Arguments args = new Arguments();
                    for (A5ParamDto dto : list) {
                        log.info(dto.getParamName() + " " + dto.getParamValue());
                        args.addArgument(dto.getParamName(), dto.getParamValue());
                    }
                    args.addArgument("connectionId", "${connectionId}");
                    argsPanel.configure(args);
                }else{
                     argsPanel.clearGui();
                     Arguments args = new Arguments();
                     args.addArgument("connectionId", "${connectionId}");
                     argsPanel.configure(args);
                }

            }
        });

按照上述设计和实现,最终完成C++接口取样器功能开发。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值