Jmeter-CSV参数化

测试需求

测试统计系统,需要借助Jmeter往统计系统中注入大量数据,以测试在大量数据下统计系统响应情况。
大量数据:向服务器发关大量请求A,从而在系统中产生大量数据记录
(1) 请求A需要大量发送-》实现:循环控制器来实现大量发送
(2) 请求A需要不同的请求信息-》实现:需要对请求A中参数值进行参数化,想到读取CSV文件来参数化
(3) 如何请求A循环一次,从就CSV读取一行参数值

测试实现

测试实现1——单线程+循环控制器

在这里插入图片描述

运行结果:——未达到预期结果
发送的N次请求中参数值都是取的CSV中同一行参数值,请求并没有取第一行后循环取第二行…

测试实现2——多线程

在这里插入图片描述
运行结果:——达到预期结果
发送的N次请求中参数值都是取的CSV,线程1取第一行;线程二取第二行,依次按线程数循环取

CSV参数化时如何控制文件取的方式?

在这里插入图片描述
1.Filename
CSV:文件的名称及地址,旧版本应该是需要手动拷贝或输入,高版本应该点击【浏览】按钮选择文件地址
(1)相对地址:指数据文件(bat/txt/csv)相对于当前执行的.jmx脚本文件的路径
在jmeter的bin目录或脚本目录时,只需给出文件名即可;
./ 代表当前所在的目录
…/ 代表上一层目录
/代表根目录
(2)绝对地址:指数据文件(bat/txt/csv)文件的存放路径
2.File encoding
保持和文件编辑格式一致(如文件编辑为utf-8,这里就填 utf-8)(进一步确认点??)
3.Variable Names(comma-delimited):
变量名称:变量1,变量2,变量3。。。。变量名之用英文,隔开
CSV文件:列1,列2,列3,列4…
变量1-》取列1值;变量2-》取列2值。。。。
变量使用:
www.baidu.com/search=" 变 量 1 , {变量1}, 1{变量2}"。。。。
4.Ignore first line
如果文件中第一行是参数名,不是参数值时,可设置为True,则默认从第二行开始取数值
Delimiter(use “t” for tab)
一般情况下,分隔符为英文逗号,保持默认就行
特殊情况下,分隔符为Tab,此处填/t
5.Allow quoted data?:是否同意文件内容加引号
文件内容为
name,pwd
“te,st1”,11111
Allow quoted data=True ,读取值时则会自动去掉数据中的引号使能够正常读取数据,且即使引号之间的内容包含有分隔符时,仍作为一个整体而不进行分隔;
读取效果为:te,st1
Allow quoted data=False,则读取数据报错;
如果希望内容中有’‘时也能够正常读取,“”做为内容一部分,则需要加两个双引号(其中一个’'代表转义含义)
Allow quoted data=True
name,pwd
"“te,st1"”,11111
读取效果为:“te,st1”
6.Recycle on EOF?:
到了文件尾是否循环,True—继续从文件第一行开始读取,False—不再循环;
此项与下一项的设置为互斥关系,即true-false,或false-true;
7.Stop thread on EOF?:
到了文件尾是否停止线程,True—停止,False—不停止;
注意:当Recycle on EOF设置为True时,此项设置无效。
(1)线程有10,文件行数有15个
Recycle on EOF=True,Stop thread on EOF=True
Recycle on EOF=True,Stop thread on EOF=Fasle
以上还只执行了10次,以线程数为结束
Recycle on EOF=False,Stop thread on EOF=True
Recycle on EOF=False,Stop thread on EOF=Fasle
以上还只执行了10次,以线程数为结束
(2)线程有20,文件行数有15个
Recycle on EOF=True,Stop thread on EOF=True
Recycle on EOF=True,Stop thread on EOF=Fasle
以上还是执行20次,循环取文件。
Recycle on EOF=False,Stop thread on EOF=True
以上还只执行了15次,以文件数为结束
Recycle on EOF=False,Stop thread on EOF=Fasle
以上还只执行了20次,以线程数为结束
8.Sharing mode:共享模式
在这里插入图片描述
(1)All threads
此元件作用范围内的所有线程共享csv数据,每个线程依次读取csv数据,互不重复;
在All Threads模式下,不区分线程组概念,所有的线程(所有线程组下面的线程)会从第1行开始取值并依次往下进行取值,但是同一线程组内的多个sampler总是取相同的值。
在这里插入图片描述
总结:以线程为循环单位。
线程组1_线程1(取第一行)-》线程组2_线程1(取第二行)-》线程组1_线程2(取第三行)-》线程组2_线程2(取第四行)
(2)Current thread group
取值情况是:以线程组为单位,每个线程组内的线程都会从第1行开始取值并依次往下进行取值。
线程组1_线程1(取第一行)-》线程组1_线程2(取第二行)-》线程组1_线程1(取第三行)-》线程组1_线程2(取第四行)
线程组2_线程1(取第一行)-》线程组2_线程2(取第二行)-》线程组2_线程1(取第三行)-》线程组2_线程2(取第四行)
总结:以线程组为循环单位。
(3)Current thread
Current thread:当前线程。
取值情况是:当前线程,该测试计划内的所有线程都取第一行。

遗留问题:
循环控制下请求,如何实现循环取参数化值?

猜你喜欢

转载自blog.csdn.net/weixin_43533308/article/details/103423877