【Jmeter】解决从csv参数文件中获取带引号/逗号的数据问题【转】

原文:【jmeter随笔(3)-从csv中获取带引号的数据详情】  点击查看原文

作者:黑夜小怪

 

软件测试技术交流群 :

1、QQ交流群:群号 429183023

2、添加JeongJinWin,或者扫描头像二维码

 

最近在工作中,对jmeter实践的点滴的记录这里分享,不一定正确,仅供参考和讨论,有想法的欢迎留言、谈论。

1技巧1:从csv中获取带引号的数据详情

背景:我们从csv中获取数据,在jmeter中使用这些数据,其中csv的数据如图,有的数据包含引号和逗号

clipboard

 

问题:我们获取的数据,被自动加了引号

 

clipboard[4]

 

解决办法:

1、设置jmeter的【CSV Data Set Config】,将【Allow quoted Data?】设置程true即可

 

clipboard[6]
 

2、运行jmeter脚本,查看已经成功获取到想要的数据:

 

clipboard[8]

 

总结:遇到问题很正常,耐心排查解决即可,另外俗话说工欲善其事必先利其器,对工具的了解决定你的灵活,实际中我们不可能一下子掌握工具全部细节点,但我们需要长期不断有计划的去摸索和了解工具,这样遇到问题,我们才能很快解决,让我们的技术更好落地。

2、运行csv中全部数据详情

问题:需要循环获取csv中的数据,每一条数据,运行一次,直到全部运行完,但是我们发现之前用的是在【线程组】中设置循环变量的数据为 csv中的数据,这样每次修改csv用例后都需要来修改脚本,比较麻烦。

解决方法:

1、在CSV Data Set Config,设置【Recyle on EOF】为false

 

clipboard[10]

2、在【线程组】中设置【循环次数】为【永远】

clipboard[12]

 

3技巧3:断言不为null的设置详情

问题:我们请求返回json数据,其中我们只需要判断json中  “total”的值不为null,即json中不出现“total":null 即可

 

clipboard[14]
 

1、添加断言,设置如图,勾选【Substring】和【否】,并且勾选【JMeter Variable】,填写的【total111】是前面正则表达式的值

 

clipboard[16]

clipboard[18]

<think>好的,我现在需要帮助用户解决JMeter中处理CSV数据文件读取参数时遇到逗号问题。用户提到了参考的站内引用,我需要先仔细看一下这些引用内容,了解JMeterCSV数据文件设置的参数以及相关功能。首先,引用[1]、[2]、[3]都提到了JMeterCSV数据文件配置参数,比如文件名、编码、变量名称、分隔符、是否允许引号等。特别是引用[3]提到“Allowquoted data? :是否允许引用数据”,这可能是处理包含逗号字段的关键设置。用户的问题是如何处理CSV中的逗号,可能因为字段中的逗号被误认为是分隔符,导致数据解析错误。接下来,引用[4]讨论了传入逗号参数,提到JMeter的特性,比如支持多种协议和分布式测试,但用户的问题更具体,是如何在CSV文件中正确处理包含逗号数据项。根据之前的回答,标准CSV处理是用双引号包裹字段,内部逗号不需要义,只要整个字段被引号包裹。但JMeter的配置可能需要启用相关选项来识别这种格式。用户之前的问题是关于CSV逗号的处理,我的回答涉及了Python、Excel、数据库等方法,但现在用户是在JMeter环境下,需要调整思路。根据JMeter的文档,CSV数据文件设置中的“Allow quoteddata”选项如果设置为True,就能正确识别被引号包裹的字段,即使内部有逗号也不会被错误分割。因此,正确的处理方法是启用该选项,并确保CSV文件中的字段用双引号包裹。另外,引用[3]还提到分隔符的设置,默认是逗号,如果用户的数据字段中包含逗号,必须使用引号包裹,并且设置Allowquoted data为True。否则,JMeter可能会错误地分割字段。例如,如果CSV中有一行是"北京,海淀区",当Allowquoted data为True时,JMeter会将其视为一个字段,否则会被分成两个字段。 接下来需要考虑用户可能的实际操作步骤。首先,用户需要检查CSV文件是否正确使用双引号包裹含有逗号的字段。然后,在JMeterCSVData SetConfig中,设置Allow quoteddata为True,并确保分隔符是逗号。同时,文件编码也要正确,比如UTF-8,避免乱码问题。此外,用户可能需要处理其他特殊情况,比如字段内部包含引号。根据CSV标准,内部的双引号需要用两个双引号义,例如"字段内""部引号"。JMeter是否自动处理这种情况呢?根据引用[3],Allowquoted data设为True后,应该能正确解析义后的引号,但需要用户确认CSV文件的格式是否正确。 还有,用户可能遇到多线程下CSV读取问题。比如,线程共享模式设置不同,可能导致数据重复或错乱。需要根据测试需求选择合适的共享模式,如Allthreads或Current threadgroup。最后,生成相关问题需要考虑用户在JMeter中使用CSV时可能遇到的其他问题,比如换行符处理、变量引用方式、分布式测试中的路径设置等。这些问题都与CSV数据处理相关,可以作为相关问题提出,帮助用户进一步解决问题。</think>### JMeter处理CSV参数包含逗号解决方案 #### 一、核心配置原则 1. **启用引号解析功能** 在JMeter的`CSV Data Set Config`中,必须设置`Allow quoted data?`为`True`,以支持字段中包含逗号的情况。此时JMeter会自动识别双引号包裹的字段,避免将字段内的逗号误判为分隔符[^3]。 **配置示例**: ```csv "北京,海淀区",25,"数学公式$x^2$" ``` 2. **严格遵循CSV格式规范** - 含逗号的字段必须用双引号包裹 - 字段内的双引号义为两个连续双引号(如`"字段内""含引号"`)[^1] #### 二、详细操作步骤 ##### 1. CSV文件格式规范 ```csv 用户名,地址,备注 "张三","北京市,海淀区","正常用户" "李四","上海市""浦东新区""","VIP用户" "王五","$\sqrt{a^2 + b^2}$","数学公式字段" ``` ##### 2. JMeter参数配置 | 参数名称 | 配置值 | 说明 | |-----------------------|----------------------|----------------------------------------------------------------------| | `Filename` | `data.csv` | CSV文件路径(支持相对路径)[^2] | | `File encoding` | `UTF-8` | 文件编码需与CSV实际编码一致 | | `Variable Names` | `user,address,note` | 变量名与CSV列对应 | | `Allow quoted data?` | `True` | **关键参数**,启用引号包裹字段解析[^3] | | `Delimiter` | `,` | 保持与CSV文件实际分隔符一致 | ##### 3. 线程组共享模式选择 - **All threads**:所有线程共享文件指针,适合参数全局唯一性需求 - **Current thread group**:线程组内共享,适用于多线程组测试 - **Current thread**:单个线程独立读取,适合参数重复使用场景[^3] #### 三、特殊场景处理 1. **数学公式字段处理** 若字段包含数学符号(如$E=mc^2$、$\int_{a}^{b} f(x)dx$),需确保公式被双引号包裹: ```csv "公式字段","$\frac{\partial u}{\partial t}$" ``` 2. **嵌套引号义** 使用连续两个双引号义内部引号: ```csv "义示例","字段内""包含引号""的文本" ``` 3. **分布式测试路径设置** 在分布式环境中建议使用相对路径,避免因机器路径差异导致文件读取失败[^2]。 #### 四、验证方法 1. **调试取样器验证** 添加`Debug Sampler`查看变量解析结果: ```csv address=北京市,海淀区 # 正确解析含逗号字段 note=数学公式$x^2$ # 公式符号正常显示 ``` 2. **响应断言检查** 在HTTP请求中使用`${address}`变量,通过响应断言验证数据完整性。 ```jmx <!-- JMeter CSV配置示例 --> <CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="CSV数据文件配置"> <stringProp name="delimiter">,</stringProp> <stringProp name="fileEncoding">UTF-8</stringProp> <stringProp name="filename">data.csv</stringProp> <boolProp name="quotedData">true</boolProp> <!-- 关键配置 --> <stringProp name="variableNames">user,address,note</stringProp> </CSVDataSet> ``` ####
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值