此解决方案适用于您共享的配置,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,然后添加另一个 counter、OS Process Sampler 和 CSV Data Set Config 作为具有以下配置的循环控制器的子级
计数器配置
开始1
递增1
参考名称fileNumber
为每个用户独立跟踪计数器Yes
在每个线程组迭代上重置计数器Yes
CSV 数据集配置
文件名extensionsCSVFile.csv
变量名extension
操作系统进程采样器配置
命令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线程组(除了 BeanShell PostProcessor,粘贴后将其删除)。
现在进入tearDown Thread Group中的OS Process Sampler,调整第二个参数如下
ren {}\Thread${__threadNum}_file${fileNumber}_${__P(lastIteration)}.${extension} Thread${__threadNum}_file${fileNumber}_0.${extension}
最后,只需确保主线程组和tearDown线程组中的线程数相同,在本例中为5。结构如下