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. 【pycharm】Unable to save settings: Failed to save settings. Please restart PyCharm解决

    1.Unable to save settings: Failed to save settings. Please restart PyCharm解决 将工程的.idea目录删掉,重启pycharm ...

  2. center----Iframe 用法的详细讲解

    把iframe解释成“浏览器中的浏览器“很是恰当 <iframe frameborder=0 width=170 height=100 marginheight=0 marginwidth=0 ...

  3. 邹传伟:对人民银行DC/EP的初步分析

    http://opinion.caixin.com/2019-11-01/101477903.html [财新网](专栏作家 邹传伟)2019年10月24日,习总书记在中央政治局第十八次集体学习中指出 ...

  4. [CodeForces-1225A] Forgetting Things 【构造】

    [CodeForces-1225A] Forgetting Things [构造] 标签: 题解 codeforces题解 构造 题目描述 Time limit 2000 ms Memory limi ...

  5. Ubuntu16.04 GTX750安装CUDA9.0,Pytorch,Anaconda教程

    Ubuntu16 GTX750安装CUDA9.0,Pytorch,Anaconda教程 安装前警告 不要使用Ubuntu18! 不要使用Ubuntu18! 不要使用Ubuntu18! 务必重装成Ubu ...

  6. JavaScript Array filter() 方法

    JavaScript Array filter() 方法 var ages = [32, 33, 16, 40]; function checkAdult(age) { return age > ...

  7. Web安全测试学习笔记-DVWA-存储型XSS

    XSS(Cross-Site Scripting)大致分为反射型和存储型两种,之前对XSS的认知仅停留在如果网站输入框没有屏蔽类似<script>alert('ok')</scrip ...

  8. idea搜索不到任何插件

    今天在idea安装插件的时候,突然发现,什么都搜索不到了?? 解决方案: 完活.

  9. 文本分类Pipeline

  10. LeetCode刷题191120

    博主渣渣一枚,刷刷leetcode给自己瞅瞅,大神们由更好方法还望不吝赐教.题目及解法来自于力扣(LeetCode),传送门. 算法: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位 ...