首页 技术 正文
技术 2022年11月9日
0 收藏 677 点赞 3,543 浏览 5232 个字

本篇文章主要讲解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请求,如果有参数化可设置参数化文件

jmeter java性能测试

上图为两个线程测试了一下,发现调用通过成功,响应数据正常返回,故该脚本可以正常使用

至于如何用这个jmx脚本做性能测试,我就不在重复了,参考我的博文-jmeter命令行运行-单节点测试或者分布式测试

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,494
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,132
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,295