将工程打成jar包之后,会有一些外部依赖资源需要手动添加进jmeter的class path中,比如如图etc和libs两个文件夹下引用的file或jar,另外如果是maven项目,所有pom中依赖的私服jar包,需要在本地全部单独建一个文件夹存放,并添加进class path,如下图:
jar包在此添加
etc下的file,直接手动放至jmeter安装路径的bin下:
2、
修改jmeter初始化内存
windows环境下,修改jmeter.bat
根据经验,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
红色所标识的,是编写与在jmeter上运行白盒测试代码必须的jar包,因为会引用到相关几个关键类;
黄色部分,是在你想直接在eclipse上,对白盒测试代码添加main方法进行单元调试时,所需的,但不是必须,也可以将整个工程打成jar包后放至jmeter中调试,当然,那样比较麻烦。
2、白盒测试代码编写规范
红色所标识的即为开发源码,在其路径下新建一个测试类,即黄色所标识,即为我们的白盒测试代码类
测试代码共分几部分:
(1)继承AbstractJavaSamplerClient类
(2)定义全局变量
(3)重写AbstractJavaSamplerClient四个方法
getDefaultParameters
setupTest
runTest
注:网上的教程都是在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
main(自己单元调试,非必需,打jar包时最好注释掉)
这里可以清晰的看到jmeter在单线程里的调用流程,所以在runTest中其实不能再去实例化一次,或者也没必要实例化后再调一次setupTest等,保持在一个线程与实例下调用的是同一个变量就行!