2013-02-20 32 views
2

我想每一个Vuser脚本的运行时间上传一个唯一的文件(如在控制器方案的Vuser#),我发现在不同的论坛,从他们在一起的一些例子来试试共同完成这项任务:LoadRunner的uplod唯一文件每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中运行一次upload(web_submit_data函数)。 3.然后删除文件到底?

也许把文件生成在init和文件中Vuser脚本的端部删除?

+0

另见https://groups.google.com/d/msg/lr-loadrunner/dk1ojhjP06A/hioxhi6zjeIJ – Pacerier 2015-01-03 07:14:26

回答

2

你有几个选项。

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

确定。我会提出你的第一个建议。您实际上建议我将所有预生成的文件存储在外部磁盘上,将其连接到控制器或负载生成器,并在我的脚本中引用此外部磁盘(在我的脚本中的参数设置中),对不对? – 2013-02-24 19:17:32

+0

除非您使用ESATA,否则外部磁盘会更慢。本地最快的方法是在每个负载生成器上使用内部SSD作为第二个驱动器。将预生成的文件存储在第二个内置硬盘上,然后使用参数文件将文件名和位置信息传递给脚本。我假设在测试过程中您将密切监测负载生成器,并且您将至少有三个负载生成器(两个用于主负载,一个用于控制)。您很可能需要更多的负载生成器 – 2013-02-25 13:22:13

+0

@JamesPulley,+1关于硬盘瓶颈的好建议。 – Pacerier 2015-01-03 07:12:50

1

我觉得你的脚本是几乎没有。我看到的问题是,您没有足够的唯一文件名称来存放您正在创建的文件。您的每个用户都将以相同的迭代编号开始。

你可以尝试这样的事情,创建脚本的参数列表称为“的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}")); 

这只要所有的用户都在控制器同组的工作。如果跨越多个组使用此属性,则通过向文件名添加“组名”参数来执行相同的操作。