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测试中的问题,万分感谢! 目 ...
随机推荐
- 阿里云ECS服务器部署HADOOP集群(四):Hive本地模式的安装
本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建. 本地模式需要采用MySQL数据库存储数据. 1 环境介绍 一台阿里云ECS服务器:master ...
- MySQL数据库:多表连接查询
多表连接查询 注意:使用连接技术建议将表经行重命名! # explain 检索连接是否达标 # 内连接 # 语法1 from 表1 inner join 表2 on 主键字段=外键字段 [where ...
- Ubuntu上安装python模块
sudo apt-get install python-pip ----先安装 pip模块 sudo pip install openpyxl ---通过pip安装python模块
- 《Web Development with Go》Mangodb插入map,slice,Embedded Documents
这几个好理解, 更好的实现,再说. package main import ( "fmt" "log" "time" "gopkg ...
- 《Web Development with Go》Mangodb插入struct数据
学习数据持久化. package main import ( "fmt" "log" "time" "gopkg.in/mgo.v ...
- R学习
R内容: R-1 基础 R-2 基础绘图 R-3 t分布--t置信区间--t检验 R-4 方差分析 R-5 相关分析-卡方分析 R-6 线性回归模型分析流程 R实战第7章 线性回归 逻辑回归 主成分分 ...
- 【SQL】多表查询中的 外连接 ,on,where
先简单粗暴给个结论,多表连结查询中,on比where更早起作用,系统首先根据各个表之间的联接条件,把多个表合成一个临时表后,再由where进行匹配过滤,where后语句为真,则能查询出来,而通过外连接 ...
- C语言程序设计100例之(20):过河卒
例20 过河卒 题目描述 如图1,在棋盘的A点有一个过河卒,需要走到目标B点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如图1的C点),该马所在的点和所有跳跃一步可达的点称 ...
- Charles 使用笔记
一.介绍 Charles 属于抓包软件. Charles 多平台支持,mac.windows.linux. Charles 是收费软件,可以免费试用 30 天.试用期过后,未付费的用户仍然可以继续使 ...
- 本地SQL Server数据库提示网络问题无法连接
运行程序时发现本地SQLserver数据库无法连接,提示信息为:在与SQL Server 建立连接时出现与网络相关的或特定与实例的错误.未能找到或无法访问服务器.请验证实例名称是否正确并且SQL Se ...