我们在工作中利用jmeter做接口自动化或压测的时候,通常涉及到用例管理、参数管理等情况,这时候就需要使用外部数据文件,而jmeter 也提供了这样一个组件,用来读取外部数据,即CSV数据文件设置。

  在讲这个组件之前,先提一下它的作用域,这就要分情况:1、如果是添加到测试计划下面(与线程组一个层级),那么所有的线程组下面的HTTP请求都能读取它里面的数据;2、如果是添加到某一个线程组下面(与HTTP请求同一个层级),那么这个线程组下面所有的HTTP请求都能读取它里面的数据,但是其他线程组无法读取;3、如果添加到某个HTTP请求下面,那么只有这个HTTP请求才能读取它里面的数据。

  上面讲的作用域范围是从大到小的,具体怎么使用,看大家的实际需求。如果在测试计划里面用到了多个CSV文件,建议,每个文件里面的参数名称尽量不要有相同的。另外,最好是将这个CSV组件名称改成参数名称,这样不管是自己还是别人看你的脚本时,一目了然,知道这个地方用了几个参数。如下图:

在这里插入图片描述
  如上图所示,现在讲一个SCV面板的设置,

  文件名称,这里可以直接选择数据文件,当然路径是你本机的全路径,也可以使用,但是考虑到兼容性,比如别人把你的脚本、数据copy走,或者上传了服务器,那么就会包路径错误。这里可以使用相对路径,这样别人也能使用你的脚本、数据,这种方式看着不错,但是忽略了Linux服务器上的相对路径与Window机器上的差异,所以,最好的办法就是将文件路径参数化,这样就实现了跨平台使用。如果你没有这样的需求,就无所谓了,怎么简单怎么来。

  文件编码,针对中文比较常见,有时候在结果观察树可以看到HTTP请求入参里面的参数值是乱码,但是你会奇怪,自己的文件里面明明都是中文,怎么会乱码。其实,这是文件编辑器帮你解码了,但是jmeter从内容里面拿到的数据并不是解码后的,所以这中间的差异导致了乱码。解决这个问题,首先要知道你的文件使用的编码方式,然后改成UTF-8编码,如果你不想麻烦,或者觉得改编码方式麻烦,那就 UTF-8、gb2312、gbk来回尝试,基本上都能解决。注意:不要使用Window记事本去编辑CSV文件,可能会造成该文件带BOM格式,最好使用Notepad++。

  变量名称,这个就是CSV文件的参数名称,一列对应一个名称;如果文件里面第一行已经添加了参数名称,这里可以为空;如果文件里面没有,这里就需要填一下。

  忽略首行,True/False,如果变量名称设置了参数名,这里就是False(默认也是False),否则就是True。

  分隔符,用Notepad++打开文件,每个参数之间的分隔符是什么,这里就填什么,不过,大部分情况就是”,“。我也只遇到一次。必须改成";",那是参数值特殊的原因。

  是否允许带引号?,默认是False,如果你的参数值里面有双引号,会进行URL编码,"会转换成%22;如果改成True,就是允许带双引号,不会进行编码处理。

  遇到文件结束符再次循环?,默认是True,可以循环使用;改成False,不进行循环使用。一般与”遇到文件结束符停止线程?“结合使用。

  到文件结束符停止线程?,默认是False,停止线程;改成False,不停止线程。一般与“遇到文件结束符再次循环?”配合使用。

  • 遇到文件结束符再次循环,选择True,此时,遇到文件结束符停止线程选择True/False 【无任何意义】;既然允许参数可以重复使用,又怎么可能发生参数不足停止线程的情况?遇到文件结束符再次循环 优先级高于 遇到文件结束符停止线程。
  • 遇到文件结束符再次循环,选择False,遇到文件结束符停止线程 选择True,这种情况,如果线程是4个,参数是3个,循环1次,那么只会请求3次。
  • 遇到文件结束符再次循环,选择False,遇到文件结束符停止线程 选择False,这种情况,如果线程是4个,参数是3个,循环1次,那么会请求4次,但是,第4次因为没有参数可取,所以会报错。

  线程共享方式,有4个选项,大部分用的就是前3项,所以分开介绍前3个:

  • 所有线程,有些翻译是所有现场,它的作用是每次迭代唯一,也是默认选项。索引线程之间共享这个数据文件,只打开一次。
  • 当前线程组,一个线程组一份数据文件,同一个线程组只打开一次文件,线程组内所有线程共享这个数据文件。如果只有一个线程组,效果与 所有线程是一样的。
  • 当前线程,每次迭代顺序,每个线程一份数据文件,参数在当前线程中有效。

  CSV 的使用今天就到这里,如果大家有疑问,欢迎指正交流。

更多推荐