终于有人把 Jmeter 工具的 CSV 参数化讲清楚啦!

发布于 更新于
本文目录
  1. 前言
  2. CSV使用场景
  3. CSV数据文件设置
  4. 1)文件名
  5. 2)文件编码
  6. 3)变量名称
  7. 4)忽略首行
  8. 5)分隔符
  9. 6)是否允许带引号
  10. 7)遇到文件结束符再次循环吗?
  11. 8)遇到文件结束符停止线程吗?
  12. 9)线程共享模式:有三个选项,所有线程,当前线程组,当前线程,工作原理分别如下:
  13. csv元件使用的注意事项
  14. Jmeter自带的csv数据文件设置功能, 多台机器做助攻机发起性能测试时会有问题:

技术文章接口测试

从事软件测试的小伙伴都知道Jmeter工具,当我们使用Jmeter工具做接口测试和性能测试的时候,CSV这个配置元件就会经常使用到。但是这个元件有很多场景很多人并不是很清楚,并且有些特性如果不弄明白会影响整个脚本的使用。所以,我们今天就给大

前言

从事软件测试的小伙伴都知道Jmeter工具,当我们使用Jmeter工具做接口测试和性能测试的时候,CSV这个配置元件就会经常使用到。但是这个元件有很多场景很多人并不是很清楚,并且有些特性如果不弄明白会影响整个脚本的使用。所以,我们今天就给大家来讲一下这个CSV配置元件。

CSV使用场景

CSV数据文件参数化是Jmeter的一个配置元件,当我们需要批量执行某个接口并需要构造真实数据的时候,可以从数据库里导出数据到CSV文件里,接口通过访问CSV文件批量进行操作。

CSV数据文件设置

CSV数据文件配置元件的界面如下图所示:

图片.png

其中每个部分应该要如何配置以及原理是什么,我们分别来详细给大家做一些讲解:

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:允许带引号 , 如果数据有引号就会自动去掉引号。

如下图所示:

图片.png

注意:这个配置只能针对txt文本操作,csv文件不会生效。

7)遇到文件结束符再次循环吗?

  • True: 继续循环取文件中值。当文件内容从头到尾,全部都取了1次值之后,再从头开始取值。这个是默认情况的值。

  • False: 不再循环取值,如果还要用值,就是一个空值 <EOF>, 不会停止运行;假设文件只有10行,但是,你要循环取100个值,那么第11个值开始到最后,值都是 <EOF>。

8)遇到文件结束符停止线程吗?

  • True:停止线程,jmeter就会停止运行。

    • 假设文件只有10行,但是你本来想运行100次,jmeter就会只运行10次就停止了

  • False:继续运行,jmeter还会继续跑;这个是默认情况下的值。

具体的配置场景和运行效果如下:

图片.png图片.png图片.png

当两个配置冲突了,就像编写代码一样,从上到下运行,后面的跟前面的冲突,后面的会失效。

图片.png

9)线程共享模式:有三个选项,所有线程,当前线程组,当前线程,工作原理分别如下:

  • 所有线程: 所有线程共享这个csv文件数据,不管jmeter有多个线程组,总共有多少个线程,所有的线程都共用1份文件

    • 所有的线程在使用这个文件的时候, 排队依次使用文件中的数据:第一个线程使用第一行,依次排列取值。

    • 注意:当2个线程组共享这个CSV文件,csv放测试计划下给多个线程组共享才,否则不能跨线程组使用。

    图片.png
  • 当前线程组: 这个线程组的所有的线程共用1份csv数据。如果有多个线程组,内存中就有几分相同的数据加载。

    • 单独线程组里单独读取自己内存的数据,不会混用。每个线程组都从头开始取。

    图片.png
  • 当前线程: 每个线程【用户】私有1份, 有多少个线程,在内存中就有多少份。运行中取值时都取自己的那1份,都是从头开始。

    • 如果设置循环,那么单个线程就会取第二行值。

图片.png

以上三种情况,最后一个【当前线程】选项占用内存最多。

csv元件使用的注意事项

Jmeter自带的csv数据文件设置功能, 多台机器做助攻机发起性能测试时会有问题:

因为助攻机的脚本和csv文件都是由主控机分发的,大家拿到的脚本和文件都是一样的;比如三台机器助攻机都是读取的第一行的数据发送的登录请求,那么登录的信息会导致其中2个登录失败,如果是注册接口也会因为数据不能重复而导致后面2个助攻机的接口请求会失败。

解决方法:

  • 1、不同助攻机读取的文件名相同,但是内容不同,就是让助攻机的文件内容做修改和差异化,这个比较多使用;

  • 2、让csv文件读取行随机,不要统一从第一行开始读取,这样数据重复的概率小很多。

来源:testingpai

继续阅读