浅谈配置元件之CSV 数据文件设置

news2024/9/22 23:22:39

浅谈配置元件之CSV 数据文件设置

为了增强测试的真实性和多样性,JMeter 提供了多种数据参数化的方式,其中 CSV 数据文件设置(CSV Data Set Config)是一种常用且强大的功能,它允许测试脚本从外部CSV文件中动态读取数据,从而模拟不同用户的输入或场景。

CSV 数据文件设置概述

CSV(Comma-Separated Values,逗号分隔值)文件是一种常见的、轻量级的文件格式,用于存储表格数据。每行代表一条记录,而记录中的每个字段由逗号分隔。在JMeter中,通过CSV Data Set Config元件,可以方便地从这样的文件中读取数据,并将这些数据作为变量参数化地注入到HTTP请求、SQL查询等测试步骤中。

CSV 数据文件设置配置步骤

  1. 添加CSV 数据文件设置元件
  2. 打开JMeter测试计划,在测试计划树的“线程组”(或任何你需要参数化的取样器的父级)下,右键选择“添加” > “配置元件” > “CSV 数据文件设置”。
    2 配置CSV 数据文件设置属性
    ● 文件名:指定CSV文件的完整路径。如果是相对路径,它是相对于JMeter的bin目录。确保在跨平台使用时路径正确无误。
    ● 文件编码:选择CSV文件的字符编码。对于包含非ASCII字符(如中文),推荐使用UTF-8编码。
    ● 变量名称:列出CSV文件中每一列对应的变量名,多个变量名之间以逗号分隔。这些变量名将在测试脚本中作为参数引用。
    ● 忽略首行:选择以后可以明确首行是否忽略,如果是True则忽略,如果不是则不忽略
    ● 分隔符:默认为逗号(,), 但可以根据实际文件中的分隔符进行修改,如制表符(\t)。
    ● 是否允许带引号:如果CSV值被双引号包围,选中此选项会保留引号;否则,引号将被去除。
    ● 遇到文件结束符再次循环:当所有数据读完后,是否重新开始读取CSV文件。
    ● 遇到文件结束符停止线程:当所有数据读完后,是否停止线程。
    ● 线程共享模式:可以分为所有线程、当前线程组、当前线程

不同线程共享模式在测试脚本中引用CSV数据的结果

实践示例

在HTTP请求、断言或其他需要参数的地方,可以通过${变量名}的形式引用CSV中的数据。例如,如果变量名为user,则在请求体或URL中使用${user}来动态替换值。
在这里插入图片描述
假设你有一个CSV文件users.csv,内容如下:

username,password
user1,pwd1
user2,pwd2
user3,pwd3
user4,pwd4

配置CSV Data Set Config如下:
● 文件名:/path/to/users.csv
● 变量名称:user,pwd
● 忽略首行:True
然后,在HTTP请求的登录接口中,将用户名和密码参数分别设置为${username}和${password},JMeter将在每次迭代中依次使用CSV文件中的不同用户信息发起请求。
在JMeter的CSV Data Set Config元件中,“线程更新模式”(Sharing Mode)是一个关键配置,它决定了CSV文件中的数据是如何在不同的线程(用户)之间共享的。这一设置对于控制数据分配和确保测试的准确性和现实性至关重要。以下是三种线程更新模式的区别:

1.所有线程(All threads)

● 描述:在这种模式下,CSV文件的数据被所有线程共享。这意味着所有线程将顺序读取CSV文件中的数据行,不论它们属于哪个线程组。一旦数据被一个线程读取,其他线程将不会再次读取同样的数据(除非设置了循环或再次循环文件)。
● 适用场景:当你的测试设计要求所有虚拟用户共享同一数据序列,或者数据量足够大以至于每个线程都能得到独特数据时,可以选择这种模式。
● 注意点:可能会导致线程之间的数据竞争,特别是在高并发测试中,需谨慎使用。
● 实例:
①线程组1中保持默认的设置,即线程数,Ramp-Up以及循环次数都是1,并且BeanShell 取样器1中设置的内容如下

log.info("线程组1:User:${user},Passwd:${pwd}");

②线程组2中保持默认的设置,即线程数,Ramp-Up以及循环次数都是1,并且BeanShell 取样器2中设置的内容如下

log.info("线程组2:User:${user},Passwd:${pwd}");

③CSV 数据文件设置中设置的线程共享模式为“所有线程”,进行脚本运行,我们可以看到脚本内容打印的信息内容如下

2024-05-27 14:48:58,768 INFO o.a.j.u.BeanShellTestElement: 线程组1:User:user1,Passwd:pwd1
2024-05-27 14:48:58,768 INFO o.a.j.u.BeanShellTestElement: 线程组2:User:user2,Passwd:pwd2

2.当前线程组(Current thread group)

● 描述:仅线程组内的线程共享CSV数据。如果测试计划中包含多个线程组,并且每个线程组需要独立处理CSV数据,那么应该选择此模式。每个线程组内的线程将按照自己的顺序读取数据行,不同线程组间不会共享数据行。
● 适用场景:适用于多用户组测试场景,每个组有独立的数据集,比如模拟不同用户群体的行为。
● 优势:增加了测试的隔离性和精确度,避免了不同测试逻辑间的干扰。
● 实例:
①线程组1中保持默认的设置,即线程数,Ramp-Up以及循环次数都是1,取样器中内容不变
②线程组2中保持默认的设置,即线程数,Ramp-Up以及循环次数都是1,取样器中内容不变
③CSV 数据文件设置中设置的线程共享模式为“当前线程组”,进行脚本运行,我们可以看到脚本内容打印的信息内容如下

2024-05-27 14:55:59,870 INFO o.a.j.u.BeanShellTestElement: 线程组1:User:user1,Passwd:pwd1
2024-05-27 14:55:59,886 INFO o.a.j.u.BeanShellTestElement: 线程组2:User:user1,Passwd:pwd1

3.当前线程(Current thread)

● 描述:最严格的隔离级别,每个线程都有自己独立的CSV数据读取指针。即使在同一个线程组内,每个线程也会从CSV文件的开头独立开始读取数据,互不影响。
● 适用场景:当每个虚拟用户需要从头到尾独立遍历整个数据集,或者数据量不足以支持每个线程拥有独立数据行时,此模式非常有用。
● 优势:提供了最大程度的数据隔离,适合需要高度并行和独立性的测试场景。
● 实例:
①线程组1中设置线程数为2,Ramp-Up为1,循环次数都是2,并且BeanShell 取样器1中设置的内容如下

log.info("线程组1:User:${user},Passwd:${pwd},当前的线程组序号:${__jm__线程组1__idx}");

②线程组2中设置线程数为2,Ramp-Up为1,循环次数都是2,并且BeanShell 取样器2中设置的内容如下

log.info("线程组2:User:${user},Passwd:${pwd},当前的线程组序号:${__jm__线程组2__idx}");

③CSV 数据文件设置中设置的线程共享模式为“当前线程”,进行脚本运行,我们可以看到脚本内容打印的信息内容如下

2024-05-27 15:03:58,989 INFO o.a.j.u.BeanShellTestElement: 线程组1:User:user1,Passwd:pwd1,当前的线程组序号:0
2024-05-27 15:03:58,990 INFO o.a.j.u.BeanShellTestElement: 线程组1:User:user2,Passwd:pwd2,当前的线程组序号:1
2024-05-27 15:03:59,008 INFO o.a.j.u.BeanShellTestElement: 线程组2:User:user1,Passwd:pwd1,当前的线程组序号:0
2024-05-27 15:03:59,009 INFO o.a.j.u.BeanShellTestElement: 线程组2:User:user2,Passwd:pwd2,当前的线程组序号:1
2024-05-27 15:03:59,488 INFO o.a.j.u.BeanShellTestElement: 线程组1:User:user1,Passwd:pwd1,当前的线程组序号:0
2024-05-27 15:03:59,490 INFO o.a.j.u.BeanShellTestElement: 线程组1:User:user2,Passwd:pwd2,当前的线程组序号:1
2024-05-27 15:03:59,510 INFO o.a.j.u.BeanShellTestElement: 线程组2:User:user1,Passwd:pwd1,当前的线程组序号:0
2024-05-27 15:03:59,511 INFO o.a.j.u.BeanShellTestElement: 线程组2:User:user2,Passwd:pwd2,当前的线程组序号:1

选择合适的线程更新模式对于确保测试的有效性和准确性至关重要。理解不同模式的工作原理可以帮助你更好地设计测试计划,模拟真实的用户交互场景,同时避免数据冲突和资源竞争问题。在设计复杂测试场景时,应根据测试目标和数据量仔细考虑这三种模式的适用性。

注意事项

● 确保CSV文件的路径在所有执行测试的机器上都是可访问的,尤其是在分布式测试环境中。
● 当测试计划中有多个线程同时读取CSV文件时,考虑数据并发读取的同步问题,避免数据错乱。
● 对于大型数据集,考虑CSV文件的读取效率和内存占用,适当调整JMeter的内存配置。
通过以上步骤,你可以有效地利用CSV数据文件设置增强JMeter测试脚本的灵活性和实用性,模拟多样化的用户行为和数据输入,提高测试覆盖率和准确性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1702011.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot+vue的“漫画之家”系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

Samtec mPower®电源连接器:高能、可靠、灵活、小巧

【摘要/前言】 电源连接器是互连解决方案中不可或缺的一个组成部分。虽然相较于比较爱“竞速”的信号连接器,电源连接器的技术迭代不是那么频繁,但是它是连接电源和用电设备的重要纽带,想要确保设备正常运行,就少不了它的身影。 …

EPSON RX8111CE+松下高性能电池的组合应用

RTC是一种实时时钟,用于记录和跟踪时间,具有独立供电和时钟功能。在某些应用场景中,为了保证RTC在断电或者其他异常情况下依然能够正常工作,需要备份电池方案来提供稳定的供电。本文将介绍EPSON爱普生nA级RTC RX8111CE松下Panason…

ESP32-C6构建Matter Wi-Fi和Thread终端设备的利器,启明云端乐鑫代理商

随着物联网技术的飞速发展,越来越多的智能设备开始融入我们的日常生活。在智能家居和智能家电领域,ESP32系列产品以其高性能的微控制器(MCU)和无线通信解决方案而深入人心。 作为乐鑫代理商,启明云端为广大开发者提供…

Python代码:十八、生成数字列表

1、描述 牛牛在牛客网系统录入了一连串数字,数字之间依靠逗号隔开,你能帮助他将这些数字存储在列表中吗,列表元素以int的形式。 输入描述: 输入一行整数,数字之间以空格间隔。 输出描述: 输出这些数字…

【5G NB-IoT NTN】基于IoT NTN实现卫星语音通信的关键技术研究

近年来,随着商业航天的兴起,卫星制造和发射成本大幅降低,星载天线技术快速发展,为卫星通信产业注入了新的活力。同时,随着通信芯片、终端能力的提升,基于星地网络融合的公众手持终端直连卫星逐步成为现实。…

超融合架构下,虚拟机高可用机制如何构建?

作者:SmartX 产品部 钟锦锌 虚拟机高可用(High Availability,简称 HA)是虚拟化/超融合平台最常用、关键的功能之一,可在服务器发生故障时通过重建业务虚拟机以降低故障对业务带来的影响。因此,为了充分保障…

什么是驾驶舱?这3种驾驶舱领导最爱看

在当今快速变化的商业环境中,企业决策者需要实时、准确地掌握企业运营的各个方面,以便迅速做出明智的决策。数据驾驶舱,作为一种先进的管理工具,正逐渐成为企业管理层的必备利器。本文将深入探讨数据驾驶舱的概念、类型、角色多维…

DAOS: A Scale-Out High Performance Storage Stack for Storage Class Memory——论文泛读

Supercomputing Frontiers 2020 Paper 分布式元数据论文阅读笔记整理 问题 企业、政府和学术界出现的数据密集型应用程序将现有的I/O模型扩展到了极限。现代I/O工作负载的特点是元数据与未对齐和碎片化数据的结合比例越来越高。传统的存储堆栈为这些工作负载提供了较差的性能…

从原理上解决 uniapp (含第三方插件)打包 iOS APP 失败的问题

最近一段时间,我的团队基于uniapp开发的平台型APP因平台资金合规的要求,需要对接中金支付,uniapp的插件市场有一个别人做好的中金支付插件,但前端开发同事在引用这个 插件时,出现了 iOS APP 打包不成功的情况&#xff…

通付盾Web3专题 | SharkTeam:Web3常见钓鱼方式分析与安全防范建议

引言 Web3钓鱼是一种针对Web3用户的常见攻击手段,通过各种方式窃取用户的授权、签名,或诱导用户进行误操作,目的是盗窃用户钱包中的加密资产。 近年来,Web3钓鱼事件不断出现,且发展出钓鱼即服务的黑色产业链&#xf…

python+pymysql对数据库进行增、删、改、查操作

一、概述 接口测试中,应用到数据库操作的场景: 1.校验测试数据 接口发送请求后明确会对数据库中的某个字段进行修改(编辑,更新、删除操作),但,响应结果中无该字段数据时。 例如:删…

QML-1- qml简介及项目创建

文章目录 1. QML 简介2. 项目创建3. 目录结构4. CMakeLists.txt 简单介绍5. 运行demo 1. QML 简介 根据官网介绍,qml 为qt一个模块,使用Qml语言开发应用程序和库提供了一个框架。它定义并实现了语言和引擎基础结构,并提供了一个API&#xff…

搭建属于自己的 Git 仓库:GitLab

搭建属于自己的 Git 仓库:使用 GitLab 文章目录 搭建属于自己的 Git 仓库:使用 GitLab什么是 GitLab?准备工作安装 Docker使用Docker Compose 快速构建GitLab1、从docker compose快速搭建GitLab2、部署到服务器并访问3、浏览器访问 在现代软件…

Linux-挂盘-分区-卸盘

Linux-挂盘-分区-卸盘 1. 添加硬盘 2. 查看硬盘 [rootlocalhost /]# lsblk # 查看我们新添加的磁盘 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 80G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 …

基于JT/T808、JT/T1078、苏标、粤标视频主动安全监控

1.概述 如下图是以实时视频点播与部标机产生了主动安全报警,各个服务之间的交互流程说明。 整个系统有以下几个核心组件组成: 1:系统业务端:车载监控业务系统,给用户提供车载监控整套业务流程与界面呈现;…

蓝海项目揭秘:跨境选品师的崛起与挑战

随着全球化贸易的日益深入和电子商务的蓬勃发展,跨境选品师这一新兴职业逐渐走进人们的视野。跨境选品师,顾名思义,就是专门负责为跨境电商平台挑选和推荐适合海外市场的商品的专业人士。那么,跨境选品师这一职业能否被视为一个蓝…

【算法】排序

排序算法在信息学非常常用。Hello&#xff01;大家好&#xff0c;我是学霸小羊&#xff0c;今天讲几个排序算法。 1.“打擂台”排序 思路&#xff1a;a[ i ]和a[ j ]打擂台&#xff08;i<j&#xff09;。 这个方法简单易懂&#xff0c;只需要看看需不需要交换。按从大到小…

行为设计模式之策略模式

文章目录 概述原理结构图 代码实现小结 概述 策略模式(strategy pattern)的原始定义是&#xff1a;定义一系列算法&#xff0c;将每一个算法封装起来&#xff0c;并使它们可以相互替换。策略模式让算法可以独立于使用它的客户端而变化。 在软件开发中也会遇到相似的情况&…

考研数学|强化跟「张宇」还是「武忠祥」?看这一篇!

考研数学强化阶段是备考过程中非常关键的一环&#xff0c;它不仅要求学生巩固和深化基础知识&#xff0c;还要求学生能够灵活运用所学知识解决复杂问题。 在选择张宇老师或武忠祥老师的高数强化课时&#xff0c;你可以考虑以下几个方面。 首先每位学生都有自己独特的学习风格…