jmeter java性能测试

Posted 秒秒开心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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命令行运行-单节点测试或者分布式测试

 

以上是关于jmeter java性能测试的主要内容,如果未能解决你的问题,请参考以下文章

性能测试工具Jmeter01-简介

性能测试工具:Jmeter简介及安装

JMeter测试WEB性能入门

JMeter测试WEB性能入门

JMeter学习(十九)JMeter测试MongoDB

性能测试十二:jmeter进阶之java请求参数化