我想使用Jmeter测试文件上传。
我想同时使用5个线程上传文件。
1个线程成功上传了所有文件,但之后所有线程都说该文件存在(这很有意义)
有没有一种方法可以成功地从所有5个线程上载所有文件,可能每次都会生成新的文件名?
答案 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脚本的同一文件夹中
现在,在脚本配置中,使用以下配置在您的POST请求(上传文件)之前添加2 counters
第一柜台
开始0
增加1
参考名称originalName
为每个用户Yes
每个线程组迭代No
上的重置计数器
第二柜台
开始1
增加1
参考名称Iteration
为每个用户Yes
每个线程组迭代No
上的重置计数器
现在添加一个loop controller,并将循环计数设置为10
,然后添加另一个计数器,OS Process Sampler和CSV 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
。结构如下所示: