`

jmetr自定义Java Request(二)

 
阅读更多

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 Request Demo

    Java Request是JMeter提供的一个自定义 Sampler,允许开发者使用Java代码直接发送请求,这在处理非HTTP协议或者需要进行复杂交互时非常有用。你可以编写自己的Java类来实现特定的请求逻辑,然后在JMeter中配置这个...

    JMeter入门:Java Request实例

    在Java Request采样器中,有一个名为“Java Class”的输入框,这是你需要编写或导入自定义Java类的地方。你可以直接在该框中编写简单的Java代码,或者指定已存在于项目类路径中的类。例如,如果你要发送一个HTTP请求...

    Java中Request请求转发详解

    Java中Request请求转发详解 Java中Request请求转发是指在Servlet中使用RequestDispatcher将请求转发到另一个Servlet或JSP页面,以实现请求的重定向或包含。在本文中,我们将通过示例代码详细介绍Java中Request请求...

    java web 修改request携带的参数信息

    在Java Web开发中,我们经常需要处理HTTP请求(Request)。Request对象封装了客户端发送到服务器的所有数据,包括URL参数、请求头、请求体等。在某些场景下,可能需要对这些参数信息进行修改,比如安全过滤、数据校验...

    java中通过request获取IP以及MAC地址.java

    获取用户请求IP地址 根据IP地址获取mac地址

    java从request中拿到ua的工具包

    java从request中拿到ua的工具包,来源于github上的项目,我编译了它,方便大家在项目中引用,这是地址:http://www.bitwalker.eu/software/user-agent-utils

    java web学习_浅谈request对象中get和post的差异

    Java Web 学习之 Request 对象中 GET 和 POST 的差异 摘要:本文将对 Java Web 中 Request 对象中 GET 和 POST 方法的差异进行分析和比较,通过代码示例和输出结果,展示 GET 和 POST 方法的不同之处,并分析其优...

    IP工具类,通过传入的request获取ip地址(JAVA)

    Servlet是Java用于构建动态Web应用程序的标准接口。在Servlet中,我们通常使用`HttpServletRequest`对象来获取请求的相关信息,包括客户端的IP地址。以下是如何实现这一功能的代码示例: ```java import javax....

    uniapp小程序搭建UI框架 corlorUi,uView框架,以及全局工具,自定义时间,request,预览图片,全局登陆

    uniapp小程序搭建UI框架 corlorUi,uView框架,以及全局工具,...以及全局工具,自定义时间,request,预览图片,全局登陆uniapp小程序搭建UI框架 corlorUi,uView框架,以及全局工具,自定义时间,request,预览图片,

    ASP.NET Core自定义中间件如何读取Request.Body与Response.Body的内容详解

    本文将深入探讨如何在自定义中间件中读取`Request.Body`和`Response.Body`的内容。 首先,`Request.Body`代表HTTP请求的主体部分,通常用于发送POST数据或文件上传。它是`Stream`类型的,可以读取请求的数据。在ASP...

    实现java自定义注解拦截器.docx

    ### 实现Java自定义注解拦截器 #### 概述 本文主要介绍如何在Spring Boot项目中使用自定义注解来实现对特定方法的拦截功能。具体场景为:当访问项目中的控制器方法时,需要进行“token验证”,但登录等特殊方法...

    JAVA HTTP Request

    "JAVA HTTP Request"的主题涵盖了如何在Java中发送HTTP请求,这通常是通过使用内置的`java.net.URL`、`java.net.HttpURLConnection`类或者第三方库如Apache HttpClient、OkHttp来实现的。下面我们将深入探讨这些方法...

    Java自定义过滤器

    ### Java自定义过滤器知识点详解 #### 一、概述 在Java Web开发中,过滤器(Filter)是一种非常实用的功能,它可以对用户请求进行预处理或对响应进行后处理。通过配置过滤器,开发者可以在不修改任何现有代码的...

    普通java类 获取Request

    ### 普通Java类获取Request的方法 在Java Web开发中,经常需要在非Servlet类(如普通Java类)中获取`HttpServletRequest`对象,以便访问请求中的参数、头信息等。通常情况下,`HttpServletRequest`对象是在Servlet...

    JAVA如何获取当前系统的request url.txt

    该代码是介绍JAVA获取当前系统的url,与大家分享,请大家下载!

    java中对象的作用,如何获取Request对象

    在实际开发中,如果你在Java项目中无法获取到Request对象,可能是因为缺少了对Servlet API的支持。解决这个问题,你需要引入J2EE 1.4 Libraries。以下是两种导入方法: 1. **保持Java项目类型**:在Eclipse或...

    springboot工程自定义response注解、自定义规范化返回数据结构

    本主题将深入探讨如何在Spring Boot工程中通过自定义response注解、利用Java反射机制、设置自定义拦截器以及实现WebMvcConfigurer接口来实现这一目标。 首先,我们来看自定义response注解。在Spring Boot中,可以...

    java request.getParameter中文乱码解决方法

    java request.getParameter中文乱码解决方法 在 Java Web 开发中,request.getParameter() 获取 URL 中文参数乱码是非常常见的问题。今天,我们将分享几个解决中文乱码的方法,以便大家可以参考。 问题分析 在 ...

    JMeter实战技巧:使用Java Request Sampler进行接口测试

    JMeter实战技巧:使用Java Request Sampler进行接口测试

    java自定义分页标签

    Java自定义分页标签是Java Web开发中一种高效、可复用的方法,它允许开发者创建自己的标签库,用于处理分页逻辑,提高代码的可读性和可维护性。本篇文章将详细探讨如何在Java中实现一个自定义分页标签。 首先,理解...

Global site tag (gtag.js) - Google Analytics