? ? ? ? Jmeter具有强大的功能实现以及功能扩展,熟悉JAVA的可以进行二次开发,做一些可插拔式的插件,更加完善我们的测试工作。
? ? ? ? 项目中很多时候会遇到,需要我们保存在测试过程中生成的一些数据,一种简单的方法就是,添加Beanshell后置处理器,写输出的代码,这个之前的文章也有提到过:Jmeter输出结果到文件_社会小刚哥的博客-CSDN博客,代码很简单,有需要的可以参考。
? ? ? ? 今天介绍的是,自己去做出来一个用于输出的后置处理器,也是需要用到两个jmeter的jar包:ApacheJmeter_core.jar,ApacheJmeter_java.jar。后置处理器需要我们创建固定的包名org.apache.jmeter.extractor;新建class继承AbstractTestElement类。
? ? ? ?先来看代码实现:
package org.apache.jmeter.extractor;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import org.apache.jmeter.processor.PostProcessor;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.testbeans.TestBean;
import org.apache.jmeter.testelement.AbstractTestElement;
public class OutputPostProcessor extends AbstractTestElement implements PostProcessor, TestBean {
private static final long serialVersionUID = 260L;
private String path;
@Override
public void process() {
SampleResult sr = new SampleResult();
sr.setSampleLabel(getName());
sr.sampleStart();
try {
FileWriter filename = new FileWriter(path,true);
BufferedWriter out = new BufferedWriter(filename);
out.write(sr+"\n");
out.close();
filename.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void setPath(String path) {
this.path = path;
}
public String getPath() {
return path;
}
}
? ? ? ? ?这里实现的比较偷懒,因为jmeter调试取样器的特性,直接在名称处写入${param},运行测试就可以得到我们需要的数据,所以直接使用jmeter官方获取的这个代码:
SampleResult sr = new SampleResult();
sr.setSampleLabel(getName());
sr.sampleStart();
? ? ? ? 有了需要输出的数据,在添加一个可以指定的路径就可以,这个是添加了一个String类型的path,并构造set、get方法。
private String path;
public void setPath(String path) {
this.path = path;
}
public String getPath() {
return path;
}
? ? ? ? 很简单对吧,这样用于输出的后置处理器就完成了,接下来打包放入jmeter/lib/ext目录,来看看效果,添加后置处理器就可以看到OutputPostProcessor了。
? ? ? ? ?再来实际测试用一下这个组件,运行四遍测试请求一下百度,并使用正则提取器获取三个参数值,多个值使用逗号隔开,输出到指定文件。
? ? ? ? ?可以说是一个比较实用的插件了,当然仅供参考,还有很多不足的地方,可以自行完善,比如输出时可以定义好标题头,然后忽略首行。不嫌麻烦的可以自己提前新建好CSV文件,写好标题头,输出时会自动忽略首行,多次输出不会覆盖之前的结果。
? ? ? ? ?学废了吗,以后输出数据到文件就不用写Beanshell代码了,直接使用Output后置处理器吧,觉得有用的就点个赞吧!可以上我的主页直接下载jar包使用。
????????相互学习,共同进步!
|