• 性能测试十二:jmeter进阶之java请求参数化


    如项目中的ip、端口号之类的,都可以在此代码中定义

    public Arguments getDefaultParameters() {
    // TODO Auto-generated method stub
    return null;
    }

    此处注册两个参数到jmeter的变量池:

    p_name,默认值设为abc

    p_desc,默认值设为123

    /**
    * 此函数里面可以人工注册一些参数,这些参数可以在java请求面板里展示或更改
    */
    @Override
    public Arguments getDefaultParameters() {
    Arguments arguments = new Arguments();
    arguments.addArgument("p_name", "abc");
    arguments.addArgument("p_desc", "123");

    return arguments;
    }

    由于改变了代码 ,需重新导出jar包,并在jmeter目录下替换原来的jar包

     

     重启jmeter

    这样就可以在代码里面引用到参数了

    当然,只要注册了过后,做什么参数都行

     

    在代码中使用:

    @Override
    public SampleResult runTest(JavaSamplerContext arg0) {
    SampleResult result = new SampleResult();
    // 给事务起个名称
    result.setSampleLabel("insert");
    // 事务开始
    result.sampleStart();
    // 执行sql之前,先进行参数化
    try {
    String p_name = arg0.getParameter("p_name");
    String p_desc = arg0.getParameter("p_desc");
    statement.setString(1, p_name);
    statement.setString(2, p_desc);
    int rows = statement.executeUpdate();
    if (rows > 0){
    // 事务成功
    result.setSuccessful(true);
    }else{
    // 事务失败
    result.setSuccessful(false);
    }

    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    // 事务结束
    result.sampleEnd();

    return result;
    }

     

    public static void main(String[] args) {
    MyJmeterTest test = new MyJmeterTest();
    // 创建一个JavaSamplerContext对象,该对象创建的时候需要传入一个Arguments对象
    JavaSamplerContext context = new JavaSamplerContext(test.getDefaultParameters());
    test.setupTest(context);
    test.runTest(context);
    test.teardownTest(context);
    }

    此时需再次导出、替换、重启jmeter就可以运行了

    jmeter java脚本调试最终版:

    package cn.test.jmeter;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;

    import org.apache.jmeter.config.Arguments;
    import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;
    import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
    import org.apache.jmeter.samplers.SampleResult;

    public class MyJmeterTest implements JavaSamplerClient {

    // 全局变量
    PreparedStatement statement;
    Connection conn;
    /**
    * 此函数里面可以人工注册一些参数,这些参数可以在java请求面板里展示或更改
    */
    @Override
    public Arguments getDefaultParameters() {
    Arguments arguments = new Arguments();
    arguments.addArgument("p_name", "abc");
    arguments.addArgument("p_desc", "123");

    return arguments;
    }

    /**
    * 初始化的操作写在setup方法里,类似于LR里的init
    */
    @Override
    public void setupTest(JavaSamplerContext arg0) {
    // 注册驱动,告诉Java接下来要链接哪个数据库
    try {
    Class.forName("com.mysql.jdbc.Driver");
    // 建立mysql数据库链接
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/oa", "root", "123456");
    // 把sql进行编译
    statement = conn.prepareStatement("insert into itcast_role (name, description) values (?,?)");
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    /**
    * 真正多次操作的业务,放在runtest方法里,类似于LR里的action
    */
    @Override
    public SampleResult runTest(JavaSamplerContext arg0) {
    SampleResult result = new SampleResult();
    // 给事务起个名称
    result.setSampleLabel("insert");
    // 事务开始
    result.sampleStart();
    // 执行sql之前,先进行参数化
    try {
    String p_name = arg0.getParameter("p_name");
    String p_desc = arg0.getParameter("p_desc");
    statement.setString(1, p_name);
    statement.setString(2, p_desc);
    int rows = statement.executeUpdate();
    if (rows > 0){
    // 事务成功
    result.setSuccessful(true);
    }else{
    // 事务失败
    result.setSuccessful(false);
    }

    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    // 事务结束
    result.sampleEnd();

    return result;
    }


    /**
    * 结束的操作放在teardown里,类似于LR里的end
    */
    @Override
    public void teardownTest(JavaSamplerContext arg0) {
    // 关闭链接
    try {
    conn.close();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }

    public static void main(String[] args) {
    MyJmeterTest test = new MyJmeterTest();
    // 创建一个JavaSamplerContext对象,该对象创建的时候需要传入一个Arguments对象
    JavaSamplerContext context = new JavaSamplerContext(test.getDefaultParameters());
    test.setupTest(context);
    test.runTest(context);
    test.teardownTest(context);
    }

    }

  • 相关阅读:
    【leetcode】1009. 十进制整数的反码
    【leetcode】1446. 连续字符
    __getattr__在python2.x与python3.x中的区别及其对属性截取与代理类的影响
    Python 中异常嵌套
    python 变量搜寻顺序法则LEGB之E注意事项
    %%的一个应用
    python中__str__与__repr__
    052-180
    052-177
    052-176
  • 原文地址:https://www.cnblogs.com/malinalian/p/10582989.html
Copyright © 2020-2023  润新知