一、ENV Data Set插件介绍
一般公司都会有多套测试环境,服务器地址都不一样,当需要编写大量可复用的脚本时,现有可行的方案是把服务器地址等测试环境信息变量化,例如将服务器ip地址写入jmeter变量中,变量名设为server_address,然后在脚本中通过 ${server_address} 引用,在测试执行时会替换会真实值。
那么现在的问题是如何将测试环境信息变量化,使用CSV Data Set Config插件也能解决上述问题,变量名写在脚本中,但变量值又必须写在文件里,维护起来麻烦且不直观。
ENV Data Set插件就是解决上述问题所开发的JMeter插件,通过维护一个 env后缀的配置文件,变量名和变量值都维护在文件中(其实就是json串),在测试执行前加载指定名称的配置文件里的测试环境配置信息,然后再脚本中通过 ${keyName} 占位符引用。
ENV Data Set插件的目的是将测试环境信的配置变量化,如服务器地址、数据库各种信息等,以提高脚本的可移植性和可维护性,如测试环境更换后,只需新增一个对应的配置文件,脚本也只需要修改配置文件的名称即可达到复用的效果。
二、ENV Data Set插件使用说明
请确保插件的jar包已放至JmeterHome/lib/ext目录下。
1. 新建测试环境配置文件
1)在 JmeterHome根目录下新建 config文件夹;
2)在 config文件夹下新建 demo.env文件;
3)编辑 demo.env文件,格式为: {"keyName1":"value1","keyName2":"value2",…….},例如:
{"server_address":"127.0.0.1:20880","db_user_name":"db_name","db_password":"db_password"}
2. 添加插件
1)打开Jmeter,在测试计划(TestPlan)下右键添加配置元件 - ENV Data Set;
2)在 ENV Data Set中ConfigName选择第一步新建的测试环境配置文件名称;
3)在编写脚本时通过占位符 ${keyName} 引用。
三、ENV Data Set插件源码分析
要开发一个JMeter Config插件,必需实现两部分代码,第一部分为GUI代码,第二部分为TestElement代码。现在我们新建ENVDataSetGui.java和ENVDataSet.java。
1. ENVDataSetGui.java
GUI类只需要继续AbstractConfigGui抽象类并实现对应的方法即可,详细代码可到Github上查看。
2. ENVDataSet.java
TestElement子类需要继承ConfigTestElement和实现TestStateListener接口。
1)testStarted()
@Override
public void testStarted(String s) {
// 把测试环境配置文件名添加到jmeter线程变量中
JMeterContextService.getContext().getVariables().put(CONFIG_NAME, getFileName());
// 将配置文件中的所有属性逐一添加到jmeter线程变量中
HashMap<String, String> envMap = getEnvMap(getFilePath());
for (Map.Entry<String, String> entry : envMap.entrySet()) {
JMeterContextService.getContext().getVariables().put(entry.getKey(), entry.getValue());
}
}
完整代码请移步至Github查看:https://github.com/YeKelvin/jmeter-plugins/tree/master/configs。