Jmeter JAVA请求入门
一、Jmeter完成一个java请求实现方法
两种实现方式:
实现JavaSamplerClient接口
继承AbstractJavaSamplerClient抽象类
二、使用AbstractJavaSamplerClient抽象类编写java程序
1、核心步骤
1)创建一个Maven工程;
2)本地Maven库路径确认,添加pom.xml内容,编写依赖的pom坐标;
3)Maven工程编译及调试成功;
2)本地Maven库路径确认,添加pom.xml内容,编写JMeter的pom坐标;
3)创建一个类并实现JavaSamplerClient接口或继承AbstractJavaSamplerClient,并重写;
public Arguments getDefaultParameters();//设置可用参数及其默认值,需要在jmeter中传参,进行参数化,所以需要使用这个方法进行传参
public void setupTest(JavaSamplerContext arg0)//每个线程启动时,需要做的处理,进行业务的代码实现或者调用实现方法
public SampleResult runTest(JavaSamplerContext arg0)// 方法体,开始测试,从arg0参数可以获得参数值
public void teardownTest(JavaSamplerContext arg0)//结束时,测试结束时调用,需要做的处理;
4)Export为Runnable Jar File;--最好使用eclipse导出,ideal导出方法见
5)将此jar包放入JMETER_HOME\lib\ext目录;
6)以管理员身份打开JMeter;
7)创建线程组、Java Request、查看结果树,进行测试;
2、使用继承AbstractJavaSamplerClient类方式实现java请求类
如图,需要重写四个方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
@Override public void setupTest(JavaSamplerContext javaSamplerContext) { } @Override public SampleResult runTest(JavaSamplerContext javaSamplerContext) { return null; } @Override public void teardownTest(JavaSamplerContext javaSamplerContext) { } @Override public Arguments getDefaultParameters() { return null; } |
在jmeter中JAVA请求需要进行参数化,所以使用getDefaultParameters 方法进行传参:
1 2 3 4 5 6 7 8 |
// 这个方法是用来自定义java方法入参的。 // params.addArgument("getJsonData", "${getJsonData}");表示入参名字叫getJsonData,默认值为${getJsonData}。 //设置可用参数及它的默认值; public Arguments getDefaultParameters() { Arguments params = new Arguments(); params.addArgument("getJsonData", "${getJsonData}");//表示入参名字叫getJsonData,默认值为${getJsonData} return params; } |
上述代码实现左侧是代码中参数获取,右侧是默认值,取jmeter页面CSV输入参数值。
runTest中进行业务的代码实现或者调用方法实现:
1)实现业务http接口-待更新
2)实现api接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
public SampleResult runTest(JavaSamplerContext javaSamplerContext) { //实例化SampleResult,用来记录运行结果 SampleResult result = new SampleResult(); //获取用户输入的变量值 String jsonDataStr = javaSamplerContext.getParameter("jsonDataStr", ""); String temp; logger.info("jsonDataStr : ---->" + jsonDataStr); System.out.println("jsonDataStr : ---->" + jsonDataStr); boolean isSuc = false; try { result.sampleStart();//定义事务的开始 FreightRequest freightRequest = JSONObject.parseObject(jsonDataStr, FreightRequest.class); logger.info("freightRequest : ---->" + JSON.toJSONString(freightRequest)); System.out.println("freightRequest : ---->" + JSON.toJSONString(freightRequest)); result.setSampleLabel(getClass().getName());//设置Java Sampler标签 RemoteFtResult<FreightResponse> eResult = freightCalculateService.doFreightCalculate(freightRequest); temp = JSON.toJSONString(eResult); logger.info("freightResponse : ---->" + JSON.toJSONString(eResult)); System.out.println("freightResponse : ---->" + JSON.toJSONString(eResult)); result.setSamplerData(jsonDataStr.toString());//设置请求参数 result.setResponseData(temp.toString(),"utf-8"); result.setDataType(SampleResult.TEXT);//设置数据类型 if (!eResult.isSuccess() && eResult.getErrorCode() == "-99999") { //根据接口响应和脚本目的来判断该脚本成功或失败的条件,此处为判断压测接口是否有效,判定本次请求未成功及错误code为系统错误为无效数据 isSuc = false; logger.error("message :---> false"); result.setResponseCode("-99999"); result.setResponseCodeOK();//设置响应成功 }else { isSuc = true; logger.info("message :---> true"); result.setResponseCode("200"); result.setResponseCodeOK();//设置响应成功 } } catch (Exception e) { isSuc = false; logger.error("e.message"+e.getMessage()+"e"+e+"e.toString"+e.toString()); result.setSuccessful(false); } finally { result.setSuccessful(isSuc); result.setSuccessful(true);//设置事务结束 result.sampleEnd();// jmeter 结束统计响应时间标记 System.out.println("[Test Case] 接口 " + getClass().getName() + " 测试完毕."); } return result; } |
3.代码写好后,将代码进行打包操作,输出jar包,idea导包步骤见下:
(eclipse具体操作见文档 “eclipse导出可执行jar包操作”)
ps:
每次run或debug前请clean下项目,我为maven项目,idea在Maven Projects->工程->Plugins->clean,eclipse在Project->Clean...,不然容易报错。
1)右键点击工程,选择open Module Settings或点击File选择Project Structure,进入页面
2)选择Artifacts->JAR->From modules with dependencies
3)弹出对话框
为避免出现“错误: 找不到或无法加载主类 com.jd.freight.dofreight.doFreight”,请按下图步骤打包:
即:
点击OK,页面显示jar包的输出路径。点击OK,配置完成:
4)在idea菜单栏,点击Build->Build Artifacts
->
5)到指定路径 即可获取jar包
打出的包结构为:
6)测试jar包是否可用
上述步骤后会在相应工程的目录下看到一个名称为out的文件夹。其中可以找到对应的jar文件,比如本次的auto_freight_test.jar
打开终端,进入jar包路径,使用如下运行即可:
java -jar auto_freight_test.jar
如果入口类需要参数只需要在命令后面加参数以空格分割即可,如:
java -jar auto_freight_test.jar args0 args1 args2
因我编写的程序有main程序,里面有响应入参,所以调试时不需要添加参数了。
4.jmeter添加java请求
将打好的jar包及依赖包目录整体导入jmeter目录/lib/ext下,进入jmeter指定jar包路径:
创建线程组->创建Java请求->在jira请求中选择类名称,如图,添加参数->生成脚本
Jmeter察看结果树如下:
------------------------------------------------------Tanwheey--------------------------------------------------
爱生活,爱工作。
Jmeter JAVA请求入门的更多相关文章
- jmeter java请求
demo下载地址http://yun.baidu.com/share/link?shareid=4277735898&uk=925574576 1.引用jmeter的jar包 到jmeter的 ...
- 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测试中的问题,万分感谢! 目 ...
- 第二篇--Jmeter测试Java请求
前提:需要准备eclipse作为开发工具,安装jdk,准备完毕,接下来开工喽! 1.新建Java工程BMIrisJNIJarTest,新建lib目录,将Jmeter安装目录下lib/ext包下的Apa ...
随机推荐
- CentOS 系统开启防火墙,屏蔽IP,解决DDOS攻击
刚才发现网站特别慢,然后看了一下服务器状态 CPU 负载100%. 然后看了下网络,发现一个IP一直在请求本服务器的 443 端口,就是本站. 然后在终端通过 iftop 命令(一个流量健康软件,如果 ...
- VMware新加网卡NAT连接(内网)出现本机与虚拟机ping不通的问题
今新加网卡NAT连接,配置好之后始终出现eth1:link is not ready. 虚拟机与本机不能建立连接. 解决方案:windows里面打开服务开启VMware NAT Service,并关闭 ...
- xftp xshell 个人下载官网
https://www.netsarang.com/zh/xftp-download/
- paste 合并文件
1.命令功能 paste 用于合并文件的列,把每个文件以列对列的方式,一列列地加以合并. 2.语法格式 paste option file 参数选项 参数 参数说明 -d 指定间隔符合并文件(默 ...
- 前端每日实战:32# 视频演示如何用纯 CSS 创作六边形按钮特效
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/xjoOeM 可交互视频教程 此视频 ...
- web编程jsp小tips
jsp文件头 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEn ...
- Eclipse 创建springBoot项目的时候需要首先 安装STS(亲测)
开始我的Eclipse版本是4.4.2.安装网上的步骤多次不成功. 后来直接去下载了最新版的Eclipse 2018-9版本的 是 4.9. 下面是安装步骤: (1)eclipse->Help- ...
- 【CF1244D】Paint the Tree(树形DP,树)
题意: n<=1e5,1<=a[i][j]<=1e9 思路: 不是很懂INF为什么要开到1e15,我觉得只要1e14就好 #include<bits/stdc++.h> ...
- DDL DML DCL的理解
DDL的操作对象是表,不会对具体的数据进行操作. DML的操作对象是记录, DCL的操作对象是数据库对象的权限.
- (转)使用windows server2008 创建 Hyper-V虚拟机
转:https://jingyan.baidu.com/article/7c6fb42833ad4980652c904f.html Hyper-v是微软提供的虚拟机,利用server 2008搭建hy ...