【问题标题】:Jmeter Uploading files using multiple threadsJmeter使用多个线程上传文件
【发布时间】:2019-10-08 04:39:23
【问题描述】:

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

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

1 线程成功上传所有文件,但之后所有线程都说文件存在(这是有道理的)

有没有办法可以从所有 5 个线程成功上传所有文件,每次都可能生成新文件名?

【问题讨论】:

  • 我可以在使用 beanshell 代码上传文件之前重命名文件。就我而言,虽然只有 1 个文件。同样,它会重命名您机器上的文件,因此您可能需要在每次测试之前/之后返回文件并再次重命名它们,这对您有用吗?如果是,您是否要从本地计算机运行脚本?
  • 我看到你在建议一些手动的东西......它不能被 beanshell 代码自动化,它会为每个用户重命名每个文件并上传它吗?是的,我在本地机器上运行
  • 手动的东西更像是测试数据组织,将文件重命名为 file_1.pdf、file_2.pdf、file_3.xlsx ...等。我的解决方案的另一个问题是您将无法同时上传具有 5 个并发用户的文件,但一次一个,原因是当 2 个或更多线程同时重命名文件时,只有最后一个线程将找到文件(因为它将从 file_1.pdf 重命名为 file_5.pdf),因此其他 4 个线程将失败。要解决这个问题,您需要为每个线程提供单独的文件(可以使用不同名称的副本)。

标签: jmeter


【解决方案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,然后添加另一个 counterOS Process SamplerCSV 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。结构如下

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2012-12-30
    • 2017-10-23
    相关资源
    最近更新 更多