Jmeter-从文件夹中读取所有文件,然后根据文件类型执行验证

时间:2018-08-22 17:29:21

标签: jmeter beanshell

我有不同类型的csv文件,例如Company,Jobcode,Workforce,我将它们放入SFTP中,并且文件将被处理并保存在DB中。我需要比较和验证csv文件的值和DB值,以便正确保存所有记录。

对于一个文件,我已经按照以下步骤进行了操作,并且能够进行验证。

  1. 线程组1->将单个文件拖放到SFTP并获得Beanshell后处理器中的行数
  2. 线程组2-> JDBC请求和循环控制器-csv文件配置和JSSR采样器为每个csv值循环并与DB值进行比较

删除多个文件 (一世)。 Beanshell处理器-要从Folder读取文件并将其存储在变量文件中,然后将此变量(文件)传递给-> ForEachController并放置SFTP采样器以处理文件(以便将记录保存在DB中)。

要验证csv文件和DB值,我需要获取每个文件的csv行数,对于这些文件,我将从步骤(i)中的文件夹中读取的所有文件都写入另一个csv文件(名为{{1} }。现在的问题是“ Allfiles.csv”具有以下内容

Allfiles.csv

由于是反斜杠(),所以我已将其替换为正斜杠(//)并保存在变量中。

现在我需要获取每个文件的行号。

我使用了Loop Controller-> CSV数据配置和具有以下代码的JSSR Sampler

C:\Users\AllFiles\Company_V1_0_201712251403.txt
C:\Users\AllFiles\JobCode_V1_0_201712040436.txt
C:\Users\AllFiles\Workc_V1_0_201802081914.txt

我无法获取每个文件的行号。

import org.apache.commons.io.FilenameUtils
import java.io.*

csvLineContent = vars.get('AllFiles')
log.info("-------------->" + csvLineContent)

csvLineContent = csvLineContent.replace('\\', '//') //replacing slash
vars.put('csvLineContent', csvLineContent)
log.info("==============" + csvLineContent)
csvfileWithoutExt = FilenameUtils.getName(csvLineContent)
log.info("File name is " + csvfileWithoutExt) //Get only file name

try {
    if (csvfileWithoutExt.startsWith("C")) //Get the line count for company file
    {
        log.info("File Name of Company file-------> " + csvfileWithoutExt)
        log.info("File full path ---> " + csvLineContent)
        reader = new LineNumberReader(new FileReader('csvLineContent')) // Issue here
        log.info("Reading file ====" + reader)
     }
} catch (Throwable ex) {
     log.error("Error in Beanshell", ex);
     throw ex;
}

2 个答案:

答案 0 :(得分:0)

当前您正在读取文件名,要通过变量上下文读取文件,请删除变量名周围的引号:

 reader = new LineNumberReader(new FileReader(csvLineContent)) 

答案 1 :(得分:0)

  1. 您需要更改此行:

    reader = new LineNumberReader(new FileReader('csvLineContent'))
    

    对此:

    reader = new LineNumberReader(new FileReader(csvLineContent))
    

    但是我认为它不能工作,因为文件位于C:\Users\AllFiles文件夹下,要读取该文件,您需要提供完整路径,而不仅仅是名称

  2. 根据{{​​3}},
  3. 建议用户使用JSR223测试元素和 Groovy 语言,如果在JSR223元素中使用beanshell语言-您将不会有任何性能改进
  4. 在Groovy中计算文件中的行数很简单:

    int linesNo = new File('csvLineContent').readLines().size()
    

    更多信息: