Jmeter性能测试用 csv,这个坑有些扯蛋...

发表于:2022-8-31 09:28

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:小码哥说测试    来源:51CTO博客

  很多人在使用jmeter做接口测试自动化测试性能测试时,都喜欢用CSV数据文件设置功能,来读取准备好的测试数据。虽然这种方法并不是最优方案,在我们的性能测试课程中,讲解了更优的方案,但是,没有上过我们的课的测试人员,还是很普遍的使用CSV方式。
  今天,就来给大家讲一个用CSV准备测试数据的一个巨坑和解决办法。
  jmeter做测试,要想读取准备好的测试数据文件,如果你只想到CSV这一种方法,那就用‘CSVDataSetConfig’这个元件,千万不要去用csvRead函数,用这个函数,你被坑死了,请别说我没提醒你。
  但是,使用‘CSVDataSetConfig’这个元件,每次只能从第1行数据开始读取,或忽略首行从第2行开始,没有办法从不定行开始。
  每次从第1行开始取值,在日常低并发的性能测试中,是没有任何问题的,因为此时你只需要运行一个jmeter就可以,但是,如果你想做高并发的性能测试,需要有多个jmeter同时运行,构成分布式来向服务器发起请求,这时候就有问题了。
  因为,采用分布式,在多台机器上同时运行jmeter,每台机器都会从第1行开始读取你准备的测试文件,那么,就会出现同时多个线程使用同一个测试数据向服务器发起请求,这很可能导致你们的被测试服务出现各种异常。
  你是不是曾经出现使用分布式进行性能测试,出现很多4xx系列错误,而单机执行性能测试却没有;你是不是曾经出现,分布式时错误率升高,而单机时,同并发数,错误率要低很多;你是不是曾经出现,分布式请求,服务端日志,有大量锁冲突?
  这些问题,如果你脚本中使用了‘CSVDataSetConfig’,那么这些错误,很可能就是因为这个元件每次读数据只能从第1行开始读取的原因造成的。
  这个坑,我曾经也遇到了,而且一度让我痛苦了几天,不过,后来我找到4种解决办法,今天,我就来给大家讲一种技术难度最低的方法。
  打开jmeter的插件管理,在‘availableplugins’中搜索‘CSV’,勾选一个叫‘RandomCSVDataSet’的插件,点击右下角的‘ApplyChangesandRestartJMeter’下载安装这个插件。待下载成功自动重启之后,在jmeter的配置元件中,我们将找到‘bzm-RandomCSVDataSetConfig’元件。
  你可以点击下面的‘TestCSVReading’来看下数据的顺序,你会发现,每次取的数据顺序都是不一样的。这样,就很好解决了分布式时取数相同的问题了。方法非常简单。
  接下来,我们来对比看下这个元件的性能。
  首先添加‘CSVDataSetConfig’元件,读取一份大于10000行的数据文件,定义一个变量接收,然后,用一个调试取样器,应用这个变量,设在1000的并发用户,持续运行120s,保存脚本,采用CLI模式运行,查看运行时资源使用情况。
  从监控到数据看,1000的并发,120秒中内,总共执行了59830295次请求,平均每秒498141.6次/s,我本机CPU使用率上升到约48.3%,内存使用率约为26.8%。
  现在,把元件换成‘bzm-RandomCSVDataSetConfig’,其他都不变了。采用CLI模式来运行,查看监控数据。
  从监控到数据看,1000的并发,120秒中内,总共执行了20860718次请求,平均每秒172912.8次/s,我本机CPU使用率上升到约66.5%,内存使用率约为26.7%。
  从两个元件的测试结果来看,官方的CSVDataSetConfig性能要优于bzm-RandomCSVDataSetConfig,实际工作中,你可以根据你的实际情况来选择。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号