前言
从事软件测试的小伙伴都知道Jmeter工具,当我们使用Jmeter工具做接口测试和性能测试的时候,CSV这个配置元件就会经常使用到。但是这个元件有很多场景很多人并不是很清楚,并且有些特性如果不弄明白会影响整个脚本的使用。所以,我们今天就给大家来讲一下这个CSV配置元件。
CSV使用场景
CSV数据文件参数化是Jmeter的一个配置元件,当我们需要批量执行某个接口并需要构造真实数据的时候,可以从数据库里导出数据到CSV文件里,接口通过访问CSV文件批量进行操作。
CSV数据文件设置
CSV数据文件配置元件的界面如下图所示:
其中每个部分应该要如何配置以及原理是什么,我们分别来详细给大家做一些讲解:
1)文件名
需要读取的csv配置文件,这里可以写绝对路径,也可以配置相对路径:
- 绝对路径:点击浏览直接选择本地电脑上的文件,这样就会显示绝对路径;
- 相对路径:相对的起始点是jmx脚本的位置 | 或者jmeter的bin文件目录,如果csv的文件直接在这两个目录,可以直接写文件名,不需要带前面的路径也可以找到。
两种路径的写法所以我们一般都建议文件名填写相对路径,更简洁也更方便以后做分布式测试脚本分发。
这个csv的文件是支持多种格式:txt、csv、json、xml ,主要是列和列之间是逗号的文本文件就是csv文件,那么就都支持。
2)文件编码
这个文件的编码由选择的文件自身编码来选择。
- 如果用的是csv后缀的文件,字符集编码不一定是utf8。所以使用csv文件容易产生乱码现象。所以我们一般建议文件选择用txt后缀文件;
3)变量名称
自己定义变量名用来接收从csv文件里读取的数据,多个变量的时候用英文的逗号隔开,会依次去接收第一列,第二列...的数据;
- 如果第一个变量接受第一列,第二个变量接受第三列,中间写逗号+ 空格 |空来实现,如 name, ,pid
- 这个变量名就可以被后续的接口直接调用 ${name} ,从而获取csv文件里的数据。
4)忽略首行
- True 不要第1行,读取的时候不会读取第一个行数据;当csv第一行是表头的时候,会选择True;
- False 要第1行 ,当csv文件没有表头的时候选择False。
5)分隔符
读取的文件的列与列的分隔符号,默认csv文件是英文逗号,所以默认的配置就是英文的逗号;
6)是否允许带引号
- False: 不允许带引号, 如果csv数据里有引号就会当做数据的整体组成部分:如 “1344555555”
- True:允许带引号 , 如果数据有引号就会自动去掉引号。
如下图所示:
注意:这个配置只能针对txt文本操作,csv文件不会生效。
7)遇到文件结束符再次循环吗?
- True: 继续循环取文件中值。当文件内容从头到尾,全部都取了1次值之后,再从头开始取值。这个是默认情况的值。
- False: 不再循环取值,如果还要用值,就是一个空值 , 不会停止运行;假设文件只有10行,但是,你要循环取100个值,那么第11个值开始到最后,值都是 。
8)遇到文件结束符停止线程吗?
- True:停止线程,jmeter就会停止运行。
- 假设文件只有10行,但是你本来想运行100次,jmeter就会只运行10次就停止了
- False:继续运行,jmeter还会继续跑;这个是默认情况下的值。
具体的配置场景和运行效果如下:
当两个配置冲突了,就像编写代码一样,从上到下运行,后面的跟前面的冲突,后面的会失效。
9)线程共享模式:有三个选项,所有线程,当前线程组,当前线程,工作原理分别如下:
-
所有线程: 所有线程共享这个csv文件数据,不管jmeter有多个线程组,总共有多少个线程,所有的线程都共用1份文件
- 所有的线程在使用这个文件的时候, 排队依次使用文件中的数据:第一个线程使用第一行,依次排列取值。
- 注意:当2个线程组共享这个CSV文件,csv放测试计划下给多个线程组共享才,否则不能跨线程组使用。
-
当前线程组: 这个线程组的所有的线程共用1份csv数据。如果有多个线程组,内存中就有几分相同的数据加载。
- 单独线程组里单独读取自己内存的数据,不会混用。每个线程组都从头开始取。
-
当前线程: 每个线程【用户】私有1份, 有多少个线程,在内存中就有多少份。运行中取值时都取自己的那1份,都是从头开始。
- 如果设置循环,那么单个线程就会取第二行值。
以上三种情况,最后一个【当前线程】选项占用内存最多。
csv元件使用的注意事项
Jmeter自带的csv数据文件设置功能, 多台机器做助攻机发起性能测试时会有问题:
因为助攻机的脚本和csv文件都是由主控机分发的,大家拿到的脚本和文件都是一样的;比如三台机器助攻机都是读取的第一行的数据发送的登录请求,那么登录的信息会导致其中2个登录失败,如果是注册接口也会因为数据不能重复而导致后面2个助攻机的接口请求会失败。
解决方法:
- 1、不同助攻机读取的文件名相同,但是内容不同,就是让助攻机的文件内容做修改和差异化,这个比较多使用;
- 2、让csv文件读取行随机,不要统一从第一行开始读取,这样数据重复的概率小很多。
欢迎来到testingpai.com!
注册 关于