2

我想在每次运行 VUser 脚本时上传一个唯一的文件(如 Controller 场景中的 Vuser 数),我在不同的论坛上找到了一些示例,并将它们放在一起尝试完成此任务:

Action()
{

char command[100];
sprintf(command, “copy C:\\source_dir\\srcFile.txt C:\\source_dir\\srcFile-%s.txt”,              
lr_eval_string (”{iteration_number}”));
system(command);

web_submit_data("FileUpload",
"Action={URL}",
"Method=POST",
"EncType=multipart/form-data",
"TargetFrame=",
"RecContentType=text/html",
"Mode=HTML",
ITEMDATA,
"Name=File", "Value=C:\\source_dir\\srcFile-%s.txt", "File=yes", ENDITEM,
LAST);

sprintf(command, “del C:\\source_dir\\srcFile-%s.txt”, lr_eval_string (”{iteration_number}”));
system(command);

return 0;


}

然而,这个脚本每次都会创建 100 个文件,这不是我想要的共犯。1.如何修改我的脚本以创建 100 个唯一文件(一次)。2.然后在控制器中为每个 VUser 运行一次上传(web_submit_data 函数)。3.然后到底删除文件?

也许将文件生成放在 init 中,将文件删除放在 VUser 脚本的末尾部分?

4

2 回答 2

2

你有几个选择。

  1. 您可以预先生成测试期间需要的所有文件,然后将完全限定的文件名作为唯一参数传递给虚拟用户脚本。如果文件位于负载生成器上,那么您将需要处理一些读取争用,这将影响您的虚拟用户,因为他们都在争夺驱动器上的读取头。如果文件位于网络附加存储上,那么您也需要将文件通过网络移动到负载生成器,然后再从生成器中移出进行上传。如果在测试期间将文件单独放在小型辅助驱动器(SSD)上,则可以显着提高读取访问权限。
  2. 您可以即时创建文件。(a) 定义随机文件大小 (b) 定义随机文件名 (c) 在本地上下文中写入文件 (d) 在脚本中使用文件进行上传 (e) 删除文件。所有这些都将在迭代的上下文中进行,假设上传的文件对于每个用户的每次迭代都需要具有唯一的文件名和大小。为此,您必须在性能测试期间违反许多关于使用硬盘的最佳实践规则。你会有几十个?数百?所有虚拟用户线程都在争夺对本地磁盘子系统的访问权限,这通常是减慢所有虚拟用户的方法,因为 CPU 被发送用于高优先级 I/O 中断任务并远离用户进程,加上不可避免的等待当您的线程创建|写入|读取然后删除文件时,硬盘驱动器的读/写磁头。
于 2013-02-21T14:15:51.400 回答
1

我认为您的脚本几乎就在那里。我看到的问题是您正在创建的文件没有足够唯一的文件名。您的 100 个用户中的每一个都将从相同的迭代编号开始。

您可以尝试类似的方法,在脚本的参数列表中创建一个名为“ vuser ”的新参数,并将其分配类型为“ Vuser ID ”。当您在控制器中运行它时,这将填充为单个 vuser 的编号。这将确保您的用户在使用文件时不会互相踩踏。将此添加到您的文件名中,如下所示:

sprintf(command, "copy C:\\source_dir\\srcFile.txt C:\\source_dir\\srcFile-%s%s.txt,              
lr_eval_string ("{iteration_number}")
lr_eval_string ("{vuser}") );

只要您的所有用户都在 Controller 中的同一组中,这将起作用。如果您在多个组中使用它,那么通过将“组名”参数添加到文件名来执行相同的操作。

于 2013-02-28T20:33:27.890 回答