jmeter插件开发_jmeter插件_jmeter webservice测试 教程

背景

Jmeter有很多的配置元件可以定义变量值在测试过程中使用

比如最常见的两个:

配置元件主要是用于测试前配置,将配置转换为变量设置到Jmeter context中。

而Jmeter默认并没有配置文件(.properties)读取器,但由于Jmeter是开源的,我们自己可以自定义一个配置元件来读取配置文件。

目标

启动Jmeter后,我们可以从配置元件中看到“Property File Reader”,即我们自定义扩展的配置文件。

jmeter插件_jmeter插件开发_jmeter webservice测试 教程

在测试计划中添加它后,输入配置文件路径:

jmeter插件_jmeter插件开发_jmeter webservice测试 教程

比如以下是我们的配置文件

jmeter插件_jmeter webservice测试 教程_jmeter插件开发

创建一个简单的测试,如下图Debug Sampler的响应数据显示了我们读到属性值jmeter插件,在Jmeter中通过表达式${__P(Propertyname)}来获取属性值

jmeter插件_jmeter插件开发_jmeter webservice测试 教程

Jmeter的插件加载机制

Jmeter启动扫描扩展下的所有实现了JmterGUIComponent和TestBean接口的类,然后进行初始化。

  1. ClassFinder.findClassesThatExtend(

  2.    JMeterUtils.getSearchPaths(),

  3.    new Class[] {JMeterGUIComponent.class, TestBean.class }

所以只要确保插件的jar包在扩展路径下,默认路径是:JMETER_HOME/lib/ext

Jmeter的GUI机制

由于Jmeter是一个基于Swing的GUI工具,所以对它的GUI框架也需要有一定了解。JMeter内部有两种GUI框架

1.直接继承JMeterGUIComponent接口的抽象实现类:

  1. org.apache.jmeter.config.gui.AbstractConfigGui

  2. org.apache.jmeter.assertions.gui.AbstractAssertionGui

  3. org.apache.jmeter.control.gui.AbstractControllerGui

  4. org.apache.jmeter.timers.gui.AbstractTimerGui

  5. org.apache.jmeter.visualizers.gui.AbstractVisualizer

  6. org.apache.jmeter.samplers.gui.AbstractSamplerGui

2,通过Swing的Bean绑定机制

前者的好处是自由度高,可定制性强,但需要开发者关心GUI控件布局,以及从控件到Model的转换。 后者基本不需要开发者接触到GUI层的东西,定义好Bean以及BeanInfo即可。但SampleListener不支持BeanInfo方式定义。

IDE设置

首先我们需要新建一个Maven项目jmeter插件,并导入相关依赖包

  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <project xmlns="http://maven.apache.org/POM/4.0.0"

  3.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  4.         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  5.    4.0.0

  6.    com.techstar.plugins.configelement

  7.    PropertyReader

  8.    1.0-SNAPSHOT

  9.    

  10.        

  11.            

  12.                org.apache.maven.plugins

  13.                maven-compiler-plugin

  14.                

  15.                    7

  16.                    7

  17.                

  18.            

  19.        

  20.        

  21.            

  22.            

  23.                ${basedir}/src/main/resources

  24.                

  25.                    **/*

  26.                

  27.                true

  28.            

  29.            

  30.            

  31.                    ${basedir}/src/main/java

  32.                    

  33.                        **/*

  34.                    

  35.            

  36.        

  37.    

  38.    

  39.        

  40.            org.apache.jmeter

  41.            ApacheJMeter_core

  42.            4.0

  43.        

  44.        

  45.            org.slf4j

  46.            slf4j-log4j12

  47.            1.7.25

  48.        

  49.        

  50.            org.apache.logging.log4j

  51.            log4j-api

  52.            2.11.1

  53.        

  54.        

  55.            org.apache.logging.log4j

  56.            log4j-core

  57.            2.11.1

  58.        

  59.    

扩展配置元件创建读取配置文件类

  1. public class PropertyReader extends ConfigTestElement implements TestBean, TestStateListener {

  2.    //定义根日志器

  3.    private static final Logger logger = LogManager.getLogger(PropertyReader.class);

  4.    //配置文件路径

  5.    private String propFilePath;

  6.    public PropertyReader(){

  7.        super();

  8.    }

  9.    /**

  10.     * 在主线程测试开始之前被调用

  11.     * 我们需要在测试前加载配置

  12.     */

  13.    public void testStarted() {

  14.        //判断字段是否为空

  15.        if (StringUtils.isNotEmpty(getPropFilePath())){

  16.            try {

  17.                //使用传入的字符串返回一个Path对象

  18.                Path path = Paths.get(getPropFilePath());

  19.                //判断是否为为绝对路径

  20.                if (!path.isAbsolute()) {

  21.                    //得到文件路径

  22.                    path = Paths.get(FileServer.getFileServer().getBaseDir(), path.toString());

  23.                }

  24.                //加载配置文件

  25.                JMeterUtils.getJMeterProperties().load(new FileInputStream(path.toString()));

  26.                logger.info("loading Property:"+path);

  27.                } catch (FileNotFoundException e) {

  28.                    logger.error(e.getMessage());

  29.                } catch (IOException e){

  30.                    logger.error(e.getMessage());

  31.            }

  32.            }

  33.        }

  34.    /**

  35.     * 在主线程测试开始之前被调用

  36.     * @param s

  37.     */

  38.    public void testStarted(String s) {

  39.        testStarted();

  40.    }

  41.    /**

  42.     * 测试结束后,所有线程都调用一次

  43.     */

  44.    public void testEnded() { }

  45.    /**

  46.     * 测试结束后,所有线程都调用一次

  47.     * @param s

  48.     */

  49.    public void testEnded(String s) { }

  50.    /**

  51.     * 返回配置文件路径

  52.     * @return

  53.     */

  54.    public String getPropFilePath(){

  55.        return this.propFilePath;

  56.    }

  57.    /**

  58.     * 读取配置文件路径

  59.     * @param propFilePath

  60.     */

  61.    public void setPropFilePath(String propFilePath){

  62.        this.propFilePath = propFilePath;

  63.    }

  64. }

创建插件GUI类

  1. public class PropertyReaderBeanInfo extends BeanInfoSupport {

  2.    //创建一个文件路径常量

  3.    private  static final String FIELD_PROPERTY_FILE_PATH = "propFilePath";

  4.    /**

  5.     * 创建一个无参构造函数

  6.     */

  7.    public PropertyReaderBeanInfo() {

  8.        //调用配置文件读取类

  9.        super(PropertyReader.class);

  10.        //在Jmeter GUI中添加字段及设置

  11.        //添加"FIELD_PROPERTY_FILE_PATH"字段

  12.        PropertyDescriptor p = property(FIELD_PROPERTY_FILE_PATH);

  13.        //设置该字段必填项

  14.        p.setValue(NOT_UNDEFINED,Boolean.FALSE);

  15.        //设置该字段默认值

  16.        p.setValue(DEFAULT,"");

  17.    }

  18. }

创建插件GUI配置文件

  1. #配置元件

  2. displayName=Property File Reader

  3. #元素的显示名称

  4. propFilePath.displayName=File Path

  5. #元素的简短描述

  6. propFilePath.shortDescription=Absolute Path of the Property file

插件目录结构

jmeter webservice测试 教程_jmeter插件开发_jmeter插件

插件打包

测试插件

插件测试成功~

本文源码:

性能工具之Jmeter系列:

参考文献:

限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688