JMeter涉及到二次开发,原因总不绕开一些定制内容,比如接口测试存在复杂的上下文关联。“真·二次开发"的优势是基本没有约束地实现自定义内容,当然功力不够会写BUG,也会降低源代码的运行效率。本文主要说说“伪·二次开发”如何处理这类定制需求。
1.开源包jmeter-maven-plugin
通过查看源码,发现这个包的作用是拼接JMeter命令行并运行。这使得用户可以不关心调用细节,配置pom.xml文件的约定内容即可。
(具体配置参见:https://github.com/jmeter-maven-plugin/jmeter-maven-plugin/wiki)
MAVEN命令触发JMeter的测试管理器,调度执行中会判断是否是生成报表、是否是配置加载和是否运行测试项来获得测试结果。
(注意:jmeter-maven-plugin版本与apache-jmeter有对应关系,官网描述为:The current release of this plugin is 2.8.0, it requires JDK 8 and uses Apache JMeter 5.0.)
2.Plugin项目开发
Plugin项目最后生成的结果是Apache JMeter软件下扩展LIB下的JAR包,作用是通过定制化的JAVA Request请求来处理上下请求间的复杂参数处理,如加解密、调用远程方法计算等。
(1)Java Request
JMeter支持多种协议的请求和响应,比如HTTP请求、FTP请求、JDBC请求、JMS协议、LDAP请求、SMTP协议、TCP协议等等。Java请求为其中的一项,操作灵活度高,可方便处理上下接口的参数。
(2)上下文参数特殊处理
@Override
public SampleResult runTest(JavaSamplerContext context) {
SampleResult results = new SampleResult();
// Default Success Result
results.setSuccessful(true);
// Start to Record Time
results.sampleStart();
try {
// Load Test Data From DAO
// Call API
// Save Data to DAO
} catch (Throwable e) {
e.printStackTrace();
results.setSuccessful(false);
// Log Exception to JMeter Result
results.setResponseData(toStringStackTrace(e), "utf8");
}
// End to Record Time
results.sampleEnd();
return results;
}
上述代码为具体用例TestCase实现的接口方法runTest(JavaSamplerContext context)。
其中,粗体“Load Test Data From DAO”与“Save Data to DAO”用来负责处理接口参数的调取和存储。调取的参数可以预设,可以结合依赖接口返回值进行加密等复杂操作。
(3)部署测试
Plugin项目完成后,需要放入指定Apache JMeter软件目录生效,比如下图所示的扩展LIB路径。
在部署后,在JMeter的GUI界面中可以看到生效的结果。
比如,项目中实现了下述Java Request用例。
那么在JMeter中,可以选择到指定Java Request用例。
在项目真正部署到平台或打包EXE之前,可以通过JMeter图像界面配置和进行综合场景的接口测试。
本文介绍了JMeter Plugin项目的开发和测试流程,稍后会对部署项目进行介绍。