欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于jmeter3.0版本的csv data set config二次开发(实现从指定行开始读取)

程序员文章站 2022-06-03 18:40:09
...

最近在进行性能测试时遇到的需求比较麻烦,进行参数化的csv文件里的每个参数只能使用一次,开发提供了10w行参数,完全足够压测多伦使用。但是jmeter的csv data set config元件每次开始都是从csv文件的第一行开始获取数据,无奈只能修改jmeter的该部分源码,下面是主要步骤供大家参考:

 

1.不用说去官网下载jmeter的源码,当前版本为apache-jmeter-3.0_src.zip。下载后导入eclipse中,具体方法不表自行百度,需要注意的是导入时要将output folder改成build,同时打上勾如下图所示:


基于jmeter3.0版本的csv data set config二次开发(实现从指定行开始读取)
            
    
    博客分类: 性能测试 jmeter3.0源码二次开发csv data set config 

第二从eclipse里的run configrution、debug configrution也要将默认目录改成如下图所示:


基于jmeter3.0版本的csv data set config二次开发(实现从指定行开始读取)
            
    
    博客分类: 性能测试 jmeter3.0源码二次开发csv data set config 
 好了接下来就可以在eclipse里面任性的打断点调试了。

 

2.要是修改默认的csv data set config实现如下图功能:

 
基于jmeter3.0版本的csv data set config二次开发(实现从指定行开始读取)
            
    
    博客分类: 性能测试 jmeter3.0源码二次开发csv data set config 
 我们找到CSVDataSetBeanInfo这个类,在里面先增加linenumber变量:

private static final String FILENAME = "filename";  			 //$NON-NLS-1$
    private static final String LINENO = "linenumber";               //开始行号
private static final String FILE_ENCODING = "fileEncoding";      //$NON-NLS-1$
private static final String VARIABLE_NAMES = "variableNames";

 还有如下修改增加属性:

createPropertyGroup("csv_data",             //$NON-NLS-1$
                new String[] { FILENAME, LINENO,FILE_ENCODING, VARIABLE_NAMES, DELIMITER, QUOTED_DATA, RECYCLE, STOPTHREAD, SHAREMODE });

        PropertyDescriptor p = property(FILENAME);
        p.setValue(NOT_UNDEFINED, Boolean.TRUE);
        p.setValue(DEFAULT, "");        //$NON-NLS-1$
        p.setValue(NOT_EXPRESSION, Boolean.TRUE);
        
        //增加linenumber设置
        p = property(LINENO);
        p.setValue(NOT_UNDEFINED, Boolean.TRUE);
        p.setValue(DEFAULT, "");        //$NON-NLS-1$
        p.setValue(NOT_EXPRESSION, Boolean.TRUE);

        p = property(FILE_ENCODING);
        p.setValue(NOT_UNDEFINED, Boolean.TRUE);
        p.setValue(DEFAULT, "");        //$NON-NLS-1$
        p.setValue(NOT_EXPRESSION, Boolean.TRUE);

 
 再到对应的CSVDataSetResources.properties文件中增加如下属性:

shareMode.shortDescription=Select which threads share the same file pointer
shareMode.all=All threads
shareMode.group=Current thread group
shareMode.thread=Current thread
linenumber=linenumber

 再到CSVDataSet这个类中,添加linenumber对象,并为其提供set、get方法:

private transient String filename;
    
    private transient String linenumber;

private transient String fileEncoding;

 

public String getLinenumber() {
		return linenumber;
	}

public void setLinenumber(String linenumber) {
		this.linenumber = linenumber;
	}

 做完上面的步骤后,我们把目光聚焦到iterationStart这个方法,每执行一次该方法就会从csv中获取一行参数数据,这个地方我对原readLine方法进行了重写增加了linenumber参数,并根据linenumber是否为空(暂不考虑输入的字符不是数字的情况),如果为空就调用原来的readLine方法否则就调用重写了的readLine方法。


基于jmeter3.0版本的csv data set config二次开发(实现从指定行开始读取)
            
    
    博客分类: 性能测试 jmeter3.0源码二次开发csv data set config 
 具体的根据linenumber进行定位的readLine方法在FileServer这个类中,我们可以通过eclipse的快捷键快速定位,在重写的readLine方法中比原方法多进行了行数定位操作代码如下:


基于jmeter3.0版本的csv data set config二次开发(实现从指定行开始读取)
            
    
    博客分类: 性能测试 jmeter3.0源码二次开发csv data set config 
 修改完这些代码重新运行jemter就可以看到效果了,当然别忘了用ant编译再运行。。

 

3.回顾一下其实还是有一些可以继续改进的地方,比如没有对linenumber是否为数字进行判断、如果设置了Quoted为true那么代码将会失效。

其实最好是将CSVDataSet、CSVDataSetBeanInfo、CSVDataSetResources.properties三个类复制一份弄成CSVDataSetExt、CSVDataSetBeanInfoExtCSVDataSetResourcesExt.properties进行自己的diy,搞一个csv data set configext元件,而不是像上面的在原元件上修改。

  • 基于jmeter3.0版本的csv data set config二次开发(实现从指定行开始读取)
            
    
    博客分类: 性能测试 jmeter3.0源码二次开发csv data set config 
  • 大小: 24.2 KB
  • 基于jmeter3.0版本的csv data set config二次开发(实现从指定行开始读取)
            
    
    博客分类: 性能测试 jmeter3.0源码二次开发csv data set config 
  • 大小: 76.5 KB
  • 基于jmeter3.0版本的csv data set config二次开发(实现从指定行开始读取)
            
    
    博客分类: 性能测试 jmeter3.0源码二次开发csv data set config 
  • 大小: 121 KB
  • 基于jmeter3.0版本的csv data set config二次开发(实现从指定行开始读取)
            
    
    博客分类: 性能测试 jmeter3.0源码二次开发csv data set config 
  • 大小: 44.8 KB
  • 基于jmeter3.0版本的csv data set config二次开发(实现从指定行开始读取)
            
    
    博客分类: 性能测试 jmeter3.0源码二次开发csv data set config 
  • 大小: 42.5 KB