热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用CSVDataSetConfig实现JMeter参数化测试的详细指南

本文详细介绍了如何使用JMeter中的CSVDataSetConfig元素来实现参数化测试。通过该配置元件,用户可以轻松地从外部CSV文件中读取数据,从而提高测试的灵活性和可扩展性。文章不仅提供了具体的配置步骤,还结合实际案例,展示了如何在不同的测试场景中应用这一功能,帮助读者更好地理解和掌握JMeter参数化测试的技巧。


每天一个测试技术

只需几分钟

川石信息 带你学点更好的




川石信息|腾讯课堂

免费试学 | 自动化测试



参数化的定义


所谓参数化,就是将客户端发送给服务器处理的数据预先保存到一个参数中的过程。


一般来说,对于功能测试,当用不同的数据测试相同的功能时,我们可以使用参数化来精简测试;


对于性能测试,为了真实模拟多个用户的操作行为或应对系统对多个用户同时操作的特殊限制(比如数据唯一性要求),需要使用参数化来解决这些问题。


JMeter提供了非常多的参数化的方式和手段,常见有:


1.配置元件 CSV_Data_Set_Config


2.内置参数化函数,比如__CSVRead()



CSV_Data_Set_Confifig


▲ 配置项


Confifigure the CSV Data Source:



1.Filename:


要读取的数据文件的路径或名称。可以使用绝对路径或相对路径。


● 当使用相对路径表示文件路径时,测试计划所在目录为当前目录。


● 当JMeter以分布式模式运行时,参数化的数据文件需要复制到每台Slave中,并且要设置相同的目录结构。



2.File Encoding:


若没有设置则以操作系统的字符编码去读取数据文件。


可以指定以何种编码去读取数据文件,以防止出现乱码。


比如操作系统默认字符编码为GBK,而数据文件(CSV文件)的编码为UTF-8,则读出来的数据肯定为乱码,在此情况下要设置File Encoding为“UTF-8”才能读取成功。



3.Variable Names(comma-delimited):


用于保存数据文件列值的变量名列表。变量名之间用,(逗号)分隔。若变量名列表为空,JMeter则将数据文件的第一行各字段值作为各个变量名(不论是否忽略第一行)。


比如数据文件中有如下两行值:


张三,男,25


李四,女,20


在没有设置变量名列表的情况下,会将第一行的三个值当做变量名:张三,男,25


${张三},${男},${20}的值分别是:李四,女,20



4.Ignore first line (only used if Variable Names is not empty):


是否忽略数据文件的第一行。这个选项只有在设置了参数名列表时才起作用。


选择True表示忽略第一行,选择False表示不忽略第一行。


一般用在数据文件中有列标题时,因为标题不是值,故考虑可以忽略第一行。


比如数据文件中有如下值:


name,sex,age


张三,男,25


李四,女,20


若此项设置为False,则会将name,sex,age当做变量的值读取,设置为True会忽略此行,从第二行开始读取。



5.Delimiter (use'\t'for tab):


数据文件中字段的分隔符。根据分隔符将记录拆分保存到定义的变量中。


默认值为,(逗号)分隔。



6.Allow quoted data?:


数据文件中的值是否允许使用双引号。True表示允许,False表示不允许。


一般用于当值中包含分隔符时,可考虑将值用双引号括起来,屏蔽分隔符的特殊含义。


比如记录了商品编号,名称,价格的数据文件:


goods_id,goods_name,price


1,Watch_wanguo,"1,500,000"


若没有使用双引号,商品价格为1,使用了双引号,商品价格为1,500,000



7.Recycle on EOF?:


读取到达数据文件结束(EOF即end of file)处,是否回到文件开始出重新读取。


True循环读取,False不循环读取。



8.Stop thread on EOF?:


读取到达数据文件结束处,是否停止线程。True停止线程,测试不再进行;


False不停止线程,继续循环取值运行测试。



9.Sharing mode:


共享模式。All threads所有线程,Current thread group当前线程组,Current thread当前线程。


1)All threads:


所有线程共享同一个文件。在测试中数据文件只打开一次,每个线程读取不同行的参数值。


每个线程读取的值与线程启动的先后顺序相关;不论线程引用参数与否,每个线程都会分配一个参数值。


2)Current thread group:


当前线程组。测试计划下的每个线程组都单独打开一个参数文件。


3)Current thread:


当前线程。每个线程都单独打开一个参数文件。在此模式下,若每个线程需要从不同的值集中取值,可以设置一组参数化数据文件,每个线程对应一个文件。将线程编号与数据文件名关联起来将可以了。


比如一组文件为:


testdata1.csv,testdata2.csv,... ,testdatan.csv


线程编号可以通过内置函数${__threadNum}来获取,则数据文件名可设置为:testdata${__threadNum}.csv。



应用案例


这里以前面介绍过的查询被购买商品总金额接口为例来讲解。


▲ 参数化步骤


1.确定接口参数中哪些请求参数需要进行参数化


在设计测试用例时,我们针对商品编号,商品规格,商品数量来准备数据,故对id,attr,number参数化


2.将测试数据放在外部一个文档保存,文件类型为csv或txt --> *.csv or *.txt


新建一个testdata.csv,一行写一个用例,多个参数值默认用,分隔:


case_name,id,attr,number

case1,9,226,3

case2,,226,1

case3,9,,1

case4,9,226,


3.添加并配置CSV Data Set Config配置元件


4.在请求中将写死的数据用第3步中定义的变量进行替换


data --> ${varName}

比如 ${attr}


5.配置参数化


1)将线程数设置为用例的个数


2)循环控制请求的次数


a.添加一个循环控制器,设置其循环次数为测试用例个数


b.将CSV Data Set Config配置元件与请求移到循环控制器下面




今天的内容就学习到这里了,每个工作日小编都会更新一个有关测试的小知识,希望大家多多关注我们,一起来学习喔!


温馨提示:添加老师微信【13691729932】可以获取全套软件测试自学资料!



 往期回顾 


JMeter测试HTTP POST(附实例)



大神邀你加入

软件测试群

免费软件测试课

川石课堂




推荐阅读
  • Java Web开发中的JSP:三大指令、九大隐式对象与动作标签详解
    在Java Web开发中,JSP(Java Server Pages)是一种重要的技术,用于构建动态网页。本文详细介绍了JSP的三大指令、九大隐式对象以及动作标签。三大指令包括页面指令、包含指令和标签库指令,它们分别用于设置页面属性、引入其他文件和定义自定义标签。九大隐式对象则涵盖了请求、响应、会话、应用上下文等关键组件,为开发者提供了便捷的操作接口。动作标签则通过预定义的动作来简化页面逻辑,提高开发效率。这些内容对于理解和掌握JSP技术具有重要意义。 ... [详细]
  • 如果程序使用Go语言编写并涉及单向或双向TLS认证,可能会遭受CPU拒绝服务攻击(DoS)。本文深入分析了CVE-2018-16875漏洞,探讨其成因、影响及防范措施,为开发者提供全面的安全指导。 ... [详细]
  • MongoDB高可用架构:深入解析Replica Set机制
    MongoDB的高可用架构主要依赖于其Replica Set机制。Replica Set通过多个mongod节点的协同工作,实现了数据的冗余存储和故障自动切换,确保了系统的高可用性和数据的一致性。本文将深入解析Replica Set的工作原理及其在实际应用中的配置和优化方法,帮助读者更好地理解和实施MongoDB的高可用架构。 ... [详细]
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 深入解读代码页与字符集的概念及其实际应用
    许多开发者可能未曾留意到这一问题,但如果您的网站频繁遭遇不明原因的乱码现象,深入了解代码页与字符集的概念及其实际应用将大有裨益。代码页(Codepage),即内码表,是计算机系统中用于映射字符与其编码值的一种机制,不同的代码页支持不同的字符集,正确选择和配置代码页对于确保文本数据的准确显示至关重要。在多语言环境下,合理运用字符集和代码页能够有效避免字符编码冲突,提升用户体验。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 在处理遗留数据库的映射时,反向工程是一个重要的初始步骤。由于实体模式已经在数据库系统中存在,Hibernate 提供了自动化工具来简化这一过程,帮助开发人员快速生成持久化类和映射文件。通过反向工程,可以显著提高开发效率并减少手动配置的错误。此外,该工具还支持对现有数据库结构进行分析,自动生成符合 Hibernate 规范的配置文件,从而加速项目的启动和开发周期。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • 在CentOS 7上部署WebRTC网关Janus
    在CentOS 7上部署WebRTC网关Janus ... [详细]
  • Sanic 是一个类似于 Flask 的 Python 3.5 Web 服务器,以其出色的写入速度而著称。与 Flask 不同,Sanic 支持异步请求处理,这使得它在处理高并发请求时表现更加出色。通过利用 Python 的异步特性,Sanic 能够显著提高应用程序的性能和响应能力,适用于构建高性能的异步 Web 应用。 ... [详细]
  • Go 项目中数据库配置文件的优化与应用 ... [详细]
  • 解决MySQL 5.1服务器无法正确识别中文字符的问题
    在使用MySQL 5.1服务器时,可能会遇到无法正确识别中文字符的问题。由于相关资料较少且不够全面,本文将详细阐述解决方案。首先,需要检查MySQL的配置文件,确保字符集设置正确,并通过命令行工具验证当前的字符编码配置。此外,建议更新到最新版本以避免此类问题。 ... [详细]
  • Python网络爬虫入门:利用urllib库进行数据抓取
    Python网络爬虫入门:利用urllib库进行数据抓取在数据科学和Web开发领域,Python凭借其简洁高效的特性成为首选语言。本文主要介绍了如何在Windows环境下使用Python的urllib库进行基本的网络数据抓取。考虑到命令行操作的不便,作者选择了Jupyter Notebook作为开发环境,不仅简化了配置过程,还提供了直观的数据处理和可视化功能。通过实例演示,读者可以轻松掌握urllib的基本用法,为深入学习网络爬虫技术打下坚实基础。 ... [详细]
author-avatar
lylmwt
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有