本篇文章主要讲解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性能测试的更多相关文章

  1. jmeter如何玩之badboy + jmeter并发性能测试

    今天下班时公司安排了一个同事来对项目做集群性能测试,怀着对性能测试的好奇心,下班后没有着急离开,而是等待 那位同事的到来,然后在旁边学习了下如何使用Badboy和jmeter做性能测试. 1. 软件介 ...

  2. jenkins+ant+jmeter自动化性能测试平台

    jenkins+ant+jmeter自动化性能测试平台 Jmeter是性能测试的工具,java编写.开源,小巧方便,可以图形界面运行也可以在命令行下运行.网上已经有人使用ant来运行,http://w ...

  3. Jmeter进行性能测试时多台负载机的配置方法

    参考:https://blog.csdn.net/russ44/article/details/54729461 Jmeter进行性能测试时多台负载机的配置方法 Jmeter 是java 应用,对于C ...

  4. 【转】Jenkins+Ant+Jmeter自动化性能测试平台

    Jmeter是性能测试的工具,java编写.开源,小巧方便,可以图形界面运行也可以在命令行下运行.网上已经有人使用ant来运行,,既然可以使用ant运行,那和hudson.jenkins集成就很方便了 ...

  5. Java性能测试从入门到放弃-概述篇

    Java性能测试从入门到放弃-概念篇 辅助工具 Jmeter: Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试.JMeter 可以用于对服务器.网络 ...

  6. Jmeter Web 性能测试入门 (三):Jmeter 常用组件说明

    线程组:用来设置并发的数量和模式.是用来模拟用户并发的组件.JMeter 的每个任务都是用线程来处理的. 线程数:要并发的请求数量. Ramp-Up Period: 在多次时间内把这些并发的请求发送完 ...

  7. Jmeter Web 性能测试入门 (七):Performance 测试中踩过 Jmeter 的坑

    脚本运行的过程中,大量request抛error,但没有地方能够查看request是因为什么error的. 原因:Jmeter默认禁掉了运行过程中每个request的具体response信息收集,只保 ...

  8. 转 15 jmeter分布式性能测试

    15 jmeter分布式性能测试   背景由于jmeter本身的瓶颈,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起Java内存溢出的错误.要解决这个问题, ...

  9. developerWorks 中国 技术主题 Java technology 文档库 Java 性能测试的四项原则

    转-https://www.ibm.com/developerworks/cn/java/j-lo-java-performance-testing/?cm_mmc=dwchina-_-homepa ...

随机推荐

  1. MVC TO LINQ

    // // GET: /Home/ TestTryEntities Db = new TestTryEntities(); public ActionResult Index() { return V ...

  2. IOS基础开发二(iphone计算器)

    今天做了个iphone的小例子计算器:才用mvc设计模式 项目目录: 代码如下: CalculatorViewController:(MVC的控制器) // CalculatorViewControl ...

  3. Apple的通知

    Apple的通知 1. 本地通知 //取消原来的通知,可设可不设 [[UIApplication sharedApplication]cancelAllLocalNotifications]; //初 ...

  4. hone hone clock人体时钟

    hone hone clock是个十分有趣的人体时钟,这个时钟代码分两种一种是背景透明的,一种 是白色背景的,把你喜欢的代码添加到你的网页中适当位置即可.两种代码如下: <script char ...

  5. Android: Type Method 'NewStringUTF' could not be resolved

      编译一个最简单的Android NDK 例子(android-ndk-r8/samples/hello-jni)出现了错误信息:Type Method 'NewStringUTF' could n ...

  6. .net下灰度模式图像

    .net下灰度模式图像在创建Graphics时出现:无法从带有索引像素格式的图像创建graphics对象 问题的解决方案. Posted on 2013-07-13 14:23 Imageshop 阅 ...

  7. 统计知识选讲(一)——主成分分析(PCA)的思想

    主成分分析的主要目的是希望用较少的变量去解释原来资料中的大部分变异,将我们手中许多相关性很高的变量转化成彼此相互独立或不相关的变量,从而达到降维的目的.在原始数据“预处理”阶段通常要先对它们采用PCA ...

  8. service structure flowchart [mobile to server via HTTP RESTful API]

    Modern flowchart for mobile, server, and etc.. communication This has something to do with these sou ...

  9. .NET对象占内存多少

    .NET对象占内存多少 一直有一个小小的疑惑——.NET一个对象或者一个集合占多少内存?有没有很快速的方法获取,而不是简单的估计分析对象大小? 查了MSDN,和一些其他人的分析,得到解决是托管代码对象 ...

  10. 那天有个小孩教我WCF[一][1/3]

    那天有个小孩教我WCF[一][1/3] 既然是小孩系列,当然要有一点基础才能快速掌握,归纳,总结的一个系列,哈哈 前言: 第一篇嘛,不细讲,步步教你创建一个简单SOA案例,对WCF有个基本的认识,我不 ...