loadrunner上传每个VUser的唯一文件

时间:2013-02-20 19:52:16

标签: c file-upload loadrunner

我想在每次运行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脚本的末尾?

2 个答案:

答案 0 :(得分:2)

你有几个选择。

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

答案 1 :(得分: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中的同一组中,这将有效。如果您在多个组中使用它,则通过向文件名添加“组名”参数来执行相同的操作。