jmeter自定义Java Request里面写了一个简单的java Request
下面弄一个比较真实一点的例子,比如我有一个DBUtil的类,我想测试一下这个类或者类里面的方法性能怎么样,这时我们就可以写一个自定义的java Request来测试。
DBUtil类如下:
package com.matt.DBUtil; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.*; import org.apache.commons.dbutils.*; import org.apache.commons.dbutils.handlers.*; import org.apache.log4j.Logger; public class DBUtil { private static final Logger logger = Logger.getLogger(DBUtil.class); static Connection conn = null; // 打开数据库连接 public static Connection openConnection(String host, String port, String name, String username, String password) { try { String driver; String url; driver = "com.mysql.jdbc.Driver"; url = "jdbc:mysql://" + host + ":" + port + "/" + name; Class.forName(driver); conn = DriverManager.getConnection(url, username, password); } catch (Exception e) { logger.error(e.getMessage(), e); throw new RuntimeException(e.getMessage(), e); } return conn; } // 关闭数据库连接 public static void closeConnection() { try { if (conn != null) { conn.close(); } } catch (Exception e) { logger.error(e.getMessage(), e); throw new RuntimeException(e.getMessage(), e); } } // 查询(返回 Array) public static Object[] queryArray(QueryRunner runner, String sql, Object... params) { Object[] result = null; try { result = runner.query(conn, sql, new ArrayHandler(), params); } catch (SQLException e) { logger.error(e.getMessage(), e); throw new RuntimeException(e.getMessage(), e); } printSQL(sql); return result; } // 查询(返回 ArrayList) public static List<Object[]> queryArrayList(QueryRunner runner, String sql, Object... params) { List<Object[]> result = null; try { result = runner.query(conn, sql, new ArrayListHandler(), params); } catch (SQLException e) { logger.error(e.getMessage(), e); throw new RuntimeException(e.getMessage(), e); } printSQL(sql); return result; } // 查询(返回 Map) public static Map<String, Object> queryMap(QueryRunner runner, String sql, Object... params) { Map<String, Object> result = null; try { result = runner.query(conn, sql, new MapHandler(), params); } catch (SQLException e) { logger.error(e.getMessage(), e); throw new RuntimeException(e.getMessage(), e); } printSQL(sql); return result; } // 查询(返回 MapList) public static List<Map<String, Object>> queryMapList(QueryRunner runner, String sql, Object... params) { List<Map<String, Object>> result = null; try { result = runner.query(conn, sql, new MapListHandler(), params); } catch (SQLException e) { logger.error(e.getMessage(), e); throw new RuntimeException(e.getMessage(), e); } printSQL(sql); return result; } // 查询(返回 Bean) public static <T> T queryBean(QueryRunner runner, Class<T> cls, Map<String, String> map, String sql, Object... params) { T result = null; try { if (map.isEmpty()) { result = runner.query(conn, sql, new BeanHandler<T>(cls, new BasicRowProcessor(new BeanProcessor(map))), params); } else { result = runner.query(conn, sql, new BeanHandler<T>(cls), params); } printSQL(sql); } catch (SQLException e) { logger.error(e.getMessage(), e); throw new RuntimeException(e.getMessage(), e); } return result; } // 查询(返回 BeanList) public static <T> List<T> queryBeanList(QueryRunner runner, Class<T> cls, Map<String, String> map, String sql, Object... params) { List<T> result = null; try { if (map.isEmpty()) { result = runner.query(conn, sql, new BeanListHandler<T>(cls, new BasicRowProcessor(new BeanProcessor(map))), params); } else { result = runner.query(conn, sql, new BeanListHandler<T>(cls), params); } printSQL(sql); } catch (SQLException e) { logger.error(e.getMessage(), e); throw new RuntimeException(e.getMessage(), e); } return result; } // 查询指定列名的值(单条数据) public static Object queryColumn(QueryRunner runner, String column, String sql, Object... params) { Object result = null; try { result = runner.query(conn, sql, new ScalarHandler<Object>(column), params); } catch (SQLException e) { logger.error(e.getMessage(), e); throw new RuntimeException(e.getMessage(), e); } printSQL(sql); return result; } // 查询指定列名的值(多条数据) public static <T> List<T> queryColumnList(QueryRunner runner, String column, String sql, Object... params) { List<T> result = null; try { result = runner.query(conn, sql, new ColumnListHandler<T>(column), params); } catch (SQLException e) { logger.error(e.getMessage(), e); throw new RuntimeException(e.getMessage(), e); } printSQL(sql); return result; } // 查询指定列名对应的记录映射 public static <T> Map<T, Map<String, Object>> queryKeyMap( QueryRunner runner, String column, String sql, Object... params) { Map<T, Map<String, Object>> result = null; try { result = runner.query(conn, sql, new KeyedHandler<T>(column), params); } catch (SQLException e) { logger.error(e.getMessage(), e); throw new RuntimeException(e.getMessage(), e); } printSQL(sql); return result; } // 更新(包括 UPDATE、INSERT、DELETE,返回受影响的行数) public static int update(QueryRunner runner, Connection conn, String sql, Object... params) { int result = 0; try { if (conn != null) { result = runner.update(conn, sql, params); } else { result = runner.update(sql, params); } printSQL(sql); } catch (SQLException e) { logger.error(e.getMessage(), e); throw new RuntimeException(e.getMessage(), e); } return result; } private static void printSQL(String sql) { if (logger.isDebugEnabled()) { logger.debug("SQL: " + sql); } } }
注: 这个类要引入commons-dbutils-1.6.jar 、log4j-1.2.16.jar、 mysql-connector-java-5.1.22-bin.jar
然后我想用jmeter测试一下这个类里面的一些方法的性能,下面以queryArrayList这个方法为例。
和jmeter自定义Java Request里面一样要写一个自定义的Java Request, 代码如下:
package com.matt.jmeter; import java.io.PrintWriter; import java.io.StringWriter; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.jmeter.config.Arguments; import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient; import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext; import org.apache.jmeter.samplers.SampleResult; import com.matt.DBUtil.DBUtil; public class TestDBUtilsSampler extends AbstractJavaSamplerClient { private String host = null; private String port = null; private String name = null; private String username = null; private String password = null; private String sql = null; private SampleResult sr; public Arguments getDefaultParameters() { Arguments args = new Arguments(); args.addArgument("Host", "localhost"); args.addArgument("Port", "3306"); args.addArgument("Name", "dbName"); args.addArgument("Username", "yourUsername"); args.addArgument("Password", "yourPwd"); args.addArgument("SqlString", "SqlString"); return args; } public void setupTest(JavaSamplerContext arg0) { host = arg0.getParameter("Host"); port = arg0.getParameter("Port"); name = arg0.getParameter("Name"); username = arg0.getParameter("Username"); password = arg0.getParameter("Password"); sql = arg0.getParameter("SqlString"); sr = new SampleResult(); sr.setSampleLabel("Test DBUtil Sampler"); if (sql != null && sql.length() > 0) { sr.setSamplerData(sql); } } public SampleResult runTest(JavaSamplerContext arg0) { sr.sampleStart(); try { DBUtil.openConnection(host, port, name, username, password); QueryRunner runner = new QueryRunner(); List<Object[]> list = DBUtil.queryArrayList(runner, sql); String str1 = ""; for(Object[] o : list){ for(Object ob : o){ //System.out.println(ob); str1 = str1 + ob + "|"; } str1 = str1 + ","; } sr.setResponseMessage("Get the result size:\t" + list.size()); sr.setResponseData(str1, "UTF-8"); sr.setDataType(SampleResult.TEXT); sr.setSuccessful(true); sr.setResponseCodeOK(); } catch (Throwable e) { sr.setResponseMessage("Exception is " + e); StringWriter stringWriter = new StringWriter(); e.printStackTrace(new PrintWriter(stringWriter)); sr.setResponseData(stringWriter.toString(),"UTF-8"); sr.setResponseCode("500"); sr.setSuccessful(false); } finally { DBUtil.closeConnection(); sr.sampleEnd(); } return sr; } public void teardownTest(JavaSamplerContext arg0) { } }
打成jar包, 放到jmeter的/lib/ext目录下。
上面说的另外三个依赖包,放到/lib目录下
重启Jmeter
在Thread Group上是右击,Add-->Sampler-->Java Request。
在下拉框选择com.matt.jmeter.TestDBUtilsSampler
在输入对应的数据库配制,
最后加上Results Tree 和 Aggregate Report, 运行。
相关推荐
Jmeter java reqest demo 项目中包含TCP, Http, RocketMQ请求.
一个非常棒的程序,用于修改request携带的参数信息。使用了filter等技术。
uniapp小程序搭建UI框架 corlorUi,uView框架,以及全局工具,...以及全局工具,自定义时间,request,预览图片,全局登陆uniapp小程序搭建UI框架 corlorUi,uView框架,以及全局工具,自定义时间,request,预览图片,
获取用户请求IP地址 根据IP地址获取mac地址
java从request中拿到ua的工具包,来源于github上的项目,我编译了它,方便大家在项目中引用,这是地址:http://www.bitwalker.eu/software/user-agent-utils
该代码是介绍JAVA获取当前系统的url,与大家分享,请大家下载!
HTTP Request for JAVA DEVE
普通java类 获取Request
HttpServletRequest request; // 是TagSupport类中定义的一个属性,它是javax.servlet.jsp.PageContext的对象 request = (HttpServletRequest) pageContext.getRequest(); JspWriter out = pageContext....
java中对象的作用,如何获取Request对象 java中对象的作用,如何获取Request对象
主要给大家介绍了关于在ASP.NET Core自定义中间件中如何读取Request.Body与Response.Body的内容,文中通过示例代码介绍的非常详细,对大家学习或者使用ASP.NET Core具有一定的参考学习价值,需要的朋友们下面来一起...
java中request.getcontextPath()的意思.doc
今天跟大家分享几个解决java Web开发中,request.getParameter()获取URL中文参数乱码的解决办法,需要的朋友可以参考下
主要介绍了Java中Request请求转发详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
主要介绍了java request.getHeader("user-agent")获取浏览器信息的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
此资源对应我的博客09_Java Web——Request&Response中给出案例的资源,可供参考
Request.java Request.java
主要介绍了java中request常用方法小结,需要的朋友可以参考下
获取客户端ip地址( 这个必须从客户端传到后台): jsp页面下,很简单,request....因为系统的VIew层是用JSF来实现的,因此页面上没法直接获得类似request,在bean里做了个强制转换java 获取客户端ip mac地址
Request是对httpclient的封装,类似于python的request库,用法Request.Get(pictureUrl).execute().returnContent().toString();需要以来httpclient和httpcore包。2020年1月更新。