• 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命令行运行-单节点测试或者分布式测试

  • 相关阅读:
    Ubiquitous Religions-并查集(5)
    The Suspects-并查集(4)
    Is It A Tree?-并查集(3)
    Html5 缓存
    HTML 5 Web 存储 localStorage
    html5画布显示图片问题
    html5画布
    html5拖动
    html5音频及视频
    linux mint的小方法
  • 原文地址:https://www.cnblogs.com/miaomiaokaixin/p/6122502.html
Copyright © 2020-2023  润新知