• JMeter中关于动态切换不同CSV文件解决方案


    最近写case,需要当前播放节目的数据作为输入数据,所以每个时刻所用的数据只能是当前时刻附件的数据,尝试用CSV Data Set Config动态加载不同的文件,没有成功,好像CSV Data Set Config里面的 文件名是在case运行之前就加载了,后期没法改(反正我自己没找到方法)。后来发现__CSVRead()函数可以在运行时读取,但是网上有人说csv文件不能太大。从我目前的需求来说,只需要一分钟切换一个文件,这样每一个文件里面的数据也就只需要包含几分钟时间段内的数据,这样文件也不会太大。

    具体实现:

    1. 在用__CSVRead()函数读取数据之前,先生成要读取的文件名(包括完整路径和扩展名),然后添加一个BeanShell Sampler,在里面用下面的代码每一列数据保存到变量里面,读取代码如下:

      line1: vars.put("GlfProgramId",${__CSVRead(${__property(scheduleOnNowFile)},0)});
      Line2: vars.put("ServiceId",${__CSVRead(${__property(scheduleOnNowFile)},1)}${__CSVRead(${__property(scheduleOnNowFile)},next)});

    其中,Line1的意思是把scheduleOnNowFile这个csv文件的第一列的当前行保存到GlfProgramId这个变量,0是指读取第一列,后面个列依次是1,2,3...。

    Line2的意思跟第一行类似,只不过后面紧跟着的${__CSVRead(${__property(scheduleOnNowFile)},next)}是说后面的读取要移到下一行了,其中next就是指的下一行。当读到csv文件最后一行,会自动回到第一行。

    PS:1. 用__CSVRead()函数读取文件数据时,好像不能忽略掉第一行(很多时候CSV文件都有header,用CSV Data Set Config可以忽略header这一行).

            2. 如果一个threadgroup只读一行,那就只能在最后一次读取的时候加上${__CSVRead(${__property(scheduleOnNowFile)},next)}。

            3. __CSVRead()函数读取是按顺序读取的,多线程运行也是按顺序的,第一个线程读第一行,第二个就读第二行,依次读取。

            4. __CSVRead()函数读取列是完全按照半角逗号来区分不同的列的,不管每个列有没有双引号引起来,这个跟CSV Data Set Config是不一样的,CSV Data Set Config可以忽略掉双引号里面的逗号。所以如果字段里面有引号,需要在生成csv文件时,把半角逗号替换成全角逗号,等到读取出来要用的时候再替换回半角逗号。

  • 相关阅读:
    Delphi 2009增强之Exit函数
    带小数的10进制转16进制
    产生指定长度的随机字符串
    在delph 2009中,利用Build Events调用UPX
    WMI信息获取
    MYSQL 存储过程学习笔记
    将窗体透明化
    倒计时
    通过程序开启XP的ClearType显示效果
    使用ODAC调用ORACLE的自定义函数和存储过程
  • 原文地址:https://www.cnblogs.com/lijavasy/p/9018407.html
Copyright © 2020-2023  润新知