Jmeter-Java请求实战
1.1. jmeter-java插件实现接口测试
(linux /mysql/rabbit-mq)
本次需要准备环境
Eclipse+jdk8
Jmeter
Python
1.1.1. Rabbit-mq web客户端简单介绍
Rabbit-mq的安装参见上一次的演示视频
生产速度:消息的产生速度,队列消息的写入
消费速度:消息的消费速度,队列消息的传出


1.1.2. nmon监控使用
(1) 以管理员身份在各节点服务器安装nmon
yum install nmon
(2) 运行nmon监控
nmon –f –s –c
参数说明:
-f 输出文件
-s 间隔多少秒获取一次监控数据
-c 一共要获取多少次数据
后台运行
nohup nmon –f –s –c &
(3) 监控结束后运行
sort …..nmon >> ….csv
将nmon监控文件转化成csv格式,然后通过ssh-ftp工具取到windows下,利用nmon analyser工具将csv文件转换成excel格式文件,并保存,可以打开文件查看监控数据。
监控输出文件excel文件分析说明
主要查看SYS_SUM页内容(查看cpu利用率,磁盘IOPS,以及IO-Wait%)
(cpu利用率均值在70%以下,普通磁盘iops在4000以下,IO-Wait%均值在10%以下)

1.1.3. python屏幕截图
由于rabbitmq客户端是实时更新数据,所以要保留测试过程中的数据,需要对客户端屏幕进行截图。
采用 python脚本进行自动截图
(1) 配置本地python环境
(2) 安装 python截图模块
pip install image
(3) 编写python截图脚本,保存为image.py文件
脚本示例:
import time
from PIL import ImageGrab
for i range():
im = ImageGrab.grab()
addr = str(time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime()))+str('.jpg')
im.save(addr,'jpeg')
time.sleep()
(4) 将脚本拷贝到一个可写的目录(注意空目录最好,并且有足够空间),运行脚本
python image.py
在脚本目录将生成屏幕截图,每隔5秒一张图片
1.1.4. 编写rabbitmq生产者插件
(1) 本地环境eclipse
(2) 创建工程





创建libs文件夹并导入jmeter的核心libs和java请求lib;

导入rabbitmq-java客户端lib和json数据lib





代码示例如下:
package RabbitMQJmeter; import java.io.IOException;
import java.util.concurrent.TimeoutException; import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.samplers.SampleResult; import com.alibaba.fastjson.JSONObject;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory; public class LCS2Logic extends AbstractJavaSamplerClient {
// 定义rabbitmq服务器的配置信息
public static String MQ_serverip;
public static String MQ_serverport;
public static String MQ_serveruser;
public static String MQ_serveruserpwd;
public static String MQ_queue;
public static String MQ_exchange;
public static String MQ_rkey;
// 定义消息发送次数
public static String send_count;
// 定义mq的队列消息ec信息
public static String ec_sessionId;
public static String ec_ecid;
public static String ec_routInfo;
public static String ec_priority;
public static String ec_groupId;
// 定义mq的队列消息ec msg信息
public static String msg_templateId;
public static String msg_templateContent;
public static String msg_content;
public static String msg_mobiles;
public static String msg_sign;
public static String msg_extendCode;
public static String msg_needMo; //
public ConnectionFactory factory;
public Connection conn;
public Channel channel; // 设置可用参数及的默认值;
@Override
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("MQ_serverip", "192.168.32.204");
params.addArgument("MQ_serverport", "5672");
params.addArgument("MQ_serveruser", "mas");
params.addArgument("MQ_serveruserpwd", "mas");
params.addArgument("MQ_queue", "downQueue.queue2");
params.addArgument("MQ_exchange", "downQueue.queue2");
params.addArgument("MQ_rkey", "downQueue.queue2");
params.addArgument("send_count", "1");
params.addArgument("ec_sessionId", "3");
params.addArgument("ec_ecid", "EC-1");
params.addArgument("ec_routInfo", "127.0.0.1");
params.addArgument("ec_priority", "1");
params.addArgument("ec_groupId", "3");
params.addArgument("msg_templateId", "");
params.addArgument("msg_templateContent", "");
params.addArgument("msg_content", "test message jmeter");
params.addArgument("msg_mobiles", "13525102870,13671381066,18827103637");
params.addArgument("msg_sign", "ABVFGH1");
params.addArgument("msg_extendCode", "afsd");
params.addArgument("msg_needMo", "1");
return params;
} // 每个线程测试前执行一次,做一些初始化工作;
@Override
public void setupTest(JavaSamplerContext arg0) {
MQ_serveruser = arg0.getParameter("MQ_serveruser", "");
MQ_serveruserpwd = arg0.getParameter("MQ_serveruserpwd", "");
MQ_serverip = arg0.getParameter("MQ_serverip", "");
MQ_serverport = arg0.getParameter("MQ_serverport", "");
MQ_queue = arg0.getParameter("MQ_queue", "");
MQ_exchange = arg0.getParameter("MQ_exchange", "");
MQ_rkey = arg0.getParameter("MQ_rkey", "");
int server_port = Integer.parseInt(MQ_serverport);
factory = new ConnectionFactory();
factory.setUsername(MQ_serveruser);
factory.setPassword(MQ_serveruserpwd);
factory.setHost(MQ_serverip);
factory.setPort(server_port);
// Connection conn;
try {
conn = factory.newConnection();
channel = conn.createChannel();
channel.exchangeDeclare(MQ_exchange, "direct", true);// EXCHANGE
// 定义交换机
String queueName = MQ_queue;// message-queue得到消息队列
channel.queueBind(queueName, MQ_exchange, MQ_rkey);// route-bind
// 定义类似路由器的东西路由交换机VS队列
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
} // long start = System.currentTimeMillis();
// System.out.println("start:" + start);
} // 开始测试,从arg0参数可以获得参数值;
@Override
public SampleResult runTest(JavaSamplerContext arg0) {
send_count = arg0.getParameter("send_count", "");
ec_sessionId = arg0.getParameter("ec_sessionId", "");
ec_ecid = arg0.getParameter("ec_ecid", "");
ec_routInfo = arg0.getParameter("ec_routInfo", "");
ec_priority = arg0.getParameter("ec_priority", "");
ec_groupId = arg0.getParameter("ec_groupId", "");
msg_templateId = arg0.getParameter("msg_templateId", "");
msg_templateContent = arg0.getParameter("msg_templateContent", "");
msg_content = arg0.getParameter("msg_content", "");
msg_mobiles = arg0.getParameter("msg_mobiles", "");
msg_sign = arg0.getParameter("msg_sign", "");
msg_extendCode = arg0.getParameter("msg_extendCode", "");
msg_needMo = arg0.getParameter("msg_needMo", "");
//消息内容格式
int sessionId = Integer.parseInt(ec_sessionId);
String ecId = ec_ecid;
String routInfo = ec_routInfo;
int priority = Integer.parseInt(ec_priority);
int groupId = Integer.parseInt(ec_groupId);
String templateId = msg_templateId;
String[] templateContent = msg_templateContent.split(",");
String content = msg_content;
String[] mobiles = msg_mobiles.split(",");
String sign = msg_sign;
String extendCode = msg_extendCode;
int needMo = Integer.parseInt(msg_needMo);
//转换成json格式
JSONObject jsonObject = new JSONObject();
JSONObject msgObject = new JSONObject();
jsonObject.put("sessionId", sessionId);
jsonObject.put("ecId", ecId);
jsonObject.put("routInfo", routInfo);
jsonObject.put("priority", priority);
jsonObject.put("groupId", groupId);
//
msgObject.put("templateId", templateId);
msgObject.put("templateContent", templateContent); msgObject.put("content", content);
msgObject.put("mobiles", mobiles); msgObject.put("sign", sign);
msgObject.put("extendCode", extendCode);
msgObject.put("needMo", needMo);
jsonObject.put("msg", msgObject);
//
String messageBody = jsonObject.toString();
byte[] messageBodyBytes = messageBody.getBytes();
// 长连接服务器发送过来的消息头,12个字节,
byte[] mqHeadBytes = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
byte[] messageBytes = new byte[mqHeadBytes.length + messageBodyBytes.length];
System.arraycopy(mqHeadBytes, 0, messageBytes, 0, mqHeadBytes.length);
System.arraycopy(messageBodyBytes, 0, messageBytes, mqHeadBytes.length, messageBodyBytes.length);
// 打印输出调试
// System.out.println("生产者:" + messageBody + " in thread:" +
// Thread.currentThread().getName());
int count = Integer.parseInt(send_count);
///
SampleResult sr = new SampleResult();
sr.setSampleLabel("JavaTest_RabbitMQ_MSG"); try {
// jmeter开始统计响应时间标记
sr.sampleStart(); // publish / sub 生产者的作用就是将消息推送到消息队列里面去 实现类似于publish的功能
for (int i = 0; i < count; i++) {
channel.basicPublish(MQ_exchange, MQ_rkey, null, messageBytes);
}
// sr.isSuccessful();
sr.setSuccessful(true);
} catch (IOException e) {
sr.setSuccessful(false);
e.printStackTrace();
} finally {
sr.sampleEnd();// jmeter 结束统计响应时间标记
}
return sr;
} // 测试结束时调用;
@Override
public void teardownTest(JavaSamplerContext arg0) {
try {
channel.close();
conn.close();
// long end = System.currentTimeMillis();
// System.out.println("end:" + end);
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
} } }
Jmeter-Java请求实战的更多相关文章
- jmeter中实现java请求实战日志
view code public class JdbcInsert implements JavaSamplerClient { // 全局变量 PreparedStatement pstmt; Co ...
- jmeter java请求
demo下载地址http://yun.baidu.com/share/link?shareid=4277735898&uk=925574576 1.引用jmeter的jar包 到jmeter的 ...
- Jmeter JAVA请求入门
一.Jmeter完成一个java请求实现方法 两种实现方式: 实现JavaSamplerClient接口 继承AbstractJavaSamplerClient抽象类 二.使用AbstractJava ...
- jmeter java请求:java.lang.VerifyError: Cannot inherit from final class
被这个问题block了一天,应该是包冲突的.通过对包删减排查,结果发现是netty-all-xxx.Final.jar包的问题 应该是jmeter版本和netty版本的冲突吧,换成jmeter 3.1 ...
- jmeter java 请求 payload
1.注册页面抓包看见内容如下: POST http://test.nnzhp.cn/bbs/forum.php?mod=post&action=edit&extra=&edit ...
- JMeter 中实现发送Java请求
JMeter 中实现发送Java请求 1. 步骤1 新建JAVA项目 File -> New -> Java Project 如上图,填写Project Name,然后Next,打开以J ...
- 【JMeter】JMeter完成一个java请求的压测
先定义一下我说的remoteService:即远程调用服务,没有http的url.不对外提供或者对外提供有限的服务.具体视各公司的代码架构所定,比如有些公司为web工程,scf服务,db.scf即为服 ...
- Jmeter性能测试之如何写Java请求测试用例类
一. 引言: 最近工作中的一个项目要求做性能测试,该项目由提供服务的几个应用组成,选用的框架是阿里巴巴公司开源的服务框架Dubbo.关于Dubbo的介绍,网上也有很多资料,本人只是做了粗略的了解,没有 ...
- jmeter之自定义java请求性能测试
一.环境准备 1.新建一个java工程 2.导入jar包:ApacheJMeter_core.jar ApacheJMeter_java.jar ...
- 转:JMeter进行Java 请求测试
本文转自:http://blog.csdn.net/xiazdong/article/details/7873767 向原作者致敬,看了他的文章才让我顺利解决了JMeter测试中的问题,万分感谢! 目 ...
随机推荐
- 因果推理的春天系列序 - 数据挖掘中的Confounding, Collidar, Mediation Bias
序章嘛咱多唠两句.花了大半个月才反反复复,断断续续读完了图灵奖得主Judea Pearl的The Book of WHY,感觉先读第四章的案例会更容易理解前三章相对抽象的内容.工作中对于归因问题迫切的 ...
- [译]Vulkan教程(14)图形管道基础之固定功能
[译]Vulkan教程(14)图形管道基础之固定功能 Fixed functions 固定功能 The older graphics APIs provided default state for m ...
- java之对象类型转换
基本数据类型之间的转换: 自动类型转换:小的数据类型可以自动转换成大的数据类型: 强制类型转换:可以把大的数据类型转换成小的数据类型:float = (float)32.0; public class ...
- java超市购物管理系统
一.概述 1.鹏哥前面有写过java项目超市管理系统项目,传送门 2.收到很多朋友私信给我,也很感谢老铁们的反馈和交流,前面这个项目只是对java基础知识和面向对象的思想练习,但是没有涉及到java如 ...
- strlen函数 (求字符串长度函数)
strlen函数原型在<string.h>中 #include <stdio.h> #include <string.h> int main(){ char *p= ...
- 超级简单的数组加单链表实现Map
/** * 超级简单的数组加单链表实现Map * @author jlj * */ public class MyHashMap { public MyList[] lists; public int ...
- ZooKeeper(六):watch机制的原理与实现
因为ZK有watch机制,可以随时发现一些数据的变化,从而达到数据的及时性. ZK的所有读操作都可以设置watch监视点: getData, getChildren, exists. 写操作则是不能设 ...
- ASP.NET MVC教程二:ASP.NET MVC应用程序结构详解
在上一篇文章中,讲解了一些MVC的概念,并且创建了第一个ASP.NET MVC项目,这篇文章将讲解ASP.NET MVC程序中的代码解构,新创建的MVC应用程序解构如下图所示: 一.App_Data ...
- python连数据库制作音乐软件
import pymysql conn = pymysql.connect(host="localhost",user="root",password=&quo ...
- Scrapy的下载中间件
下载中间件 简介 下载器,无法执行js代码,本身不支持代理 下载中间件用来hooks进Scrapy的request/response处理过程的框架,一个轻量级的底层系统,用来全局修改scrapy的re ...