• 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 ;
        }
    
    }
    

    依赖包:

     日志配置:

    <?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测试请求:

     监听结果树:

    当然也可以本地先调试好再打包:

    使用打包前要注释的main方法调试,用完记得注释掉在打包前:

     
  • 相关阅读:
    android 布局中的单位及分辨率自解
    7种例子讲解Android Dialog!
    jqDnR 层拖动插件 潇湘博客
    jQuery选择器热榜
    左边补0 php 潇湘博客
    Javascript代码压缩、加密算法的破解分析及工具实现
    discuz 整合总结
    js 格式化 潇湘博客
    Linux内核网络协议栈深入分析(五)套接字的绑定、监听、连接和断开
    Linux内核基于Netfilter的内核级包过滤防火墙实现
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/12725750.html
Copyright © 2020-2023  润新知