`
zfy421
  • 浏览: 233662 次
社区版块
存档分类
最新评论

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

阅读更多

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

 

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


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



 好了接下来就可以在eclipse里面任性的打断点调试了。

 

2.要是修改默认的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方法。



 具体的根据linenumber进行定位的readLine方法在FileServer这个类中,我们可以通过eclipse的快捷键快速定位,在重写的readLine方法中比原方法多进行了行数定位操作代码如下:



 修改完这些代码重新运行jemter就可以看到效果了,当然别忘了用ant编译再运行。。

 

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

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

  • 大小: 24.2 KB
  • 大小: 76.5 KB
  • 大小: 121 KB
  • 大小: 44.8 KB
  • 大小: 42.5 KB
1
0
分享到:
评论

相关推荐

    jmeter5.1_CSV自定义.zip

    总之,通过对JMeter的二次开发,我们能够解决CSV Data Set Config的限制,实现更灵活的数据读取策略,提高测试的有效性和真实性。这个自定义功能对于需要大量并发用户并希望每个用户使用独特数据的性能测试场景特别...

    Jmeter使用CSV Data Set Config参数化数据不重复的多次循环执行(实现多用户多次抽奖功能)

    ### JMeter 使用 CSV Data Set Config 实现不重复数据的多次循环执行 #### 一、背景与目标 在软件测试过程中,经常会遇到需要模拟大量不同用户的场景。例如,一个抽奖活动可能需要模拟数百甚至数千个不同的用户...

    多线程循环读取csv文件执行请求以及CSV Data Set Config配置

    多线程循环读取csv文件执行请求以及CSV Data Set Config配置信息,如有什么疑问,可以在博客下留言,https://blog.csdn.net/u012811841/article/details/108710930

    csv参数化插件可指定开始行.rar

    2. `CSVDataSet.class`: 这是CSV Data Set的主要实现类,经过了二次开发,可能包含了新的逻辑来支持从指定行开始读取数据。 3. `CSVDataSetBeanInfo.class`: 这可能是用于生成CSV Data Set配置界面的BeanInfo类,...

    JMeter 3.0

    9. **参数化和数据驱动测试**:JMeter支持CSV Data Set Config,可以从外部文件读取数据,实现数据驱动测试,增加测试的覆盖率和多样性。 10. **持续集成**:JMeter可以与其他持续集成工具如Jenkins、Maven等集成,...

    JMETER 测试webservice 接口文档,内附JMETER3.0 安装包

    1. 参数化:对于需要动态参数的接口,使用“CSV Data Set Config”读取外部文件中的数据,实现参数化测试。 2. 配置采样器错误处理:通过“Response Timeout”设置超时时间,避免因服务器响应慢导致的错误。 3. 逻辑...

    自动化测试工具jmeter3.0

    - **配置元素**:提供辅助设置,如线程组(Thread Group)定义了并发用户数,CSV Data Set Config用于从CSV文件读取数据。 - **定时器**:控制每个采样器之间的间隔时间,模拟用户行为的延迟。 ### 2. **接口测试**...

    apache-jmeter-3.0.zip

    12. **配置元件**:配置元件如CSV Data Set Config用于从外部文件读取数据,模拟动态输入。 13. **分布式测试**:JMeter支持分布式测试,可以在多台机器上部署JMeter,进一步扩大并发用户规模,更准确地模拟真实...

    jmeter配合CSV,JSON断言测试

    在JMeter中,CSV Data Set Config元件允许我们从CSV文件中读取数据,并在每个线程循环中作为变量使用。这样,我们可以模拟多个用户执行不同的操作,如登录时使用不同的用户名和密码。在"demo.csv"文件中,可能包含了...

    Jmeter 中 CSV 如何参数化测试数据并实现自动断言示例详解

    CSV Data Set Config 是 Jmeter 的一个核心配置元素,用于读取 CSV 文件中的数据,并将其用于测试用例的参数化。通过 CSV Data Set Config,可以将测试数据参数化为变量,从而实现批量测试和自动化测试。 现在,让...

    Jmeter-3.2免安装运行版

    7. **配置元素**:如CSV Data Set Config,可以用来读取外部数据文件,为测试提供动态输入。 8. **后处理器**:用于处理采样器的响应数据,例如提取变量、验证响应。 9. **分布式测试**:JMeter支持分布式测试,...

    [零成本实现WEB性能测试 基于APACHE JMETER].温素剑.扫描版

    6. **数据驱动测试**:可以通过CSV Data Set Config从外部文件读取测试数据。 7. **分布式测试**:利用多台机器进行分布式测试,模拟更多的用户。 8. **结果分析**:提供图表、图形和表格等多种形式的结果展示方式。...

    jmeter压测脚本演示,循环读取数据,数据只被读取一次

    我们可以将从CSV Data Set Config读取的变量(如username和password)作为参数传递给请求。 6. **断言验证** 使用断言来验证响应是否符合预期,例如,检查登录是否成功,或者一次性令牌是否有效。 7. **监听器...

    jmeter 参数脚本演示

    通过CSV Data Set Config读取数据、使用__setProperty设置全局变量以及利用线程数函数,你可以在JMeter测试中实现灵活的数据管理和控制。实践是检验真理的唯一标准,因此,动手操作并结合实际项目进行练习,将使你更...

    jmeter的使用教程_pdf

    1. 参数化:使用CSV Data Set Config读取外部数据,模拟不同用户的行为。 2. 报告与分析:通过生成CSV或HTML格式的测试结果,进行详细的性能分析。 3. JMeter插件:丰富的第三方插件扩展了JMeter的功能,如图形...

    jmeter 批量图片下载.docx

    在JMeter中,可以使用CSV Data Set Config(CSV数据文件管理器)来实现这一点。这个组件允许我们从CSV文件读取数据,将这些数据作为变量在测试计划中使用。例如,你可以创建一个CSV文件,其中包含每个图片的URL,...

    Jmeter集合点.docx

    总结来说,JMeter集合点通过Synchronizing Timer实现并发请求的同步,而参数化通过CSV Data Set Config实现数据驱动测试,分布式测试则允许扩展到多台机器以应对大规模并发需求。这些技术的熟练掌握对于进行有效的...

    参数化Sample.zip

    在JMeter中,参数化主要通过CSV Data Set Config元件实现,它可以读取CSV文件中的数据,作为测试用例的输入。 首先,打开“参数化Sample.jmx”文件,这是一个JMeter测试计划,其中包含了配置参数化的关键步骤。在...

    Window10 Jmeter安装使用指南

    - 使用 CSV Data Set Config 读取外部文件中的数据,实现多次循环调用同一接口时使用不同数据。 通过以上步骤,用户能够在 Windows 10 系统环境下顺利安装并使用 Jmeter 进行接口测试。同时,通过使用 BlazeMeter ...

Global site tag (gtag.js) - Google Analytics