C loadrunner使用每个VUser上载唯一的文件

C loadrunner使用每个VUser上载唯一的文件,c,file-upload,loadrunner,C,File Upload,Loadrunner,我想在每次运行VUser脚本时上传一个唯一的文件(如控制器场景中的#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(

我想在每次运行VUser脚本时上传一个唯一的文件(如控制器场景中的#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.然后最后删除文件


可能将文件生成放在VUser脚本的init中,将文件删除放在VUser脚本的结尾部分?

您有两个选项

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

  • 我想你的剧本就快写好了。我看到的问题是,对于正在创建的文件,您没有足够唯一的文件名。100个用户中的每一个都将以相同的迭代编号开始

    您可以尝试这样做,在脚本的参数列表中创建一个名为“vuser”的新参数,并将其指定为类型“vuser ID”。当您在控制器中运行vuser时,它将填充为单个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}") );
    

    只要您的所有用户都在控制器中的同一个组中,这就可以工作。如果在多个组中使用此选项,则通过在文件名中添加“组名”参数来执行相同的操作。

    Ok。我赞成你的第一个建议。您实际上建议我将所有预生成的文件存储在外部磁盘上,将其连接到控制器或load generator,并在我的脚本中引用此外部磁盘(在我的脚本的参数设置中),对吗?除非您使用ESATA,否则外部磁盘将更慢。本地最快的方法是使用内部SSD作为每个load generator上的第二个驱动器。将预生成的文件存储在第二个内部硬盘上,然后使用参数文件将文件名和位置信息传递给脚本。我假设您将在测试期间密切监视负载生成器,以查看测试中的任何偏差,并且您将至少有三个负载生成器(两个用于主负载,一个用于控制)。您很可能需要更多的负载generators@JamesPulley,+1关于硬盘瓶颈的好建议。另请参阅