1. 程式人生 > >性能測試Jmeter擴展學習-添加自定義函數

性能測試Jmeter擴展學習-添加自定義函數

默認 coder 技術分享 runtime rfi charset ons default 性能測試

  我們在使用jmeter的時候有時候會碰到jmeter現有插件或功能也無法支持的場景,比如前端加密,此時我們就需要自己手動編寫函數並導入了,下面就是手動修改並導入的過程。

  首先我們需要下載jmeter源碼壓縮包下來,我這裏下載的是apache-jmeter-4.0_src.zip,下載解壓後,此時直接導入jmeter源碼是不行的,我們需要修改兩個文件,如下圖,將eclipse去掉即可,變成.classpath和.project。(註意下,去cmd命令下修改,ren 舊文件名 新文件名)

技術分享圖片

  我們默認導入後,會發現lib下面沒有任何jar包,所以我們需要下載下來,我們通過“Ant build”添加build.xml,然後就會讀取配置文件所需的jar包,我們拉到下面雙擊選擇“download_jars”將依賴的jar包全部下載下來。(這裏需要一點時間,下載完後點擊install即可,也是在download_jars”下方不遠處)。install編譯好後就會在ext下看到jmeter的核心jar。

技術分享圖片

我們可以通過右上角或者F4將jar包導入到src下面,否則很多import都會失敗。然後在對jmeter路徑進行配置,否則啟動的話會出現啟動失敗。

技術分享圖片

然後在src->core->NewDriver啟動即可打開jmeter了。

在這裏我們寫一個base64編碼的函數,在src下新建目錄->custom(這個名稱隨意),新建如下圖所示:

技術分享圖片

代碼如下:

package org.apache.jmeter.custom.functions;

import com.sun.xml.bind.marshaller.MinimumEscapeHandler;
import org.apache.commons.math3.analysis.function.Min;
import org.apache.jmeter.engine.util.CompoundVariable; import org.apache.jmeter.functions.AbstractFunction; import org.apache.jmeter.functions.InvalidVariableException; import org.apache.jmeter.samplers.SampleResult; import org.apache.jmeter.samplers.Sampler; import java.nio.charset.Charset; import
java.util.Collection; import java.util.LinkedList; import java.util.List; import java.util.Base64; public class UTF8EcodingBase64 extends AbstractFunction { private static final String KEY = "__UTF8EcodingBase64"; private static final List<String> desc = new LinkedList<>(); static{ desc.add("content"); } Object[] values; @Override public String execute(SampleResult previousResult, Sampler currentSampler) throws InvalidVariableException { String content = ((CompoundVariable) values[0]).execute().trim(); String encodeText = ""; Base64.Encoder encoder = Base64.getEncoder(); encodeText = encoder.encodeToString(content.getBytes(Charset.forName("UTF-8"))); return encodeText; } @Override public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException { checkMinParameterCount(parameters, 1); values = parameters.toArray(); } @Override public String getReferenceKey() { return KEY; } @Override public List<String> getArgumentDesc() { return desc; } }

寫完代碼後我們還需要到build.xml下新增一些內容,新增內容如下:

<property name="src.custom" value="src/custom"/>
<property name="build.custom" value="build/custom"/>

<target name="compile-custom" depends="compile-jorphan,compile-core" description="Compile example components.">
    <mkdir dir="${build.custom}"/>
    <javac srcdir="${src.custom}" destdir="${build.custom}" source="${src.java.version}" optimize="${optimize}" debug="on" target="${target.java.version}"
           includeAntRuntime="${includeAntRuntime}" deprecation="${deprecation}" encoding="${encoding}">
      <include name="**/*.java"/>
      <classpath>
        <pathelement location="${build.jorphan}"/>
        <pathelement location="${build.core}"/>
        <path refid="classpath"/>
      </classpath>
    </javac>
  </target>

 <target name="install-custom" depends="compile-custom" description="Build and installs the example components.">
    <jar jarfile="${dest.jar}/ApacheJMeter_custom.jar" manifest="${build.dir}/MANIFEST_BIN.MF">
      <zipfileset file="${resources.meta-inf}/default.notice"
        fullpath="META-INF/NOTICE" />
      <zipfileset file="${resources.meta-inf}/default.license"
        fullpath="META-INF/LICENSE" />
      <fileset dir="${build.custom}" includes="**/*.class" />
      <fileset dir="${src.custom}" includes="**/*.properties" />
    </jar>
  </target>

然後我們在Ant build下就可以看到我們新加的“install-custom”,我們雙擊就會生成class文件,然後再run就會編譯產生jar包,最後拷貝jar包到jmeter的lib/ext目錄下即可使用了。

技術分享圖片

下圖為拷貝之後打開jmeter使用效果圖:

技術分享圖片

性能測試Jmeter擴展學習-添加自定義函數