jmeter java性能测试

本篇文章主要讲解jmeter如何测试java请求,以项目中某个接口为例,请求数据为post,返回也为post

1:新建maven工程,pom文件为

 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3     <modelVersion>4.0.0</modelVersion>
 4     <groupId>com.ustcinfo.jmeter</groupId>
 5     <artifactId>java-post</artifactId>
 6     <version>0.0.1-SNAPSHOT</version>
 7     <name>HttpRequestPost</name>
 8     <dependencies>
 9        <!-- httppost请求依赖jar包 -->
10         <dependency>
11             <groupId>commons-io</groupId>
12             <artifactId>commons-io</artifactId>
13             <version>2.5</version>
14         </dependency>
15         <!-- java jmeter依赖jar包 -->
16          <dependency>
17             <groupId>org.apache.jmeter</groupId>
18             <artifactId>ApacheJMeter_core</artifactId>
19             <version>3.0</version>
20         </dependency>
21         <dependency>
22             <groupId>org.apache.jmeter</groupId>
23             <artifactId>ApacheJMeter_java</artifactId>
24             <version>3.0</version>
25         </dependency>
26     </dependencies>
27
28     <build>
29         <plugins>
30             <plugin>
31                 <artifactId>maven-assembly-plugin</artifactId>
32                 <configuration>
33                     <descriptor>src/main/assembly/assembly.xml</descriptor>
34                 </configuration>
35                 <executions>
36                     <execution>
37                         <id>make-assembly</id>
38                         <phase>package</phase>
39                         <goals>
40                             <goal>single</goal>
41                         </goals>
42                     </execution>
43                 </executions>
44             </plugin>
45         </plugins>
46     </build>
47 </project>

2:新建JmeHttpRequestPost.java类

  1 package com.ustcinfo.jmeter;
  2
  3 import java.io.DataOutputStream;
  4 import java.io.InputStream;
  5 import java.net.URL;
  6 import java.net.URLConnection;
  7
  8 import org.apache.commons.io.IOUtils;
  9 import org.apache.jmeter.config.Arguments;
 10 import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
 11 import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
 12 import org.apache.jmeter.samplers.SampleResult;
 13
 14 public class JmeHttpRequestPost extends AbstractJavaSamplerClient {
 15
 16     private String number = "number";
 17     private String number_value = "18134536460";
 18
 19
 20     /*
 21      * 参数化,number
 22      */
 23     @Override
 24     public Arguments getDefaultParameters() {
 25         Arguments params = new Arguments();
 26         params.addArgument(number, number_value);
 27         return params;
 28     }
 29
 30     /*
 31      * 运行方法
 32      */
 33     public SampleResult runTest(JavaSamplerContext arg0) {
 34         SampleResult sr = new SampleResult();
 35         try {
 36             /*参数获取*/
 37             String number = arg0.getParameter("number");
 38             sr.sampleStart();
 39             /*请求地址*/
 40             String URL = "http://ip:port/WSSPort/";
 41             /*请求报文*/
 42             String Json = "";
 43             Json="{"
 44                     +"\"TcpCont\":{"
 45                     +"\"ServiceCode\":\"/ServiceBus/custView/cust/cust001\","
 46                     +"\"SrcSysID\":\"100000\","
 47                     +"\"TransactionID\":\"3b236e76-4662-4df6-8c61-46a8e3d2df56\","
 48                     +"\"MsgId\":\"\""
 49                     +"},"
 50                     +"\"SvcCont\":{"
 51                     +"\"SOO\":["
 52                     +"{"
 53                     +"\"PUB_REQ\":{"
 54                     +"\"PAGE_INDEX\":\"1\","
 55                     +"\"PAGE_SIZE\":\"5\","
 56                     +"\"SVC_CONT_VER\":\"1.0\","
 57                     +"\"TYPE\":\"QRY_CUST_INFO\""
 58                     +"},"
 59                     +"\"RETURN_OBJECTS\":{"
 60                     +"\"ACCOUNT\":{"
 61                     +"\"FIELDS\":\"\""
 62                     +"},"
 63                     +"\"CONTACT\":{"
 64                     +"\"FIELDS\":\"\""
 65                     +"},"
 66                     +"\"CUST\":{"
 67                     +"\"FIELDS\":\"\""
 68                     +"},"
 69                     +"\"CUST_BRAND_LABEL\":{"
 70                     +"\"FIELDS\":\"\""
 71                     +"},"
 72                     +"\"CUST_POINT\":{"
 73                     +"\"FIELDS\":\"\""
 74                     +"},"
 75                     +"\"MANAGER\":{"
 76                     +"\"FIELDS\":\"CHANNEL_MEMBER_ID,MEMBER_NBR,CHANNEL_MEMBER_NAME,PHONE\""
 77                     +"},"
 78                     +"\"PARTY_CENTIFICATION\":{"
 79                     +"\"FIELDS\":\"\""
 80                     +"},"
 81                     +"\"TB_PTY_CERTIF_ID_VAR_INFO\":{"
 82                     +"\"FIELDS\":\"\""
 83                     +"},"
 84                     +"\"CUST_SPEC_INFO\":{"
 85                     +"\"FIELDS\":\"\""
 86                     +"}"
 87                     +"},"
 88                     +"\"CUST_REQ\":{"
 89                     +"\"CUST_ID\":\":getCustId("+number+",‘4‘,‘‘,551)\","
 90                     +"\"LATN_ID\":\"551\","
 91                     +"\"PASSWORD\":\"\""
 92                     +"}"
 93                     +"}"
 94                     +"]"
 95                     +"}"
 96                     +"}";
 97             /*调用post请求方法*/
 98             String postResult = doHttpPost(Json, URL);
 99             /*设置响应报文内容*/
100             sr.setResponseData(postResult, null);
101             sr.setDataType(SampleResult.TEXT);
102             sr.setSuccessful(true);
103             sr.sampleEnd();
104         } catch (Exception e) {
105             e.printStackTrace();
106         }
107
108         return sr;
109     }
110
111     /**
112      * doHttpPost:http发送json报文形式的post请求
113      * @param xmlInfo 请求报文
114      * @param URL  请求地址
115      * @return String  响应内容
116      * @exception
117      */
118     public static String doHttpPost(String xmlInfo, String URL) {
119         byte[] xmlData = xmlInfo.getBytes();
120         InputStream instr = null;
121         try {
122             URL url = new URL(URL);
123             URLConnection urlCon = url.openConnection();
124             urlCon.setDoOutput(true);
125             urlCon.setDoInput(true);
126             urlCon.setUseCaches(false);
127             urlCon.setRequestProperty("Content-Type", "text/xml");
128             urlCon.setRequestProperty("Content-length", String.valueOf(xmlData.length));
129             DataOutputStream printout = new DataOutputStream(urlCon.getOutputStream());
130             printout.write(xmlData);
131             printout.flush();
132             printout.close();
133             instr = urlCon.getInputStream();
134             byte[] bis = IOUtils.toByteArray(instr);
135             String ResponseString = new String(bis, "UTF-8");
136             if ((ResponseString == null) || ("".equals(ResponseString.trim()))) {
137                 System.out.println("返回空");
138             }
139             return ResponseString;
140
141         } catch (Exception e) {
142             e.printStackTrace();
143             return "0";
144         } finally {
145             try {
146                 instr.close();
147             } catch (Exception ex) {
148                 return "0";
149             }
150         }
151     }
152 }
153   

3:在maven工程src/main下面新建assembly.xml文件,用作maven打包

 1 <assembly>
 2     <id>assembly</id>
 3     <formats>
 4         <format>tar.gz</format>
 5     </formats>
 6     <includeBaseDirectory>true</includeBaseDirectory>
 7     <fileSets>
 8         <fileSet>
 9             <directory>${project.build.directory}/dubbo/META-INF/assembly/bin</directory>
10             <outputDirectory>bin</outputDirectory>
11             <fileMode>0755</fileMode>
12         </fileSet>
13         <fileSet>
14             <directory>src/main/assembly/conf</directory>
15             <outputDirectory>conf</outputDirectory>
16             <fileMode>0644</fileMode>
17         </fileSet>
18     </fileSets>
19     <dependencySets>
20         <dependencySet>
21             <outputDirectory>lib</outputDirectory>
22         </dependencySet>
23     </dependencySets>
24 </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命令行运行-单节点测试或者分布式测试

时间: 2024-12-16 11:47:27

jmeter java性能测试的相关文章

Jmeter Java请求

一.为什么要使用Java请求 现有的post . get 无法对加解密及鉴权的接口进行测试,需要进行封装,然后再请求,怎么进行封装?通常使用的方式是使用httpclient 工具类型来操作,下面举一个简单的Java自定义测试代码例子,使用Java编译器编写测试代码 二.完成以下几部曲即可 1.打开IDE(这里我使用的是 eclipse Luna 4.3),创建一个Java工程项目名为enterprise 2.从Jmeter的安装目录lib/ext中拷贝两个文件ApacheJMeter_core.

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

Jmeter是性能测试的工具,java编写.开源,小巧方便,可以图形界面运行也可以在命令行下运行.网上已经有人使用ant来运行,,既然可以使用ant运行,那和hudson.jenkins集成就很方便了,而且jenkins上也有相应的插件Performance Plugin,可以自动收集jmeter的测试结果,展示出来. 首先去下载jmeter,在2.8版本中测试通过,2.9版本测试未通过.下载ant-jmeter-1.1.1.jar放在jmeter主目录lib文件夹下. 下载需要的ant包,包含

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

jenkins+ant+jmeter自动化性能测试平台 Jmeter是性能测试的工具,java编写.开源,小巧方便,可以图形界面运行也可以在命令行下运行.网上已经有人使用ant来运行,http://www.programmerplanet.org/projects/jmeter-ant-task/,既然可以使用ant运行,那和hudson.jenkins集成就很方便了,而且jenkins上也有相应的插件Performance Plugin,可以自动收集jmeter的测试结果,展示出来. 首先去下

Jenkins+Ant+Jmeter 自动化性能测试平台

一.前言 持续集成 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作, 通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成.每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误.许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件. Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:持续的软件版本发布/测试项目,监控外部调用执行的工作. 项目构建 通过构建工具对多个项目文件进行统一

Jmeter 继续性能测试

最近应公司要求,继续对公司的某一个服务器进行性能测试主要测试步骤及测试数据如下: 1. 突然并发测试: 使用N * 10的请求量在1秒钟内并发到服务器,查看服务器响应速度的方式来测试. 其中N代表线程,即模拟了N个用户,10代表重复次数 测试完这组数据之后分析,突然发现这性能差的真有点离谱,没办法,只能硬着头皮继续测试... 分析: 从四组数据来分析看,服务器的合理化并发值应该在10-20之间. 如果并发超过20,可能会造成,服务器平均相应时间超长,1s以上的响应时间,就会造成客户流失或者无法等

Jenkins+Ant+Jmeter 自动化性能测试平台之填坑篇

一.前言 搭建Jenkins+Ant+Jmeter 自动化性能测试平台过程中,坦白说遇到了很多坑...写这篇博文的目的,除了总结经验方便自己以后查阅之外,也为了方便他人遇到相同的坑时,可以快速找到原因并解决.下面开始我漫长的填坑之路~~ 二.填坑之路 1.build.xml中<project name="ant-jmeter-test" default="run" basedir=".">这行代码怎么理解? default:run为b

利用jmeter+JAVA对RPC的单接口(dubbo接口等)进行性能测试

建立JAVA项目 建立maven项目,加入Jmeter所需要的JAR包依赖. POM.xml  加入如下: <dependency> <groupId>org.apache.jmeter</groupId> <artifactId>ApacheJMeter_core</artifactId> <version>3.2</version> </dependency> <!-- https://mvnrepo

Jmeter服务性能测试工具

Jmeter性能测试工具 下载地址:http://jmeter.apache.org/download_jmeter.cgi Windows下使用 这里我们选择Binaries包,jmeter不需要安装直接解压使用,但是需要配置Java环境 安装jdk,这里就不说了 配置Java环境变量: win7系统 计算机--属性--高级系统设置--高级--环境变量--系统变量--新建 变量名:JAVA_HOME 变量值:C:\ProgramFiles (x86)\Java\jre1.8.0_101    

【转】java性能测试 问题定位

性能测试的概念是什么,基本目的是什么,我想大家都基本清楚,不作详述,总之,性能测试只是测试过程中的一种方式,帮助我们的功能更好的运行,如果功能测试是可用,易用,满足需求.用户使用为目的,性能测试无非就是让这些目的更流畅.没有什么专业的概念,无非实现两个字:好用!所以,性能测试这种测试方式在发生过程中,其中一个过渡性的工作,就是对执行过程中的问题,进行定位,对功能的定位,对负载的定位,最重要的,当然就是问题中说的“瓶颈”,接触性能测试不深,更非专家,自己的理解,瓶颈产生在以下几方面: 1.网络瓶颈