java 压测方案 java接口压测_5g

将工程打成jar包之后,会有一些外部依赖资源需要手动添加进jmeter的class path中,比如如图etc和libs两个文件夹下引用的file或jar,另外如果是maven项目,所有pom中依赖的私服jar包,需要在本地全部单独建一个文件夹存放,并添加进class path,如下图:

java 压测方案 java接口压测_5g_02

jar包在此添加

java 压测方案 java接口压测_5g_03

etc下的file,直接手动放至jmeter安装路径的bin下:

java 压测方案 java接口压测_开发工具_04

2、

修改jmeter初始化内存

windows环境下,修改jmeter.bat

java 压测方案 java接口压测_java 压测方案_05

根据经验,heap最多设置为物理内存的一半,默认设置为512M.如果heap超过物理内存的一半,可能运行jmeter会慢,甚至出现内存溢出,原因java比较吃内存,占CPU.

注意:JDK32位的电脑Xmx不能超过1500m,最大1378m.否则在启动Jmeter时会报错

 

linux环境下,修改jmeter.sh:

java $JVM_ARGS -Xms1G -Xmx5G -XX:MaxPermSize=512m -Dapple.laf.useScreenMenuBar=true -jar `dirname $0`/ApacheJMeter.jar "$@"

 

二、白盒测试代码编写

1、白盒编写所需jar

java 压测方案 java接口压测_java 压测方案_06

红色所标识的,是编写与在jmeter上运行白盒测试代码必须的jar包,因为会引用到相关几个关键类;

黄色部分,是在你想直接在eclipse上,对白盒测试代码添加main方法进行单元调试时,所需的,但不是必须,也可以将整个工程打成jar包后放至jmeter中调试,当然,那样比较麻烦。

2、白盒测试代码编写规范

java 压测方案 java接口压测_java_07

红色所标识的即为开发源码,在其路径下新建一个测试类,即黄色所标识,即为我们的白盒测试代码类

测试代码共分几部分:

(1)继承AbstractJavaSamplerClient类

java 压测方案 java接口压测_5g_08

(2)定义全局变量

java 压测方案 java接口压测_开发工具_09

(3)重写AbstractJavaSamplerClient四个方法

getDefaultParameters

java 压测方案 java接口压测_java_10

setupTest

java 压测方案 java接口压测_java_11

runTest

java 压测方案 java接口压测_5g_12

注:网上的教程都是在runTest中先实例化本类,如图

CTVCTest commonTVConsumer = new CTVCTest();

然后再由commonTVConsumer去调用被测接口,如:

List<PopularProgram> result = commonTVConsumer.tvDataService.getHotProgram(a, g, Integer.parseInt(h));

但注意,CTVCTest.java中的tvDataService是经过在setupTest中赋值了的,

tvDataService = (TVDataService) context.getBean("tvDataService");

但如果在runTest中又new一个CTVCTest.java的实例,再去commonTVConsumer.tvDataService,调用的又变成在全局变量中刚刚定义的未赋值的变量了:

public TVDataService tvDataService = null;

所以此时一定会报空指针。所以,这里尤为需要注意线程与实例保持统一!所以如上图,这里干脆直接使用赋值后的tvDataService:

tvDataService.getHotProgram(a, g, Integer.parseInt(h));

----------------------------

teardownTest

java 压测方案 java接口压测_jar包_13

main(自己单元调试,非必需,打jar包时最好注释掉)

java 压测方案 java接口压测_5g_14

这里可以清晰的看到jmeter在单线程里的调用流程,所以在runTest中其实不能再去实例化一次,或者也没必要实例化后再调一次setupTest等,保持在一个线程与实例下调用的是同一个变量就行!