jmeter java性能测试
本篇文章主要讲解jmeter如何测试java请求,以项目中某个接口为例,请求数据为post,返回也为post
1:新建maven工程,pom文件为
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ustcinfo.jmeter</groupId>
<artifactId>java-post</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>HttpRequestPost</name>
<dependencies>
<!-- httppost请求依赖jar包 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<!-- java jmeter依赖jar包 -->
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>3.0</version>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
2:新建JmeHttpRequestPost.java类
package com.ustcinfo.jmeter; import java.io.DataOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection; import org.apache.commons.io.IOUtils;
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; public class JmeHttpRequestPost extends AbstractJavaSamplerClient { private String number = "number";
private String number_value = "18134536460"; /*
* 参数化,number
*/
@Override
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument(number, number_value);
return params;
} /*
* 运行方法
*/
public SampleResult runTest(JavaSamplerContext arg0) {
SampleResult sr = new SampleResult();
try {
/*参数获取*/
String number = arg0.getParameter("number");
sr.sampleStart();
/*请求地址*/
String URL = "http://ip:port/WSSPort/";
/*请求报文*/
String Json = "";
Json="{"
+"\"TcpCont\":{"
+"\"ServiceCode\":\"/ServiceBus/custView/cust/cust001\","
+"\"SrcSysID\":\"100000\","
+"\"TransactionID\":\"3b236e76-4662-4df6-8c61-46a8e3d2df56\","
+"\"MsgId\":\"\""
+"},"
+"\"SvcCont\":{"
+"\"SOO\":["
+"{"
+"\"PUB_REQ\":{"
+"\"PAGE_INDEX\":\"1\","
+"\"PAGE_SIZE\":\"5\","
+"\"SVC_CONT_VER\":\"1.0\","
+"\"TYPE\":\"QRY_CUST_INFO\""
+"},"
+"\"RETURN_OBJECTS\":{"
+"\"ACCOUNT\":{"
+"\"FIELDS\":\"\""
+"},"
+"\"CONTACT\":{"
+"\"FIELDS\":\"\""
+"},"
+"\"CUST\":{"
+"\"FIELDS\":\"\""
+"},"
+"\"CUST_BRAND_LABEL\":{"
+"\"FIELDS\":\"\""
+"},"
+"\"CUST_POINT\":{"
+"\"FIELDS\":\"\""
+"},"
+"\"MANAGER\":{"
+"\"FIELDS\":\"CHANNEL_MEMBER_ID,MEMBER_NBR,CHANNEL_MEMBER_NAME,PHONE\""
+"},"
+"\"PARTY_CENTIFICATION\":{"
+"\"FIELDS\":\"\""
+"},"
+"\"TB_PTY_CERTIF_ID_VAR_INFO\":{"
+"\"FIELDS\":\"\""
+"},"
+"\"CUST_SPEC_INFO\":{"
+"\"FIELDS\":\"\""
+"}"
+"},"
+"\"CUST_REQ\":{"
+"\"CUST_ID\":\":getCustId("+number+",'4','',551)\","
+"\"LATN_ID\":\"551\","
+"\"PASSWORD\":\"\""
+"}"
+"}"
+"]"
+"}"
+"}";
/*调用post请求方法*/
String postResult = doHttpPost(Json, URL);
/*设置响应报文内容*/
sr.setResponseData(postResult, null);
sr.setDataType(SampleResult.TEXT);
sr.setSuccessful(true);
sr.sampleEnd();
} catch (Exception e) {
e.printStackTrace();
} return sr;
} /**
* doHttpPost:http发送json报文形式的post请求
* @param xmlInfo 请求报文
* @param URL 请求地址
* @return String 响应内容
* @exception
*/
public static String doHttpPost(String xmlInfo, String URL) {
byte[] xmlData = xmlInfo.getBytes();
InputStream instr = null;
try {
URL url = new URL(URL);
URLConnection urlCon = url.openConnection();
urlCon.setDoOutput(true);
urlCon.setDoInput(true);
urlCon.setUseCaches(false);
urlCon.setRequestProperty("Content-Type", "text/xml");
urlCon.setRequestProperty("Content-length", String.valueOf(xmlData.length));
DataOutputStream printout = new DataOutputStream(urlCon.getOutputStream());
printout.write(xmlData);
printout.flush();
printout.close();
instr = urlCon.getInputStream();
byte[] bis = IOUtils.toByteArray(instr);
String ResponseString = new String(bis, "UTF-8");
if ((ResponseString == null) || ("".equals(ResponseString.trim()))) {
System.out.println("返回空");
}
return ResponseString; } catch (Exception e) {
e.printStackTrace();
return "0";
} finally {
try {
instr.close();
} catch (Exception ex) {
return "0";
}
}
}
}
3:在maven工程src/main下面新建assembly.xml文件,用作maven打包
<assembly>
<id>assembly</id>
<formats>
<format>tar.gz</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.build.directory}/dubbo/META-INF/assembly/bin</directory>
<outputDirectory>bin</outputDirectory>
<fileMode>0755</fileMode>
</fileSet>
<fileSet>
<directory>src/main/assembly/conf</directory>
<outputDirectory>conf</outputDirectory>
<fileMode>0644</fileMode>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
4:打包该工程,maven install,打包完成后可以看到target下生成了两个文件一个java-post-0.0.1-SNAPSHOT-assembly.tar还有一个java-post-0.0.1-SNAPSHOT.jar
将java-post-0.0.1-SNAPSHOT-assembly.tar中的lib文件夹下所有的jar包拷贝到jmeter的lib目录下,如果有重复的,则不替换用jmeter原生的jar包
将java-post-0.0.1-SNAPSHOT.jar拷贝到jmeter的lib/ext目录下
5:启动jmeter,验证该jar功能是否正常,新建一个java请求,如果有参数化可设置参数化文件
上图为两个线程测试了一下,发现调用通过成功,响应数据正常返回,故该脚本可以正常使用
至于如何用这个jmx脚本做性能测试,我就不在重复了,参考我的博文-jmeter命令行运行-单节点测试或者分布式测试
jmeter java性能测试的更多相关文章
- jmeter如何玩之badboy + jmeter并发性能测试
今天下班时公司安排了一个同事来对项目做集群性能测试,怀着对性能测试的好奇心,下班后没有着急离开,而是等待 那位同事的到来,然后在旁边学习了下如何使用Badboy和jmeter做性能测试. 1. 软件介 ...
- jenkins+ant+jmeter自动化性能测试平台
jenkins+ant+jmeter自动化性能测试平台 Jmeter是性能测试的工具,java编写.开源,小巧方便,可以图形界面运行也可以在命令行下运行.网上已经有人使用ant来运行,http://w ...
- Jmeter进行性能测试时多台负载机的配置方法
参考:https://blog.csdn.net/russ44/article/details/54729461 Jmeter进行性能测试时多台负载机的配置方法 Jmeter 是java 应用,对于C ...
- 【转】Jenkins+Ant+Jmeter自动化性能测试平台
Jmeter是性能测试的工具,java编写.开源,小巧方便,可以图形界面运行也可以在命令行下运行.网上已经有人使用ant来运行,,既然可以使用ant运行,那和hudson.jenkins集成就很方便了 ...
- Java性能测试从入门到放弃-概述篇
Java性能测试从入门到放弃-概念篇 辅助工具 Jmeter: Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试.JMeter 可以用于对服务器.网络 ...
- Jmeter Web 性能测试入门 (三):Jmeter 常用组件说明
线程组:用来设置并发的数量和模式.是用来模拟用户并发的组件.JMeter 的每个任务都是用线程来处理的. 线程数:要并发的请求数量. Ramp-Up Period: 在多次时间内把这些并发的请求发送完 ...
- Jmeter Web 性能测试入门 (七):Performance 测试中踩过 Jmeter 的坑
脚本运行的过程中,大量request抛error,但没有地方能够查看request是因为什么error的. 原因:Jmeter默认禁掉了运行过程中每个request的具体response信息收集,只保 ...
- 转 15 jmeter分布式性能测试
15 jmeter分布式性能测试 背景由于jmeter本身的瓶颈,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起Java内存溢出的错误.要解决这个问题, ...
- developerWorks 中国 技术主题 Java technology 文档库 Java 性能测试的四项原则
转-https://www.ibm.com/developerworks/cn/java/j-lo-java-performance-testing/?cm_mmc=dwchina-_-homepa ...
随机推荐
- Mac 下ll命令 command not found
在linux下习惯使用ll.la.l等ls别名的童鞋到mac os提示command not found -461deMacBook-Pro:~ root# cd ~ -461deMacBook-Pr ...
- 使用Fiddler伪造服务端返回数据,绕过软件试用期验证
用过一款和visual studio集成非常好的移动端模拟器,有7天的试用期,可惜不支持国内支付,试用到期了怎么办,不想重装系统. 昨天看有人破解admin page,于是尝试自己动手试试,因为这款模 ...
- vim复制
关于vim复制剪贴粘贴命令的总结 最近在使用vim,感觉很好很强大,但是在使用复制剪切粘贴命令是,碰到了一些小困惑,网上找了一些资料感觉很不全,讲的也不好,遂自己进行实践并总结了. 首先是剪切(删 ...
- 企业架构研究总结(26)——TOGAF架构开发方法(ADM)之实施治理阶段
1.9 实施治理(Implementation Governance) 企业架构开发方法各阶段——实施治理 1.9.1 目标 本阶段的目标是: 为每个实施计划给予建议. 对涵盖整个实施和部署过程的架构 ...
- MKNetworkKit 使用
关于ios 网络请求之MKNetworkKit库的使用 项目导入MK库之后,还需要导入三个框架文件: SystemConfiguration.framework CFNetwork.framework ...
- js操作iframe总结
一 在父页面操作子页面 IE下操作IFrame内容的代码: document.frames["MyIFrame"].document.getElementById(" ...
- 反射实现IOC功能
通过反射实现IOC功能 这段时间园子里有不少介绍IOC组件的文章,由于自己也一直在学习IOC的各种组件,及IOC的思想,常见的IOC组件很多:AutoFac.Ninject.Utity包括.NET ...
- 如何理解signal函数声明
Signal函数用起来其实很简单,但是回头看看他的声明,相信会有很多人表示费解.自己也在这个问题中纠结了好几年了,今天终于弄明白,很是兴奋,一起分享一下. 先看函数原型:void (*signal(i ...
- Java学习笔记——MySQL的安装使用以及SQL语法简介
在 Java 的开发中,数据库的应用是非常必要的,下面,我们为Java对于数据库的应用做一些必要的准备工作.. Java 对数据库的应用统称为 JDBC. JDBC(Java Data Base Co ...
- C#操作Kentico cms 中的 content(winform环境)
前段时间做了个winform程序,去管理kentico网站的content,包括content节点的增删改查,以及相应节点内容的修改.现在将对content的操作方法简单的介绍一下. 我们想要操作ke ...