jmeter重写java请求_jmeter之编写java请求-扩展Java Sampler
分类:
JMeter实践(19)
版权声明:本文为博主原创文章,未经博主允许不得转载。
新浪围脖>79642549
有以下优势
脚本易维护
易调试
开发脚本周期短
不过网上扩展java请求文章比较多的还是,通过实现org.apache.jmeter.protocol.java.sampler.JavaSamplerClient接口
或是继承AbstractJavaSamplerClient虚类来实现java请求
大致步骤如下:
1. 建立java工程
2. 加载依赖包到java工程环境变量中,ApacheJMeter_core.jar和ApacheJMeter_java.jar编写时需要,调试需要加载jmeter全部依赖包(jmeter_home/lib下所有,实际上不是所有,包比较多,很难辨别)
3. 编写Java Sampler,继承AbstractJavaSamplerClient,并重写如下方法
public Arguments getDefaultParameters();可选,定义可用参数及默认值;
public void setupTest(JavaSamplerContext arg0):可选,测试前执行,做一些初始化工作;
public SampleResult runTest(JavaSamplerContext arg0);必选,实现自定义请求;
public void teardownTest(JavaSamplerContext arg0):可选,测试结束时调用;
4. 打jar包,将包放到jmeter_home/lib/ext/下
5. 记得把所有额外的(自定义协议依赖的,非jmeter的)依赖包放到jmeter环境变量中
6. 重启jmeter,创建java Sampler选择刚定义好的测试类,如下图:
7. 调整好参数即可开始测试。
编写模板介绍
package com.sampler;
//编写jmeter.sampler插件需加载的包
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 java.io.PrintWriter;
import java.io.StringWriter;
/**
*
* @author wo niu
* @func test ejb interface
*
* 继承虚类AbstractJavaSamplerClient
*/
public class JavaSampler extends AbstractJavaSamplerClient {
// main只是为调试用,最好先调试再打包
//运行前请把jmeter_home/lib下的所有jar包加载到IDE工具环境变量
public static void main(String[] args)
{
Arguments args0 = new Arguments();
args0.addArgument("parm_1","val_1");
args0.addArgument("parm_2","val_2");
args0.addArgument("parm_N","val_N");
JavaSampler test = new JavaSampler();
JavaSamplerContext context = new JavaSamplerContext(args0);
test.setupTest(context);
test.runTest(context);
test.teardownTest(context);
}
/**
* 实现 runTest(JavaSamplerContext context)方法
* runTest()具体实施测试动作
*/
public SampleResult runTest(JavaSamplerContext context) {
/*
* SampleResult只能定义为局部变量,避免出现多线程安全问题
* 网上一些帖子,定义为全域变量,这种做法是错误的
*/
SampleResult results = new SampleResult();
//默认请求成功
results.setSuccessful(true);
results.sampleStart(); //记录响应时间开始
try{
//动态变量从context中读取:
// String key = context.getParameter("key");
//TO-DO ejb接口调用
if(false){ //失败时处理
results.setSuccessful(false);
results.setResponseData("响应数据","utf8");
}
}catch(Throwable e){
e.printStackTrace();
results.setSuccessful(false);
//处理异常堆栈为String,只有String才能回写响应数据
results.setResponseData(toStringStackTrace(e),"utf8");
}
results.sampleEnd(); //记录响应时间结束
return results;
}
/**
* 测试开始时调用,初始化
*/
public void setupTest(JavaSamplerContext context){
}
/**
* 测试结束时调用
*/
public void teardownTest(JavaSamplerContext context){
}
/**
* 定义默认参数
*/
@Override
public Arguments getDefaultParameters() {
Arguments args = new Arguments();
/*
* test data
*/
args.addArgument("parm_1","val_1");
args.addArgument("parm_2","val_2");
args.addArgument("parm_N","val_N");
return args;
}
/**
* 处理异常堆栈为String,只有String才能回写响应数据
* @param e
* @return
*/
private String toStringStackTrace(Throwable e){
String exception = null;
try {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
exception = sw.toString();
pw.close();
sw.close();
} catch (Exception e1) {
e1.printStackTrace();
}
return exception;
}
}
jmeter重写java请求_jmeter之编写java请求-扩展Java Sampler相关推荐
- Java 7:如何编写非常快速的Java代码
当我第一次写此博客时,我的目的是向您介绍ThreadLocalRandom类,它是Java 7中新增的用于生成随机数的类. 我已在一系列微基准测试中分析了ThreadLocalRandom的性能,以了 ...
- java链表需要自己编写么_基于java的链表基础操作
链表结构是由一个或一个以上再内存上不连续存储的元素结点连接而成的数据结构,链表的每个结点都有两个部分,一个部分是存储的数据,另一部分是指向下一结点的指针,既是下一节点的引用. 首先链表一定有一个头结点 ...
- java上机实验作业 编写汽车类car,Java代写:CS103 Car Rental代做留学生SQL实验作业...
There can be multiple cars with the same model and manufacturer. The status of a car in the system m ...
- java jai create 方法_使用JAI扩展Java Image的功能
Java Image功能一直都在增强,但是向磁盘写一个图像文件或者返回一个PNG或JPEG依然比较难实现.但是我们可以使用Java Advanced Imaging(JAI)API来解决这个问题.JA ...
- java 编写代码_Java 7:如何编写非常快速的Java代码
java 编写代码 当我第一次写此博客时,我的目的是向您介绍ThreadLocalRandom类,它是Java 7中新增的用于生成随机数的类. 我在一系列微基准测试中分析了ThreadLocalRan ...
- java开发工具包 jdk_什么是JDK? Java开发工具包简介
java开发工具包 jdk Java开发工具包(JDK)与JVM(Java虚拟机)和JRE(Java运行时环境)一起是Java编程中使用的三个核心技术软件包之一. 重要的是要区分这三种技术,并了解它们 ...
- [转载]实时 Java,第 5 部分: 编写和部署实时 Java 应用程序
实时 Java,第 5 部分: 编写和部署实时 Java 应用程序 2007 年 7 月 11 日 这篇文章是讨论实时 JavaT™ 的 6 部分 系列文章 的第 5 部分,展示了如何使用 IBM W ...
- 写缓存java,编写线程安全的Java缓存读写机制 (原创)
一种习以为常的缓存写法: IF value in cached THEN return value from cache ELSE compute value save value in cache ...
- java 请求响应_java http接口请求响应 request response
接口类: 1 package org.sunshine.dcda.epg.wechat.controller.niao; 2 3 import javax.servlet.http.HttpServl ...
最新文章
- HttpClient连接池设置引发的一次雪崩
- 【深度学习入门到精通系列】进化策略 (Evolution Strategy)
- 2015-12-15 关于就近日期
- bat窗口大小设置_DOS处理 CMD提速 BAT恶搞
- 大数据之-Hadoop3.x_MapReduce_ETL数据清洗案例---大数据之hadoop3.x工作笔记0136
- Julia: PostgreSQL数据库.......
- Shopee跨境电商开店高频问题解答
- 服务器bmc口装系统,IBM X3650服务器BMC安装系统
- TS中限制某种类型的传递
- 教你认识各种分辨率的英文缩写
- 数据挖掘工具初探之SPSS Clementine篇
- 《暗黑破坏神》经典爆笑小说
- 如何用ChemDraw画不同的环结构?
- NO.12【婳骨】の张三-打工人之路
- 什么是 go vendor
- Arcgis实现线转面
- 快手某程序接口大全关注.点赞.评论
- JS中ShowModalDialog(模态窗口)详细使用
- 基于lux的YouTube视频解析,下载
- 理解了DirectShow播放原理
热门文章
- 从零开始构建HTML 5 Web页面
- 动态创建php 类函数或函数
- jquery user interface
- C++——random库中的uniform_int_distribution
- 【OpenGL】OpenGL视图和模型变换中各变换发生顺序的思考
- 上机 文件读写器 c# 1614998685
- 掌握基于switch语句的流程控制测试分析 1221
- charles-无法抓取https包的解决办法及效果
- Nginx进程间通信机制
- InheritableThreadLocal类原理简介使用 父子线程传递数据详解 多线程中篇(十八)...