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请求实战的更多相关文章

  1. jmeter中实现java请求实战日志

    view code public class JdbcInsert implements JavaSamplerClient { // 全局变量 PreparedStatement pstmt; Co ...

  2. jmeter java请求

    demo下载地址http://yun.baidu.com/share/link?shareid=4277735898&uk=925574576 1.引用jmeter的jar包 到jmeter的 ...

  3. Jmeter JAVA请求入门

    一.Jmeter完成一个java请求实现方法 两种实现方式: 实现JavaSamplerClient接口 继承AbstractJavaSamplerClient抽象类 二.使用AbstractJava ...

  4. jmeter java请求:java.lang.VerifyError: Cannot inherit from final class

    被这个问题block了一天,应该是包冲突的.通过对包删减排查,结果发现是netty-all-xxx.Final.jar包的问题 应该是jmeter版本和netty版本的冲突吧,换成jmeter 3.1 ...

  5. jmeter java 请求 payload

    1.注册页面抓包看见内容如下: POST http://test.nnzhp.cn/bbs/forum.php?mod=post&action=edit&extra=&edit ...

  6. JMeter 中实现发送Java请求

    JMeter 中实现发送Java请求 1.  步骤1 新建JAVA项目 File -> New -> Java Project 如上图,填写Project Name,然后Next,打开以J ...

  7. 【JMeter】JMeter完成一个java请求的压测

    先定义一下我说的remoteService:即远程调用服务,没有http的url.不对外提供或者对外提供有限的服务.具体视各公司的代码架构所定,比如有些公司为web工程,scf服务,db.scf即为服 ...

  8. Jmeter性能测试之如何写Java请求测试用例类

    一. 引言: 最近工作中的一个项目要求做性能测试,该项目由提供服务的几个应用组成,选用的框架是阿里巴巴公司开源的服务框架Dubbo.关于Dubbo的介绍,网上也有很多资料,本人只是做了粗略的了解,没有 ...

  9. jmeter之自定义java请求性能测试

    一.环境准备         1.新建一个java工程         2.导入jar包:ApacheJMeter_core.jar     ApacheJMeter_java.jar         ...

  10. 转:JMeter进行Java 请求测试

    本文转自:http://blog.csdn.net/xiazdong/article/details/7873767 向原作者致敬,看了他的文章才让我顺利解决了JMeter测试中的问题,万分感谢! 目 ...

随机推荐

  1. MySQL数据库:数据完整性及约束的应用

    数据完整性 1.域完整性:---------匹配完整性:非空.缺省 字段/列 2.实体完整性:-------匹配完整性:主键.唯一键 记录/行 3.引用完整性:-------匹配完整性:外键 表与表之 ...

  2. mybatis入门视频总结

    1.基础知识 2. 原生态jdbc问题总结 3.mybatis是什么 4.工程结构 5.SqlMapConfig.xml文件 6.sqlmap 包下新建user.xml文件(namespace,par ...

  3. shell 得到当前目录路径

    shell 得到当前目录路径 cd "$(dirname $0)" project=$(pwd | cut -d / -f ) echo 'project: '$project c ...

  4. Python实现单链表数据的添加、删除、插入操作

    Python实现单链表数据的添加.删除.插入操作 链表的定义: 链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址.由于每个结 ...

  5. Swoole编译安装步骤

    Swoole扩展是按照php标准扩展构建的.使用phpize来生成php编译配置,./configure来做编译配置检测,make进行编译,make install进行安装. 请下载releases版 ...

  6. 搞定vscode编写java(手把手篇)

    1: 下载VSCODE 本来我写过一个 vscode 编写java 帖子,但是 还是很多人私信我,下面写一个手把手教程 原文地址: https://www.cnblogs.com/dgwblog/p/ ...

  7. 基于 Swoole 的微信扫码登录

    随着微信的普及,扫码登录方式越来越被现在的应用所使用.它因为不用去记住密码,只要有微信号即可方便快捷登录.微信的开放平台原生就有支持扫码登录的功能,不过大部分人还是在用公众平台,所以扫码登录只能自行实 ...

  8. Java从入门到精通系统书籍,吐血整理的,只要1元

    思诚为修身之本,而明善又为思诚之本 我会在支付宝联系你 付完款后在支付宝账单详情页 点击联系收款方.我会回复您下载链接.

  9. RabbitMQ的第一次亲密接触

    企业应用系统,如果系统之间的通信.集成与整合,尤其当面临异构系统时,那么需要分布式的调用与通信.系统中一般会有很多对实时性要求不高但零零碎碎且耗时的地方,比如发送短信,邮件提醒,记录用户操作日志等,在 ...

  10. Servlet、Jsp

    一.Servlet 1.什么是Servlet? (1)由sun公司(被oracle公司收购)制定的一种用来扩展web服务器功能的组件规范.简单的讲就是一种用来开发动态Web的技术. 扩展web服务器功 ...