• 性能测试十一:jmeter进阶之java请求


    使用Java编写JDBC脚本对Mysql进行增删改查等操作的性能测试

    使用Jmeter提供的脚本框架依赖的jar包(分别在jmeter目录下的lib和ext目录下)

    ApacheJMeter_core.jar

    ApacheJMeter_java.jar

    avalon-framework-4.1.4.jar jorphan.jar

    logkit-2.0.jar

    若为4.+以上的jmeter还需加两个 slf4j-api-的.jar包

    脚本调试好后,导出为jar包,放在apache-jmeter-3.1libext目录下

    Jmeter脚本要点

    1,实现JavaSamplerClient接口

    2,四个方法:

    getDefaultParameters:获取参数,设置的参数会在Jmeter的参数面板上显示出来

    setupTest:初始化方法,只执行一次,跟LR里的init方法一样的,用于建立链接

    runTest:执行N次,处理业务

    teardownTest:结束方法,只执行一次,LR里的end方法是一样的,用于释放资源

    3,导出Jmeter的java脚本

    导出之前先把脚本运行一遍,使用main方法,空的也行

    file-export-runnable java file - launch configuration 那里要选择你的类名

    Library handing那里选择第三项copy xxxx

    将导出的xxx.jar 和xxx_lib文件夹放到Jmeter的lib/ext目录下

    重新启动Jmeter

     创建class文件时在interfaces处add->JavaSamplerClient

     

    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;

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

    /**
    * 初始化的操作写在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 {
    statement.setString(1, "abc");
    statement.setString(2, "test");
    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(new Arguments());
    test.setupTest(context);
    test.runTest(context);
    test.teardownTest(context);
    }

    }

     导出到jmeter中用

    拷贝到jmeter的lib_ext下,包括二次开发的脚本也都是放在这个目录下,重启jmeter

    创建一个java请求

  • 相关阅读:
    服务器管理注意事项
    帮朋友发个招聘信息
    tcp/ip协议简介
    程序员的本质(转)
    不同部门员工吃饭时聊些什么
    IE用户比Opera和Chrome用户的IQ低
    有一天,程序猿们突然发现他们要涨的工资掉到井里啦!大家都很害怕,连忙一个吊着一个,从树上伸到井里去捞工资。正好他们摸到工资的时候,一个老程序员忽然兴奋的大叫:别蠢了,要涨的工资还好好的挂在天上呢!
    asp.net使用缓存造成iis重启的问题
    Win批量修改文件名&扩展名
    引用变量位于Java虚拟机的运行时数据区的情况分析
  • 原文地址:https://www.cnblogs.com/zhongyehai/p/10171490.html
Copyright © 2020-2023  润新知