在PTS原生压测中,如果您需要构造动态变化的业务请求,可以通过参数化实现。在使用JMeter压测时,如果有同样的动态压测需求,建议您在JMeter脚本中添加Config Element:CSV Data Set Config,从CSV文件中读取参数。同时,PTS支持切分CSV文件,将CSV文件中的数据分配到每个压测引擎。

背景信息

CSV Data Set Config是JMeter官方提供的配置元件,用于读取CSV文件中的数据并将它们拆分为变量。适用于处理大量变量的场景。

如果上传的CSV文件在JMeter脚本中没有对应的CSV Data Set Config配置,则切分CSV文件时默认作为不包含表头(即变量名)的CSV文件切分。为方便操作,并避免数据被错误切分,建议您始终通过配置CSV Data Set Config使用CSV参数文件。

配置CSV参数文件

为构建动态变化的压测请求,需要在JMeter脚本中配置CSV文件。

例如,为测试同时有100人登录某网站时,该网站登录接口的性能表现如何,则需要构造100条不同的用户登录数据。操作步骤如下:

  1. 在本地新建一份CSV文件,包含100条用户数据。该CSV文件示例中第一行是表头,表示变量名,所以文件共101行。基本格式示例如下:
    id,name
    1,ali
    2,pts
    3,jmeter                     
    说明 如果CSV文件不含表头,CSV Data Set Config中需要配置变量名。
  2. 启动JMeter GUI,右键单击测试计划,选择Add > Threads (Users) > Thread Group,添加线程组。
    Thread Group
  3. 右键单击新添加的线程组,选择Add > Config Element > CSV Data Set Config
    CSV Data Set Config
  4. CSV Data Set Config配置区域,填写CSV文件名,其他配置项保持默认。

    JMeter会自动从CSV文件的表头中读取参数名作为变量名。

    CSV Data Set Config
    说明 如果CSV文件不含表头,需要在CSV Data Set Config的Variable Names (comma-delimited)中,输入id,name
  5. 右键单击线程组,选择Add > Sampler > HTTP Request。根据具体业务接口,填写配置项,示例如下:
    • Name:登录接口示例
    • Web Server:填写具体的业务接口协议、服务名或IP地址和端口号。
    • HTTP Request:选择请求方法,填写Path和Content encoding格式。
    • Body Data页签:使用${id}${name},表示读取CSV文件中的参数。
    HTTP Request
  6. 保存该JMeter测试计划脚本。
  7. 将测试脚本和CSV文件上传至PTS。具体步骤,请参见JMeter压测
    选中CSV文件后的切分文件复选框,可将CSV文件中的数据切分到每个压测引擎上。具体说明参见下一章节CSV文件切分。如下图所示。JMeter Test

CSV文件切分

PTS自动根据场景并发数分配JMeter施压引擎。分配多个引擎时,PTS支持切分CSV文件,将CSV文件中的数据均匀分配到每个压测引擎。

如果数据条数不能完全均分,则部分引擎可能比其他引擎多一条数据。

包含文件头的CSV文件切分

当原CSV带文件头时,切分后的每个文件都会包含文件头,但保证数据不重复。

如上述示例文件切分到2个引擎时:

  • 第1个文件内容为:

    id,name
    1,ali
    2,pts                    
  • 第2个文件内容为:

    id,name
    3,jmeter                   

不含文件头的CSV文件切分

如果CSV文件不包含文件头(第一行即为CSV数据),例如,文件“b.csv”内容如下:

1,ali
2,pts
3,jmeter          

则需在JMeter中配置变量名,如下图所示:

CSV Data Set Config

此时如果选择切分CSV文件,切分后的文件也不包含文件头。如切分到2个引擎时:

  • 第1个文件内容为:
    1,ali
    2,pts
                        
  • 第2个文件内容为:
    3,jmeter
                        

更多信息

更多CSV文件配置和使用说明,请参见JMeter官方文档