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, 运行。
相关推荐
Java Request是JMeter提供的一个自定义 Sampler,允许开发者使用Java代码直接发送请求,这在处理非HTTP协议或者需要进行复杂交互时非常有用。你可以编写自己的Java类来实现特定的请求逻辑,然后在JMeter中配置这个...
在Java Request采样器中,有一个名为“Java Class”的输入框,这是你需要编写或导入自定义Java类的地方。你可以直接在该框中编写简单的Java代码,或者指定已存在于项目类路径中的类。例如,如果你要发送一个HTTP请求...
Java中Request请求转发详解 Java中Request请求转发是指在Servlet中使用RequestDispatcher将请求转发到另一个Servlet或JSP页面,以实现请求的重定向或包含。在本文中,我们将通过示例代码详细介绍Java中Request请求...
在Java Web开发中,我们经常需要处理HTTP请求(Request)。Request对象封装了客户端发送到服务器的所有数据,包括URL参数、请求头、请求体等。在某些场景下,可能需要对这些参数信息进行修改,比如安全过滤、数据校验...
获取用户请求IP地址 根据IP地址获取mac地址
java从request中拿到ua的工具包,来源于github上的项目,我编译了它,方便大家在项目中引用,这是地址:http://www.bitwalker.eu/software/user-agent-utils
Java Web 学习之 Request 对象中 GET 和 POST 的差异 摘要:本文将对 Java Web 中 Request 对象中 GET 和 POST 方法的差异进行分析和比较,通过代码示例和输出结果,展示 GET 和 POST 方法的不同之处,并分析其优...
Servlet是Java用于构建动态Web应用程序的标准接口。在Servlet中,我们通常使用`HttpServletRequest`对象来获取请求的相关信息,包括客户端的IP地址。以下是如何实现这一功能的代码示例: ```java import javax....
uniapp小程序搭建UI框架 corlorUi,uView框架,以及全局工具,...以及全局工具,自定义时间,request,预览图片,全局登陆uniapp小程序搭建UI框架 corlorUi,uView框架,以及全局工具,自定义时间,request,预览图片,
本文将深入探讨如何在自定义中间件中读取`Request.Body`和`Response.Body`的内容。 首先,`Request.Body`代表HTTP请求的主体部分,通常用于发送POST数据或文件上传。它是`Stream`类型的,可以读取请求的数据。在ASP...
### 实现Java自定义注解拦截器 #### 概述 本文主要介绍如何在Spring Boot项目中使用自定义注解来实现对特定方法的拦截功能。具体场景为:当访问项目中的控制器方法时,需要进行“token验证”,但登录等特殊方法...
"JAVA HTTP Request"的主题涵盖了如何在Java中发送HTTP请求,这通常是通过使用内置的`java.net.URL`、`java.net.HttpURLConnection`类或者第三方库如Apache HttpClient、OkHttp来实现的。下面我们将深入探讨这些方法...
### Java自定义过滤器知识点详解 #### 一、概述 在Java Web开发中,过滤器(Filter)是一种非常实用的功能,它可以对用户请求进行预处理或对响应进行后处理。通过配置过滤器,开发者可以在不修改任何现有代码的...
### 普通Java类获取Request的方法 在Java Web开发中,经常需要在非Servlet类(如普通Java类)中获取`HttpServletRequest`对象,以便访问请求中的参数、头信息等。通常情况下,`HttpServletRequest`对象是在Servlet...
该代码是介绍JAVA获取当前系统的url,与大家分享,请大家下载!
在实际开发中,如果你在Java项目中无法获取到Request对象,可能是因为缺少了对Servlet API的支持。解决这个问题,你需要引入J2EE 1.4 Libraries。以下是两种导入方法: 1. **保持Java项目类型**:在Eclipse或...
本主题将深入探讨如何在Spring Boot工程中通过自定义response注解、利用Java反射机制、设置自定义拦截器以及实现WebMvcConfigurer接口来实现这一目标。 首先,我们来看自定义response注解。在Spring Boot中,可以...
java request.getParameter中文乱码解决方法 在 Java Web 开发中,request.getParameter() 获取 URL 中文参数乱码是非常常见的问题。今天,我们将分享几个解决中文乱码的方法,以便大家可以参考。 问题分析 在 ...
JMeter实战技巧:使用Java Request Sampler进行接口测试
Java自定义分页标签是Java Web开发中一种高效、可复用的方法,它允许开发者创建自己的标签库,用于处理分页逻辑,提高代码的可读性和可维护性。本篇文章将详细探讨如何在Java中实现一个自定义分页标签。 首先,理解...