Jmeter使用多个线程上传文件

时间:2019-05-21 18:11:10

标签: jmeter

我想使用Jmeter测试文件上传。

我想同时使用5个线程上传文件。

1个线程成功上传了所有文件,但之后所有线程都说该文件存在(这很有意义)

有没有一种方法可以成功地从所有5个线程上载所有文件,可能每次都会生成新的文件名?

enter image description here

1 个答案:

答案 0 :(得分:1)

此解决方案适用于您共享的配置, 5个并发用户,每个用户上传 10个文件

首先,为每个线程创建单独的文件(您有10个文件,将它们复制到50个文件中)并按以下方式重命名

Thread1_file1_0
Thread1_file2_0
Thread1_file3_0
.
.
Thread1_file10_0
Thread2_file1_0
Thread2_file2_0
.
.
Thread5_file10_0

然后创建一个 csv文件,并在A列中添加文件扩展名。请确保row 1反映了Threadx_file1_0的扩展名,而row 2反映了Threadx_file2_0文件,如下所示,然后将csv文件保存在jmx脚本的同一文件夹中

enter image description here

现在,在脚本配置中,使用以下配置在您的POST请求(上传文件)之前添加2 counters

第一柜台

开始0

增加1

参考名称originalName

为每个用户Yes

独立跟踪计数器

每个线程组迭代No上的重置计数器

第二柜台

开始1

增加1

参考名称Iteration

为每个用户Yes

独立跟踪计数器

每个线程组迭代No上的重置计数器

现在添加一个loop controller,并将循环计数设置为10,然后添加另一个计数器OS Process SamplerCSV Data Set Config作为循环的子代具有以下配置的控制器

计数器配置

开始1

增加1

参考名称fileNumber

为每个用户Yes

独立跟踪计数器

每个线程组迭代Yes上的重置计数器

CSV数据集配置

文件名extensionsCSVFile.csv

变量名extension

OS Process Sampler配置

命令cmd

命令参数

/C

ren {path to your folder}\Thread${__threadNum}_file${fileNumber}_${originalName}.${extension} Thread${__threadNum}_file${fileNumber}_${Iteration}.${extension}

每行作为一个单独的参数。现在,在您的发帖请求中使用文件名,如下所示

{path}\Thread${__threadNum}_file1_${Iteration}.pdf
{path}\Thread${__threadNum}_file2_${Iteration}.pdf
.
.
{path}\Thread${__threadNum}_file10_${Iteration}.docx

这可以完成工作,但是我建议您还添加一种将名称恢复为Thread1_file1_0的方法。您可以按照以下步骤操作

添加一个BeanShell PostProcessor作为 OS Process Sampler 的子代,并在代码区域中添加以下代码

props.put("lastIteration", vars.get("Iteration"));

现在添加一个tearDown Thread Group,然后复制循环控制器及其上一步中的所有元素,并粘贴到 tearDown线程组中(< strong> BeanShell PostProcessor ,请在粘贴后将其删除)。

现在进入 tearDown线程组中的 OS Process Sampler ,并按如下所示调整第二个参数

ren {}\Thread${__threadNum}_file${fileNumber}_${__P(lastIteration)}.${extension} Thread${__threadNum}_file${fileNumber}_0.${extension}

最后,只需确保主线程组 tearDown线程组中的线程数相同,在这种情况下为5。结构如下所示:

enter image description here