Jmeter自定义函数二次开发

目录

前言:

开发步骤:


前言:

JMeter自定义函数是一种使用Java编写的函数,它可以与JMeter脚本一起使用。如果JMeter原始函数不满足您的需求,您可以使用Java编写自定义函数来扩展其功能。

需求:读取本地存放图片的地址,实现随机选取图片转化为base64图片流

问题出现的环境背景:工作中模型接口的传入为图片base64,在使用jmeter进行相关接口测试时需要有该功能函数。

开发步骤:

1、创建java项目,新建的包名称必须时org.apache.jmeter.functions,在该包下创建名为ImageToBase64的class

2、导入jmeter安装目录下的lib\ext下的ApacheJMeter_functions.jar包

3、继承AbstractFunction类,并重写其中的方法

package org.apache.jmeter.functions;

import java.util.Collection;
import java.util.List;

import org.apache.jmeter.engine.util.CompoundVariable;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.samplers.Sampler;

public class ImageToBase64 extends AbstractFunction{

    @Override
    public List getArgumentDesc() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public String execute(SampleResult arg0, Sampler arg1) throws InvalidVariableException {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public String getReferenceKey() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void setParameters(Collection arg0) throws InvalidVariableException {
        // TODO Auto-generated method stub
       
    }
   
}

可以看到的是,我们需要重写的方法有四个:

    1、getArgumentDesc():函数参数描述,如果自定义函数有参数,用于返回函数参数说明

    2、execute():函数的主要执行逻辑,返回经过处理后的内容,此次返回的就是图片的base64

    3、getReferenceKey():返回自定义的函数名称。如:"__ImageToBase64"。一般的我们在创建自定义函数名称的时候以双下划线开头

    4、setParameters():设置函数接收参数值,如果自定义函数有参数,用于接收调用时传递过来的参数,注意使用时,字符串参数不要加双引号

4、开发过程

1、首先第一步是确定在Jmeter函数助手中显示的名字以及所需要的参数。

public class ImageToBase64 extends AbstractFunction {
    private static final List dese = new LinkedList<>();
    private static final String KET = "__ImageToBase64";    // 函数界面显示

    static {
        dese.add("文件路径:");   // jmeter界面参数说明
    }
    
    private CompoundVariable File_path;
    public ImageToBase64(){
    }
    private Object[] values;
    
    ///
    ...
    ///
     @Override
    public String getReferenceKey() {
        return KET;
    }

    
    @Override
    public List getArgumentDesc() {
        return dese;
    }

2、添加图片转base64方法

public static String imageToBase64Str(String imgFile) {
        InputStream inputStream = null;
        byte[] data = null;
        try {
            inputStream = new FileInputStream(imgFile);
            data = new byte[inputStream.available()];
            inputStream.read(data);
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 加密
        BASE64Encoder encoder = new BASE64Encoder();
        return encoder.encode(data);
    }

3、重写execute,实现执行逻辑

@Override
    public String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException {

        File_path = (CompoundVariable) values[0];
        String filepath = File_path.execute().trim();
        File dir = new File(filepath);
        String[] fileList = dir.list(); // 获取指定文件夹下文件的名字
        List base64List = new ArrayList();  // 可能存在bug,目前以列表存放图片地址然后随机选取列表,如果图片数量过多可能导致list过长
        for (int i = 0; i < fileList.length; i++) {
            String pic1 = filepath + "\\" + fileList[i];
            base64List.add(pic1);
        }
        int index = (int)(Math.random()*base64List.size());
        String img_path = base64List.get(index);
        System.out.println(img_path);
        String base64Str = imageToBase64Str(img_path);
        return base64Str;
    }

4、设置函数接收参数值,接收JMeter界面用户传递过来的参数

 @Override
    public void setParameters(Collection parameters) throws InvalidVariableException {
        checkParameterCount(parameters,1);   //  检查参数个数。因为本次传入参数就一个(文件地址)
        values = parameters.toArray();   // 获取参数
    }

5、打包成jar后放入jmeter安装目录下的lib\ext下,重启jmete后就能在函数助手中看到了。

6、基本思路就是这样,主要就是重写execute()这个方法。

 作为一位过来人也是希望大家少走一些弯路,希望能对你带来帮助。(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等),相信能使你更好的进步!

留【自动化测试】即可【自动化测试交流】:574737577(备注ccc)icon-default.png?t=N4P3http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Yg3Y37fdTkAHAEyqD-gLuGbCI8UEiRA1&authKey=wJQ7hIhE9p%2FQDdwXXPjwolJnDMyBoIU%2FtVbTLbNFIvzIWoA7LZfVmSNccWx15jwG&noverify=0&group_code=574737577

Jmeter自定义函数二次开发_第1张图片

 

 

你可能感兴趣的:(接口自动化测试,自动化测试,软件测试,jmeter,python,开发语言,java,postman)