天天看點

jmeter 開發java請求

jmeter 實作java請求1方法有兩種:

第一種: 繼承抽象類   MyJavaClass extends AbstractJavaSamplerClient{ }

第二種:實作 JavaSamplerClient 接口 SecretClass implements JavaSamplerClient{ }

這裡我用第二種:

JavaSamplerClient主要有4個方法:

public void setupTest(JavaSamplerContext ctx) {}  //可以為空 

public SampleResult runTest(JavaSamplerContext ctx) {}   //這個是編寫自定義java請求的核心代碼區

public void teardownTest(JavaSamplerContext ctx) { }  // 可為空

public Arguments getDefaultParameters() {}  // 參數入口區

代碼實作:

package com.javareq;

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class SecretClass implements  JavaSamplerClient {
    private static final Logger logger = LoggerFactory.getLogger(SecretClass.class);
    @Override
    public void setupTest(JavaSamplerContext ctx) {

    }

    @Override
    public SampleResult runTest(JavaSamplerContext ctx) {
        SampleResult result= new SampleResult();
        String secret=ctx.getParameter("secret");
        String message=ctx.getParameter("message");
        String algorithm=ctx.getParameter("algorithm");
        result.sampleStart();
        String response=javaSecretUtil.EncryptHmacSha1(secret,message,algorithm);
        result.setResponseData(response,"utf-8");
        result.setDataType(SampleResult.TEXT);
        result.setSuccessful(true);
        result.setResponseMessage("方法執行成功!");
        result.setResponseCode("0");
        result.sampleEnd();
        logger.info("result finally get as String is : "+ result.getResponseDataAsString());
        return result;
    }

    @Override
    public void teardownTest(JavaSamplerContext ctx) {

    }

    @Override
    public Arguments getDefaultParameters() {
        Arguments arguments =new Arguments();
        arguments.addArgument("secret","");
        arguments.addArgument("message","");
        arguments.addArgument("algorithm","");
        return arguments;
    }

//    public static void main(String[] args) {
//        SecretClass demo = new SecretClass();
//        Arguments arguments = new Arguments();
//        arguments.addArgument("secret","hello");
//        arguments.addArgument("message","key");
//        arguments.addArgument("algorithm","HmacSHA1");
//
//        String response=codecHmacSha1.hmacSha1("hello","key","HmacSHA1");
//
//        JavaSamplerContext ctx=new JavaSamplerContext(arguments);
//        demo.setupTest(ctx);
//        demo.runTest(ctx);
//        demo.teardownTest(ctx);
//
//
//    }

}
      

 main方法為測試使用,使用完打包前注釋掉

加密類:

package com.javareq;

import org.apache.commons.codec.digest.DigestUtils;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;


/**
 * dependency : org.apache.commons.codec==1.1.4 and org.apache.commons.lang3==3.9

 */
public class javaSecretUtil {
    static String utf8="utf-8";

    static  String EncryptHmacSha1(String encryptText,String key,String ALGORITHM){
        String res=null;
        try {

            SecretKey secretKey = new SecretKeySpec(key.getBytes(),ALGORITHM);
            Mac mac = Mac.getInstance(ALGORITHM);
            mac.init(secretKey);
            // deal text
            byte[] text = encryptText.getBytes(javaSecretUtil.utf8);
            byte[] bytes = mac.doFinal(text);
            res = Base64.getEncoder().encodeToString(bytes);

        }catch (Exception e){
            e.printStackTrace();
        }
        return res ;
    }

}
      

依賴包:

jmeter 開發java請求

 日志配置:

jmeter 開發java請求
<?xml version="1.0" encoding="UTF-8"?>
<Configuration package="log4j.test"
               >
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="log4j.test.Log4jTest">
            <AppenderRef ref="Console"/>
        </Logger>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>
      

打包完成放入lib/ext測試請求:

jmeter 開發java請求

 監聽結果樹:

jmeter 開發java請求

當然也可以本地先調試好再打包:

使用打包前要注釋的main方法調試,用完記得注釋掉在打包前:

jmeter 開發java請求