在网上找了关于jmeter连接hbase的方式,主要分为两种:通过导入jar包连接(Java Request)和通过BeanShell远程连接,由于刚接触jmeter没多久,对BeanShell还不熟,所以打算通过eclipse用Java编写连接hbase的程序并打包成jar包,导入到jmeter的方式连接hbase。

HBase本地远程连接HBase是测试成功的,一开始采用直接打包成runnable jar的方式导入到jmeter,但是创建Java Request之后,页面查不到创建好的接口,后来网上查询到,需要专门写一个程序继承“AbstractJavaSamplerClient”类,jmeter才能识别。

1、创建Java工程

新创建一个Java工程或者在需要调用的工程上创建个类,将ext目录下ApacheJMeter_core.jar、ApacheJMeter_java.jar引入项目(若提示无法找到org/apache/jorphan/logging/LoggingManager接口,需要同时引入lib目录下的jorphan.jar包);

继承AbstractJavaSamplerClient类,并重写以下方法:

public Arguments getDefaultParameters();设置可用参数及的默认值;
public void setupTest(JavaSamplerContext arg0):每个线程测试前执行一次,做一些初始化工作;
public SampleResult runTest(JavaSamplerContext arg0):开始测试,从arg0参数可以获得参数值;
public void teardownTest(JavaSamplerContext arg0):测试结束时调用;

具体接口如下:

package main.jmeter;

import java.io.IOException;

import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
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 main.hbase.HBaseDAO; public class Create extends AbstractJavaSamplerClient {
private String tableName = null;//表名
private String rowkey = null; //rowkey值
private SampleResult results; /**
* 设置传入参数
* 可以设置多个,已设置的参数会显示到Jmeter参数列表中
*/
@Override
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("tableName","");
params.addArgument("rowkey","");
return params;
} /**
* 初始化方法,初始化性能测试时的每个线程
* 实际运行时每个线程仅执行一次,在测试方法运行前执行,类似于LoadRunner中的init方法
*/
@Override
public void setupTest(JavaSamplerContext context) {
results = new SampleResult();
tableName = context.getParameter("tableName");//注意:此处是接收jmeter的参数传入,需要用引号括起来,否则读取不到值
if(tableName != null && tableName.length() > 0){
results.setSamplerData(tableName);
}
rowkey = context.getParameter("rowkey");
if(rowkey != null && rowkey.length() > 0){
results.setSamplerData(rowkey);
}
}; /**
* 性能测试时的线程运行体
* 测试执行的循环体,根据线程数和循环次数的不同可执行多次,类似于Loadrunner中的Action方法
*/
@SuppressWarnings("deprecation")
@Override
public SampleResult runTest(JavaSamplerContext arg0) {
boolean success = false;
results.sampleStart();
HBaseDAO hbase = new HBaseDAO();
HTable table = hbase.getHTable(tableName);
// getRow 根据rowkey获取所有版本记录
Result r;
try {
r = hbase.getRowVersions(table, rowkey,1);
KeyValue[] kv = r.raw();
for(KeyValue value:kv){
results.setDataEncoding("UTF-8");
results.setResponseData("运行结果 : value = " + new String(value.getValue()));
success = true;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
table.close();
results.sampleEnd();
results.setSuccessful(success);
} catch (IOException e) {
e.printStackTrace();
}
}
return results;
} /**
* 测试结束方法,结束测试中的每个线程
* 实际运行时,每个线程仅执行一次,在测试方法运行结束后执行,类似于Loadrunner中的End方法
*/
@Override
public void teardownTest(JavaSamplerContext arg0) { } }

2、打包并导入

将编辑好的Java项目打成jar包:Export->JAR file->finish

将导出的jar包放入\lib\ext目录下

3、运行JMeter

打开jmeter,点击测试计划将HBase依赖的所有jar包加入环境(建议先拷贝至ext目录下),添加线程组、Java Request

在类名称中找到自己创建的类,参数列表会自动显示类中自定义的参数,填入要测试的值(可添加CSV配置元件,通过参数方式传入);

添加察看结果树、聚合报告,看是否能正常运行,若有异常,点击右上角三角符号查看原因

若遇到java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.异常,是由于找不到hadoop.home.dir的路径;

我本地运行连接hbase是正常的,但是导入到JMeter之后报个这个异常,我们集群用的是Hadoop 2.6.0,所以从网上下载了个Apache Hadoop Common 2.6.0:https://github.com/amihalik/hadoop-common-2.6.0-bin

解压到本地,然后在HBase的初始化程序中添加(也可配置环境变量)

System.setProperty("hadoop.home.dir", "D:\\Hadoop\\hadoop-common-2.6.0");

重新打包后运行正常。

JMeter测试HBase的更多相关文章

  1. 用JMeter测试monggodb的请求

    JMeter测试MongoDB性能有两种方式,一种是利用JMeter直接测试MongoDB[即通过MongoDB协议测试],另一种是写Java代码方式测试MongoDB[即通过java请求测试] 注: ...

  2. JMeter学习(十九)JMeter测试MongoDB

    JMeter测试MongoDB性能有两种方式,一种是利用JMeter直接进行测试MongoDB,还有一种是写Java代码方式测试MongoDB性能. 第一种方法 1.编写Java代码,内容如下: pa ...

  3. Jmeter测试webocket协议

    Jmeter本身不支持websocket协议的,所以需要安装第三方的插件还有6个依赖包. 首先,我们需要准备Jmeter的WebSocket协议的支持插件: JMeterWebSocketSample ...

  4. JMeter 测试Web登录

    JMeter测试 前置条件: 1安装JMeter 下载地址:http://jmeter.apache.org/ 2安装badBoy http://www.badboy.com.au/download/ ...

  5. Windows 7下搭建Jmeter测试环境

    jmeter配置.安装 一. 工具描述 apache jmeter是100%的java桌面应用程序,它被设计用来加载被测试软件功能特性.度量被测试软件的性能.设计jmeter的初衷是测试web应用,后 ...

  6. 【jmeter】JMeter测试MongoDB

    JMeter测试MongoDB性能有两种方式,一种是利用JMeter直接进行测试MongoDB,还有一种是写Java代码方式测试MongoDB性能. 第一种方法 1.编写Java代码,内容如下: pa ...

  7. jmeter测试本地myeclips调试状态下的tomcat程序死锁

    在myeclipse调试状态下的tomcat程序,用jmeter测试,居然发生死锁,调试两天无果,直接运行tomcat而不通过myeclipse,无死锁,真是又好气又好笑..

  8. 性能测试工具比较:LoadRunner vs JMeter - 测试结果数据比较

    对web请求(HTTP/HTML)进行性能测试,确认请求响应时间.分别使用Loadrunner和JMeter进行测试,比较测试结果. 1.LoadRunner测试web请求响应时间 1.1  编制(录 ...

  9. jmeter测试dubbo接口

    本文讲解jmeter测试dubbo接口的实现方式,文章以一个dubbo的接口为例子进行讲解,该dubbo接口实现的功能为: 一:首先我们看服务端代码 代码架构为: 1:新建一个maven工程,pom文 ...

随机推荐

  1. Spring cloud微服务安全实战-5-2前端页面改造

    创建一个新的maveb项目,做一个admin的管理界面 用angular写前面的页面. 先吧dependcency引用引进来. 前端的插件能帮我在springboot里面搭建出一个nodeJS的环境来 ...

  2. 【超分辨率】—(ESRGAN)增强型超分辨率生成对抗网络-解读与实现

    一.文献解读 我们知道GAN 在图像修复时更容易得到符合视觉上效果更好的图像,今天要介绍的这篇文章——ESRGAN: Enhanced Super-Resolution Generative Adve ...

  3. maven 中配置多个mirror的问题

    公司搭建的maven私服做镜像,有使用aliyun的镜像,还有其他地方的, 默认情况下配置多个mirror的情况下,只有第一个生效.那么我们可以将最后一个作为默认值,前面配置的使用环境变量动态切换. ...

  4. sudo权限配置

    首先要禁止root的用户登录ssh  在ssh配置文件里面把root用户no掉,一般公司不允许用第三方软件直接root登陆. 一.linux给用户添加sudo权限: 有时候,linux下面运行sudo ...

  5. [转帖]MySQL的又一神器-锁,MySQL面试必备

    MySQL的又一神器-锁,MySQL面试必备 https://segmentfault.com/a/1190000020762791 lock 低一级的是 latch   原文链接:blog.ouya ...

  6. [转帖]nginx基础整理

    nginx基础整理 https://www.cnblogs.com/guigujun/p/6588545.html 目录结构如下: Nginx基础知识 Nginx HTTP服务器的特色及优点 Ngin ...

  7. 过滤器( filter )的使用

    转自:https://www.jianshu.com/p/2ea2b0e4d1f2 过滤器通常 在 web 服务端用的比较多,有要功能 在客户端的请求访问后端资源之前,拦截这些请求. 在服务器的响应发 ...

  8. Word表格和文本自由互换

    未完 ...... 点击访问原文(进入后根据右侧标签,快速定位到本文)

  9. 【程序人生】程序员真会玩,工作996,生病ICU

    昨天Github上一个项目彻底爆红了网络,短短一天star数突破一万,Issues已破1800,大家纷纷说出有关企业的不合理加班行为,句句吐露程序员的心声,掀起了一波抵制加班潮,抵制996. 该项目里 ...

  10. Python17之函数、类、模块、包、库

    一.函数 一个拥有名称.参数和返回值的代码块. 需要主动调用,否则不会执行,可以通过参数和返回值与其它程序进行交互 二.类 用来描述具有相同的属性和方法的对象集合.它定义了该集合中每个对象所共有的属性 ...